ハイパフォーマンスSnowpipeストリームにおけるエラー処理

このトピックでは、Snowpipe Streamingのハイパフォーマンス版で利用可能なエラー処理メカニズムについて概説します。この強化されたアプローチにより、詳細なエラー情報が提供され、エラー処理プロセス全体が改善されるため、より堅牢で有益な体験が得られます。

ハイパフォーマンスアーキテクチャーの主なエラー処理機能

  • 強化されたチャンネル・ステータス・エンドポイント: このエディションでは、チャンネル・ステータス・エンドポイントを拡張し、より包括的なエラー情報を提供します。

  • きめ細かなエラー詳細: ハイパフォーマンスエディションでは、より詳細なエラー情報が提供され、エラー発生箇所の特定やインジェスト問題の根本原因の特定に役立ちます。

  • クライアントエクスペリエンスの向上: ハイパフォーマンスエディションは、クライアントのエラー処理を簡素化し、エラーの推論と回復の複雑さを軽減します。

  • チャネル履歴ビュー: SNOWPIPE_STREAMING_CHANNEL_HISTORY ビュー では、エラーの監視と特定用に、チャネルのアクティビティ履歴が提供されます。この機能により、エラーの傾向を追跡し、潜在的な問題に積極的に対処することができます。

チャンネルステータスのエンドポイント詳細

ハイパフォーマンスアーキテクチャには、チャネルに関するより詳細な、特定の時点の情報を提供するチャネルステータスエンドポイントが含まれます。

クラシックアーキテクチャのチャネルステータス情報である statusCodepersistedOffsetToken に加え、ハイパフォーマンスアーキテクチャには以下の情報が含まれます。

  • channel_status_code:ストリーミングチャネルの現在の動作ステータスを表します。このコードは、チャネルの健全性とデータ取り込み能力を高レベルで示すものです。チャネルのステータスコードの詳細については、 クライアント側のエラー処理と必要なアクション をご参照ください。

  • last_commited_offset_token:Snowflakeによってターゲットテーブルに正常にコミットされた最後の行セットのオフセットトークンを示します。これは、進捗状況を追跡し、確実にデータを配信するために非常に重要です。

  • created_on_ms: Snowflake 内でストリーミングチャネルが最初に作成された日時を示すミリ秒単位のタイムスタンプ。

  • database_name: ストリーミング・チャンネルがデータを取り込むように構成されているデータベースの名前。

  • schema_name: ストリーミング・チャンネルのターゲット・テーブルが存在する、指定したデータベース内のスキーマ名。

  • pipe_name: 特定のターゲットテーブルにデータを取り込むために、このSnowpipeストリーミングチャンネルを利用するように構成されたSnowpipeオブジェクトの名前。

  • channel_name: ユーザーが作成した、特定のSnowpipeストリーミングチャンネルインスタンスの名前。

  • rows_inserted: このストリーミング・チャンネルが作成されてから、ターゲット・テーブルに正常に挿入されたデータ行の総数のカウント。

  • rows_parsed:Snowpipe Streaming サービスがこのチャンネルで処理・解析したデータ行の総数。(エラーなどにより、必ずしも挿入されたわけではありません)。

  • rows_error_count: 処理中にエラーが発生し、Snowpipe Streamingサービスによって拒否されたデータ行の総数。

  • last_error_offset_upper_bound: エラーを含む最後の行セットのオフセット・トークン範囲の上限。これは、データストリーム内の最新のエラーのおおよその位置を識別するのに役立ちます。

  • last_error_message: 最新のエラーコードに対応する人間が読めるメッセージ。

  • last_error_timestamp: このストリーミング・チャンネルで直近のエラーが発生した日時を示すタイムスタンプ。

  • snowflake_avg_processing_latency_ms: このチャンネルで受信した行セットの処理で Snowflake サービスが観測した平均待ち時間(ミリ秒単位)。この指標は、Snowflake内のインジェストパイプラインのパフォーマンスに関する洞察を提供します。

