Snowpipeの紹介

Snowpipeを使用すると、ファイルがステージで利用可能になり次第、ファイルからデータをロードできます。つまり、スケジュールで COPY ステートメントを手動で実行してより大きなバッチをロードするのではなく、マイクロバッチのファイルからデータをロードして数分以内にユーザーが利用できるようにします。

このトピックの内容:

Snowpipeの仕組み

Snowpipeは、ファイルがステージで利用可能になり次第、ファイルからデータをロードします。データは、参照パイプで定義されている COPY ステートメントに従ってロードされます。

パイプは、Snowpipeで使用される COPY ステートメントを含む、名前付きのファーストクラスSnowflakeオブジェクトです。COPY ステートメントは、データファイル(つまり、ステージ)とターゲットテーブルのソースの場所を識別します。JSON やAvroなどの半構造化データ型を含む、すべてのデータ型がサポートされています。

ステージングされたファイルを検出するためのさまざまなメカニズムが利用可能です。

クラウドメッセージングを使用したSnowpipeの自動化

自動データロードは、クラウドストレージのイベント通知を活用して、ロードする新しいデータファイルの到着をSnowpipeに通知します。Snowpipeは、指定されたパイプオブジェクトで定義されたパラメーターに基づいて、サーバーレスで継続的にターゲットテーブルにロードされるファイルをキューにコピーします。

Snowflakeは現在、次のストレージアカウントタイプをサポートしています。

  • Amazon Web Services(AWS)

    • Amazon S3

  • Microsoft Azure

    • BLOBストレージ

    • Data Lake Storage Gen2 --- プレビュー 機能としてサポートされています。

    • 汎用v2

詳細については、 クラウドメッセージングを使用した連続データロードの自動化 をご参照ください。

Snowpipe REST エンドポイントの呼び出し

クライアントアプリケーションは、パイプオブジェクトの名前とデータファイル名のリストを使用して、パブリック REST エンドポイントを呼び出します。リストに一致する新しいデータファイルが、パイプオブジェクトで参照されたステージで検出された場合、それらはロードのためにキューに入れられます。Snowflakeが提供するコンピューティングリソースは、パイプで定義されたパラメーターに基づいて、キューからSnowflakeテーブルにデータをロードします。

  • Amazon Web Services(AWS)

    • Amazon S3

  • Google Cloud Platform

    • Cloud Storage

  • Microsoft Azure

    • BLOBストレージ

    • Data Lake Storage Gen2 --- プレビュー 機能としてサポートされています。

    • 汎用v2

詳細については、 Snowpipe REST エンドポイントの呼び出しによるデータのロード をご参照ください。

Snowpipeと一括データロードとの相違点

このセクションは、Snowpipeと、COPY コマンドを使用した一括データロードワークフローとの主な違いを簡単に説明しています。Snowpipeのドキュメント全体に追加の詳細が記載されています。

認証

一括データロード

ユーザーセッションを認証および開始するためにクライアントがサポートするセキュリティオプションに依存します。

Snowpipe

REST エンドポイントを呼び出すとき: キーペアの認証と JSON Webトークン(JWT)が必要です。JWTs では、RSA 暗号化を使用した公開/秘密キーペアを使用して署名されます。

ロード履歴

一括データロード

ターゲットテーブルのメタデータに64日間保存されます。COPY ステートメントの完了時にステートメントの出力として利用可能です。

Snowpipe

パイプのメタデータに14日間保存されます。Snowflakeから REST エンドポイント、SQL テーブル関数、または ACCOUNT_USAGE ビュー経由でリクエストする必要があります。

重要

ファイルの再ロード(およびデータの重複)を回避するには、一括データロードまたはSnowpipeの いずれか を使用して特定のファイルセットからデータをロードすることをお勧めします。

トランザクション

一括データロード

ロードは常に単一のトランザクションで実行されます。データは、ユーザーが手動で送信した他の SQL ステートメントと共にテーブルに挿入されます。

Snowpipe

ロードは、各データファイルの行の数とサイズに基づいて、単一のトランザクションまたは複数のトランザクションに結合または分割されます。部分的にロードされたファイルの行(ON_ERROR コピーオプション設定に基づく)も、1つ以上のトランザクションに結合または分割できます。

コンピューティングリソース

一括データロード

COPY ステートメントを実行するには、ユーザー指定のウェアハウスが必要です。

Snowpipe

Snowflakeが提供するコンピューティングリソースを使用します。

コスト

一括データロード

各仮想ウェアハウスがアクティブである時間に対して請求されます。

Snowpipe

ファイルのロード中にSnowpipeウェアハウスで使用されるコンピューティングリソースに応じて請求されます。

データファイルのロード順

Snowflakeは、パイプオブジェクトごとに、ロードを待機するデータファイルをシーケンス処理するための単一のキューを確立します。ステージで新しいデータファイルが検出されると、Snowpipeはそれらをキューに追加します。ただし、複数のプロセスがキューからファイルをプルします。そのため、Snowpipeは一般に古いファイルを最初にロードしますが、ファイルがステージングされた順序でロードされるという保証はありません。

データ複製

Snowpipeは、各 パイプオブジェクト に関連付けられたファイルロードメタデータを使用して、テーブル内の同じファイル(およびデータの複製)の再ロードを防ぎます。このメタデータは、ロードされた各ファイルのパス(プレフィックス)と名前を保存し、後で変更された(つまり、異なるeTagを持つ)場合でも、同じ名前のファイルをロードしないようにします。

Snowpipe Latencyの推定

Snowpipeの負荷を区別できる要因の数を考えると、Snowflakeがレイテンシを推定することは非常に困難です。ファイル形式とサイズ、および COPY ステートメントの複雑さ(変換に使用される SELECT ステートメントを含む)はすべて、Snowpipeのロードに必要な時間に影響を与えます。

典型的な負荷のセットを実行して、平均レイテンシを推定してみることをお勧めします。

Snowpipe DDL

パイプの作成と管理をサポートするために、Snowflakeは次の一連の特別な DDL コマンドを提供します。

さらに、プロバイダーは、次の標準アクセス制御 DDLを使用して、Snowpipeに必要なデータベースオブジェクトへのアクセスを表示、許可、または取り消すことができます。