ハイパフォーマンスSnowpipeストリームにおけるエラー処理¶
このトピックでは、Snowpipe Streamingのハイパフォーマンス版で利用可能なエラー処理メカニズムについて概説します。この強化されたアプローチにより、詳細なエラー情報が提供され、エラー処理プロセス全体が改善されるため、より堅牢で有益な体験が得られます。
ハイパフォーマンスアーキテクチャーの主なエラー処理機能¶
強化されたチャンネル・ステータス・エンドポイント: このエディションでは、チャンネル・ステータス・エンドポイントを拡張し、より包括的なエラー情報を提供します。
きめ細かなエラー詳細: ハイパフォーマンスエディションでは、より詳細なエラー情報が提供され、エラー発生箇所の特定やインジェスト問題の根本原因の特定に役立ちます。
クライアントエクスペリエンスの向上: ハイパフォーマンスエディションは、クライアントのエラー処理を簡素化し、エラーの推論と回復の複雑さを軽減します。
The channel history view: SNOWPIPE_STREAMING_CHANNEL_HISTORY ビュー provides a historical record of channel activity to monitor and locate errors. This feature enables you to track error trends and proactively address potential issues.
チャンネルステータスのエンドポイント詳細¶
The high-performance architecture includes a channel status endpoint to provide more detailed, point-in-time information about a channel.
In addition to the channel status information for the classic architecture, which is statusCode, persistedOffsetToken, the high-performance architecture includes the following information:
channel_status_code: Represents the current operational status of the streaming channel. This code provides a high-level indication of the channel's health and ability to ingest data. For more information about the channel status codes, see クライアント側のエラー処理と必要なアクション.last_commited_offset_token:Snowflakeによってターゲットテーブルに正常にコミットされた最後の行セットのオフセットトークンを示します。これは、進捗状況を追跡し、確実にデータを配信するために非常に重要です。created_on_ms: The timestamp, in milliseconds, that indicates when the streaming channel was initially created within 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サービスがデータを処理します。これには次が含まれます。
データのバッファリング。
データの解析と検証。
データをテーブルにコミットします。
エラーの検出: エラーはサーバー側の処理ステージのいずれかで発生する可能性があります。
Error recording: Snowflake records detailed information about the last occurred error, including the following information:
エラーを含む最後の行セットのオフセット・トークン範囲の上限。これは、データストリーム内の最新のエラーのおおよその位置を識別するのに役立ちます。
エラーメッセージです。
タイムスタンプ。
エラー報告:
拡張チャンネル・ステータス・エンドポイントは、記録されたエラー情報へのアクセスを提供します。
クライアントはこのエンドポイントをクエリして、最後に発生したエラーの詳細を取得することができます。
SNOWPIPE_STREAMING_CHANNEL_HISTORY ビュー provides a historical record of errors and their offsets.
Client action: The client application uses the error information to perform the following actions:
エラーの原因を識別します。
Implement appropriate error handling logic, such as the following actions:
失敗した演算子を再試行します。
エラーのログ。
管理者への警告。
誤ったデータをデッドレターキューに移動。
チャンネルを再開します。
クライアント側のエラー処理と必要なアクション¶
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 |
行のシーケンス状態が有効ではありません。 |
Reopen channel. |
ERR_CHANNEL_HAS_INVALID_CLIENT_SEQUENCER |
チャネルのシーケンス状態が有効ではありません。 |
Reopen channel. |
ERR_CHANNEL_MUST_BE_REOPENED |
チャネルが使用不可能であることを示す一般的なエラー。 |
Reopen channel. |
ERR_CHANNEL_MUST_BE_REOPENED_DUE_TO_ROW_SEQ_GAP |
行のシーケンスのずれが検出されました。 |
Reopen channel. |