ハイパフォーマンスアーキテクチャーのエラー処理フロー

  • クライアントがデータを送信: クライアントアプリケーションは、Snowpipe ストリーミング SDK を使用して、 appendRow(s) API を介して Snowflake にデータを送信します。

  • サーバー処理:Snowflakeサービスがデータを処理します。これには次が含まれます。

    • データのバッファリング。

    • データの解析と検証。

    • データをテーブルにコミットします。

  • エラーの検出: エラーはサーバー側の処理ステージのいずれかで発生する可能性があります。

  • エラーの記録: Snowflakeは、最後に発生したエラーについて、以下の情報を含む詳細な情報を記録します。

    • エラーを含む最後の行セットのオフセット・トークン範囲の上限。これは、データストリーム内の最新のエラーのおおよその位置を識別するのに役立ちます。

    • エラーメッセージです。

    • タイムスタンプ。

  • エラー報告:

    • 拡張チャンネル・ステータス・エンドポイントは、記録されたエラー情報へのアクセスを提供します。

    • クライアントはこのエンドポイントをクエリして、最後に発生したエラーの詳細を取得することができます。

    • SNOWPIPE_STREAMING_CHANNEL_HISTORY ビュー はエラーとそのオフセットの履歴を提供します。

  • クライアントのアクション: クライアントアプリケーションは、エラー情報を使用して以下のアクションを実行します。

    • エラーの原因を識別します。

    • 次のアクションのような適切なエラー処理ロジックを実装します。

      • 失敗した演算子を再試行します。

      • エラーのログ。

      • 管理者への警告。

      • 誤ったデータをデッドレターキューに移動。

      • チャンネルを再開します。

クライアント側のエラー処理と必要なアクション

Snowpipe Streaming SDK は、一時エラーに対する内部の再試行ロジックを実装することで、エラー処理を簡素化しています。ただし、致命的なチャネルエラーや持続的な認証の問題については、手動でのアクションが必要です。

SDK の一時エラーに対する再試行ロジック

以下の HTTP ステータスコードは通常、仮のまたは一時的なサービスの問題を示すものであるため、SDK はこれらについて、チャネルのアンフラッシュデータをサーバーに送信するリクエストを自動的に再試行します。

  • 5XX(サーバーエラー)

  • 429(リクエストが多すぎる)

  • 408(リクエストタイムアウト)

手動での再開が必要なチャネルエラー

Snowpipe Streaming SDK は自動的にチャネルを再開しません。チャネルが有効でない状態になった場合、取り込みを続行するために、お客様が明示的にチャネルを閉じ、再度開く必要があります。

チャネルステータス応答のchannel_status_codeが SUCCESS 以外の場合、チャネルは無効とみなされ、クライアントのアクションが必要となります。

次の表は、致命的なチャネルの状態を示し、チャネルを再開する必要がある、永続的なエラーコードを示しています。

エラーコード

コンテキスト

必要なクライアントのアクション

ERR_PIPE_DOES_NOT_EXIST_OR_NOT_AUTHORIZED

ターゲットパイプが見つからないか、アクセスできません。

パイプの問題を修正します。チャネルを再開します。

ERR_TABLE_DOES_NOT_EXIST_NOT_AUTHORIZED

ターゲットテーブルが見つからないか、アクセスできません。

テーブルの問題を修正します。チャネルを再開します。

ERR_CHANNEL_HAS_INVALID_ROW_SEQUENCER

行のシーケンス状態が有効ではありません。

チャネルを再開します。

ERR_CHANNEL_HAS_INVALID_CLIENT_SEQUENCER

チャネルのシーケンス状態が有効ではありません。

チャネルを再開します。

ERR_CHANNEL_MUST_BE_REOPENED

チャネルが使用不可能であることを示す一般的なエラー。

チャネルを再開します。

ERR_CHANNEL_MUST_BE_REOPENED_DUE_TO_ROW_SEQ_GAP

行のシーケンスのずれが検出されました。

チャネルを再開します。

設定の修正が必要な認証エラー

取り込みを試みた結果として HTTP 認証エラーが発生した場合、お客様が根本的な権限または認証情報の問題を修正する必要があります。新しいチャネルでもすぐに同じ問題が発生するので、このようなエラーの場合はチャネルを再開しないでください。

  • 401(未承認)

  • 403(禁止)

このようなエラーの場合、取り込みを再開する前に、取り込みを停止して、クライアントアプリケーションのセキュリティ設定(たとえば、パイプの権限、ユーザーロール、認証情報など)を修正する必要があります。認証の問題を修正した後、クライアントを再開して取り込みを続けることができます。