Snowpipe

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

このトピックの内容:

Snowpipeの仕組み

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

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

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

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

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

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

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

サポートされているクラウドストレージサービス

次のテーブルは、各 クラウドプラットフォーム でホストされているSnowflakeアカウントからの、自動SnowpipeとSnowpipe REST API の呼び出しのクラウドストレージサービスサポートを示しています。

Snowflakeアカウントホスト

Amazon S3

Google Cloud Storage

Microsoft Azure Blobストレージ

Microsoft Data Lake Storage Gen2

MicrosoftAzure汎用v2

Amazon Web Services

Google Cloud Platform

Microsoft Azure

詳細については、 クラウドメッセージングを使用した連続データロードの自動化 および Snowpipe REST エンドポイントのデータロードの概要 をご参照ください。

クラウドプロバイダーの政府リージョンでは、他の商用リージョンとの間でイベント通知を送受信することは許可されていないことに注意してください。詳細については、 AWSGovCloud (US) および Azure Government をご参照ください。

重要

Snowflakeは、Snowpipe用のクラウドイベントフィルタリングを有効にして、コスト、イベントノイズ、および遅延を削減するようにお勧めします。各クラウドプロバイダーのイベントフィルタリングの構成に関する詳細については、次のページをご参照ください。

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

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

認証

一括データロード:

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

Snowpipe:

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

ロード履歴

一括データロード:

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

Snowpipe:

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

重要

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

トランザクション

一括データロード:

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

Snowpipe:

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

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

一括データロード:

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

Snowpipe:

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

コスト

一括データロード:

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

Snowpipe:

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

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

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

データ複製

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

Snowpipe Latencyの推定

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

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

パイプセキュリティ

アクセス制御権限

パイプの作成

パイプを作成および管理するには、少なくとも次の権限を持つロールが必要です。

オブジェクト

権限

注意

データベース

USAGE

スキーマ

USAGE, CREATE PIPE

パイプ定義のステージ

USAGE

外部ステージのみ。

パイプ定義のステージ

READ

内部ステージのみ。

パイプ定義にあるテーブル

SELECT, INSERT

パイプの所有

パイプが作成された後、パイプの所有者(つまり、パイプに対する OWNERSHIP 権限を持つロール)には、次の権限が必要です。

オブジェクト

権限

注意

データベース

USAGE

スキーマ

USAGE

パイプ

OWNERSHIP

パイプ定義のステージ

USAGE

外部ステージのみ。

パイプ定義のステージ

READ

内部ステージのみ。

パイプ定義にあるテーブル

SELECT, INSERT

パイプの一時停止または再開

パイプの所有者に加えて、次の最小権限を持つロールが、パイプを一時停止または再開できます。

オブジェクト

権限

注意

データベース

USAGE

スキーマ

USAGE

パイプ

OPERATE

パイプ定義のステージ

USAGE

外部ステージのみ。

パイプ定義のステージ

READ

内部ステージのみ。

パイプ定義にあるテーブル

SELECT, INSERT

Snowpipe DDL

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

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