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 | ✔ | ✔ | ✔ | ✔ | ✔ | 
| 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ウェアハウスで使用されるコンピューティングリソースに応じて請求されます。 
推奨ロードファイルサイズ¶
Snowpipeで最も効率的で費用対効果の高いロードエクスペリエンスを得るには、 ファイルサイズのベストプラクティス のファイルサイズに関する推奨事項に従い、1分ごとにファイルをステージングすることをお勧めします。通常、このアプローチは、コスト(つまり、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に必要なデータベースオブジェクトへのアクセスを表示、許可、または取り消すことができます。