はじめに:ファイルが届いたら勝手に取り込んでくれたら…
「毎日決まった時間にCSVが届くから、その都度
COPY INTOを叩くのはちょっと面倒…」そんな経験はありませんか?
Snowflake COPY INTOでファイルからテーブルへデータ投入する方法で紹介したCOPY INTOは強力ですが、人が手動で実行するか、スケジュールを組む必要があります。
そこで登場するのが
Snowpipe(スノーパイプ) です。クラウドストレージ(Amazon S3 / Azure Blob / Google Cloud Storage)にファイルが置かれた瞬間を検知して、ほぼ自動でテーブルに取り込んでくれる、とっても便利な機能なんです。今回はそのしくみと使い方をやさしく解説していきます!
Snowpipeってなに?
Snowpipeは、Snowflakeが提供する
継続的データロードサービス です。「パイプ(管)」という名前のとおり、ステージ(ファイル置き場)からテーブルへデータを流し込むパイプラインを作っておくイメージ。新しいファイルが届くたびに、その中身を自動的にテーブルへ投入してくれます。
ステージという仕組みがピンとこない方は、先に
Snowflakeステージとは?内部・外部ステージをやさしく解説を読んでおくとスムーズです。
COPY INTOとの違い
- COPY INTO(バルクロード):大きなファイルをまとめて一気にロード。手動またはタスク起動。仮想ウェアハウスを使う。
- Snowpipe(継続ロード):小さなファイルがポツポツ届くシーンに最適。サーバーレスで動き、ウェアハウスを起動しなくてOK。料金は処理量ベース。
データロードの全体像をおさらいしたい方は
Snowflakeデータロードの全体像もチェックしてみてくださいね。
Snowpipeの基本的な作り方
Snowpipeを使うには、まず
PIPE(パイプ) というオブジェクトを作成します。PIPEの中身は実はシンプルで、
COPY INTO 文をそのまま定義するイメージです。
1. ステージとテーブルを準備
-- 取り込み先テーブル
CREATE OR REPLACE TABLE sales_raw (
order_id NUMBER,
amount NUMBER,
created_at TIMESTAMP
);
-- 外部ステージ(S3を例に)
CREATE OR REPLACE STAGE my_s3_stage
URL = 's3://my-bucket/sales/'
STORAGE_INTEGRATION = my_s3_int
FILE_FORMAT = (TYPE = CSV SKIP_HEADER = 1);
2. PIPEを作成(AUTO_INGEST = TRUE がポイント)
CREATE OR REPLACE PIPE sales_pipe
AUTO_INGEST = TRUE
AS
COPY INTO sales_raw
FROM @my_s3_stage
FILE_FORMAT = (TYPE = CSV SKIP_HEADER = 1);
AUTO_INGEST = TRUE にすると、クラウドストレージ側のイベント通知(S3ならSQS)を受けて自動取り込みが走ります。
3. 通知チャネルを確認してストレージ側に設定
SHOW PIPES LIKE 'sales_pipe';
-- notification_channel 列に出てくるARNを、S3バケットのイベント通知に登録
運用時のチェックポイント
- 取り込み状況の確認:
SELECT SYSTEM$PIPE_STATUS('sales_pipe'); で稼働状態を確認できます。
- 履歴を見る:
COPY_HISTORY ビューで、いつ何ファイルが入ったか追跡できます。
- レイテンシ:Snowpipeはニアリアルタイム(数十秒〜1分程度)。秒単位の即時性が必要ならSnowpipe Streamingを検討します。
- 料金:ファイル数とデータ量に応じた従量課金。小さすぎるファイル(数KB)を大量に流すとオーバーヘッドで割高になるので、数MB〜100MB程度にまとめるのがおすすめ。
よくあるユースケース
例えば、IoTセンサーが1分ごとに出力するログ、Webアプリのアクセスログ、各支店から夜間に送られてくる売上CSVなど、
「断続的に小さなファイルが届き続ける」シーンにSnowpipeはぴったりです。届いたデータをすぐ分析ダッシュボードに反映できるので、ビジネスの意思決定スピードがぐっと上がります。
まとめ
Snowpipeは「ファイルが置かれたら自動でテーブルに入れてくれる」継続ロードのしくみ。
AUTO_INGEST = TRUE でPIPEを作り、ストレージ側のイベント通知と連携するだけで、ニアリアルタイムなデータパイプラインが完成します。手動COPY INTOからの卒業として、ぜひ試してみてくださいね!
参考リンク
関連記事