はじめに
本記事は、
「Snowflakeでデータパイプラインを構築する方法(Snowpipe・Stream・Task)」
で紹介したSnowpipeについて、より詳しく解説する記事です。
データパイプラインの記事はこちらです。
データパイプラインでは、SnowpipeはS3へ配置されたファイルを自動でSnowflakeへロードするために利用していました。
本記事では、
- Snowpipeとは何か
- S3イベント通知との関係
- COPY INTOとの違い
- Snowpipeが動く仕組み
について、図解を交えながら解説します。
この記事はこんな方におすすめ
- Snowflakeを学び始めた方
- Snowpipeの役割を理解したい方
- S3から自動でデータを取り込みたい方
- S3イベント通知との関係を知りたい方
- COPY INTOとの違いを知りたい方
- データパイプラインの全体像を理解したい方
Snowpipeとは?
Snowpipeとは、
Amazon S3などの外部ストレージへファイルが配置されたことをきっかけに、自動でテーブルへロードする機能です。
簡単に言うと、
ファイルを自動で取り込んでくれる仕組み
になります。
ただし、Snowpipe自身がS3を常に監視しているわけではありません。
S3イベント通知と連携することで、自動ロードを実現しています。
イメージ
CSVをS3へ配置すると、S3イベント通知によってSnowpipeが起動し、自動でロードが開始されます。
S3イベント通知とは?
S3イベント通知とは、
S3で発生したイベント(ファイルのアップロードなど)を他のサービスへ通知する機能です。
SnowpipeのAuto-ingestでは、この仕組みを利用して
「新しいファイルが配置された」
ことを検知しています。
つまり、
CSV配置
│
▼
S3イベント通知
│
▼
Snowpipe起動
という流れになります。
※AWS環境では、S3イベント通知からAmazon SNSやAmazon EventBridgeなどを経由してSnowpipeへ通知される構成が一般的です。
なぜSnowpipeが必要なの?
Snowpipeを利用しない場合は、
毎回SQLを実行する必要があります。
例えば、
COPY INTO sample_table
FROM @sample_stage;
を毎回実行しなければなりません。
つまり、
CSV配置
↓
人がCOPY INTOを実行
↓
テーブルへロード
という流れになります。
ファイルが頻繁に配置される環境では、
手動実行では運用が大変になります。
Snowpipeを利用すると?
Snowpipeを利用すると、
CSVを配置するだけで、
自動的にロードされます。
CSV配置
↓
S3イベント通知
↓
Snowpipe起動
↓
自動ロード
↓
テーブル更新
SQLを毎回実行する必要がありません。
Snowpipeはどのように動く?
Snowpipeは、
External Stageを利用してS3上のファイルを読み込みます。
また、ファイルの配置はS3イベント通知によって検知します。
つまり、
- External Stage:どこにファイルがあるかを教える
- S3イベント通知:ファイルが配置されたことを知らせる
- Snowpipe:実際にデータをロードする
という役割分担になっています。
データパイプラインではどこで使われる?
Snowpipeは、
データパイプラインの中で
S3からステージングテーブルへデータをロードする役割です。
業務では、
一度ステージングテーブルへロードしてから、
データ加工や重複チェックを行う構成がよく利用されます。
COPY INTOとの違い
初心者がよく疑問に思うポイントです。
| COPY INTO | Snowpipe |
|---|---|
| 手動実行 | 自動実行 |
| バッチ向け | リアルタイム向け |
| SQL実行が必要 | S3イベント通知で自動起動 |
| 好きなタイミングでロード | ファイル配置時にロード |
学習用途ではCOPY INTOを利用することも多いですが、
本番環境ではSnowpipeが利用されるケースが多くあります。
Snowpipeを利用するメリット
自動でロードできる
ファイルを配置するだけでロードされます。
リアルタイム連携ができる
S3イベント通知を利用することで、
ファイル配置後すぐにロードが開始されます。
運用負荷が下がる
手動でSQLを実行する必要がありません。
定期バッチを作る必要もありません。
データパイプラインとの相性が良い
Snowpipeは
- Stream
- Task
と組み合わせることで、
リアルタイムデータパイプラインを構築できます。
Snowpipeを作成してみる
Snowpipeは
CREATE PIPE
で作成します。
CREATE PIPE sample_pipe
AS
COPY INTO sample_table
FROM @sample_stage;
このSQLでは、
sample_stageに配置されたファイルを
sample_tableへロードします。
※Auto-ingestを利用する場合は、この設定に加えてAWS側でS3イベント通知の設定も必要です。
よくある質問
Q. SnowpipeだけでS3へアクセスできますか?
いいえ。
Snowpipeは
External Stageを利用して
S3上のファイルを読み込みます。
Q. Snowpipeはどうやってファイルの配置を知るのですか?
S3イベント通知によって
「新しいファイルが配置された」
ことを検知します。
その通知を受けて、
Snowpipeが自動でロードを開始します。
Q. Snowpipeはリアルタイムですか?
はい。
S3イベント通知を利用することで、
ファイル配置後すぐにロードできます。
Q. SnowpipeはCOPY INTOを使っていますか?
はい。
内部では、
COPY INTO相当の処理が実行されています。
そのため、
ロード先テーブルやファイル形式は
COPY INTOと同じように設定します。
まとめ
Snowpipeは、
S3へ配置されたファイルを自動でSnowflakeへロードする機能です。
External Stageで指定したファイルを読み込み、
S3イベント通知によって起動し、
内部ではCOPY INTO相当の処理を実行します。
ポイントのおさらい
- Snowpipeは自動ロード機能
- S3イベント通知でファイル配置を検知する
- External Stageを利用してファイルを読み込む
- 内部ではCOPY INTO相当の処理が動く
- StreamやTaskと組み合わせてリアルタイムデータパイプラインを構築できる
Snowpipeを理解すると、
Snowflakeのデータパイプライン全体の流れがより理解しやすくなります。
参考
-
Snowflake公式ドキュメント(Snowpipe)
https://docs.snowflake.com/en/user-guide/data-load-snowpipe -
Snowflake公式ドキュメント(CREATE PIPE)
https://docs.snowflake.com/en/sql-reference/sql/create-pipe -
AWS公式ドキュメント(Amazon S3 Event Notifications)
https://docs.aws.amazon.com/AmazonS3/latest/userguide/EventNotifications.html


