はじめに
Snowflakeでは、データをリアルタイムに取り込む仕組みを比較的簡単に構築できます。
今回は、実際の業務でもよく採用される構成である
- AWS S3
- External Stage
- Snowpipe
- Stream
- Task
を組み合わせたデータパイプラインについて紹介します。
この記事では、それぞれの役割やデータの流れを初心者向けに解説します。
全体構成
今回紹介する構成は次のようになります。
この構成では、
S3にファイルを配置するだけで、本テーブルまで自動でデータが反映されます。
※実のところ、外部ステージだけではS3にアクセスすることができないです。
理由としては認証情報がないからになります。なのでStorage Integrationが必要
になるのですが、今回のデータパイプラインの処理ではなく認証の話になるので、
今回は省き別記事で記載したいと思います。
各サービスの役割
① Amazon S3
最初にCSVファイルを保存する場所です。
例えば、
customer.csv
をアップロードすると、
パイプラインの処理が開始されます。
② External Stage
External Stageは、
S3上のファイルをSnowflakeから参照するための設定
です。
イメージとしては
のような役割になります。
External Stage自体はデータを保存するものではありません。
③ Snowpipe
Snowpipeは、
S3へファイルが配置されたことを検知して自動でロードする機能
です。
通常のCOPY INTOとの違いは
| COPY INTO | Snowpipe |
|---|---|
| 手動実行 | 自動実行 |
| バッチ処理向け | リアルタイム向け |
Snowpipeが起動すると、
External Stageからデータを読み取り、
一時テーブルへロードします。
なぜ一時テーブルにロードするの?
いきなり本テーブルへロードしない理由はいくつかあります。
例えば、
- データの形式チェック
- 重複チェック
- データ加工
- 不正データの除外
などです。
そのため、
本番では
Snowpipe
│
▼
一時テーブル
という構成が非常によく利用されます。
④ Stream
Streamは
テーブルの変更差分だけを保持する機能
です。
例えば、一時テーブルに新しくA,B,Cが追加された場合、
上記図のようにA,B,Cだけが保持されます。
逆に
何も更新されていなければ、
Streamには何もありません。
つまり、
Taskは毎回テーブル全体を見る必要がありません。
⑤ Task
Taskは
SQLを定期実行するジョブ
です。
今回の構成では
Streamに更新がある
│
▼
MERGE実行
│
▼
本テーブル更新
という役割になります。
一般的には
MERGE INTO
を利用して
- INSERT
- UPDATE
をまとめて実施します。
この構成を採用するメリット
リアルタイム連携
S3へファイルを置くだけで自動反映できます。
差分更新
Streamのおかげで、
変更データだけ処理できます。
処理時間も短縮できます。
SQLだけで実装可能
TaskはSQLだけで作成できます。
ETLツールを利用しなくても、
データパイプラインを構築できます。
保守しやすい
役割が明確です。
- S3:ファイル保存
- Stage:ファイル参照
- Snowpipe:ロード
- Stream:変更検知
- Task:本テーブル更新
そのため、
障害調査もしやすくなります。
実際の業務でもよく利用される構成
この構成はSnowflakeの案件でも非常によく利用されています。
特に
- AWS S3
- Snowpipe
- Stream
- Task
の組み合わせは定番です。
データウェアハウスへリアルタイムにデータを取り込みたい場合には非常に相性が良い構成です。
まとめ
今回紹介したデータパイプラインは、
Snowflakeの代表的なリアルタイムデータ連携の構成です。
データの流れをもう一度まとめると、
Amazon S3
│
▼
External Stage
│
▼
Snowpipe
│
▼
一時テーブル
│
▼
Stream
│
▼
Task
│
▼
本テーブル
それぞれの役割を理解しておくことで、Snowflakeを利用したデータ基盤の全体像を把握しやすくなります。
今後Snowflakeを学習する方や、データパイプラインを構築する予定の方の参考になれば幸いです。


