Snowpipeで自動取り込み!ファイルアップロードを検知する方法

Snowpipeで自動取り込み!ファイルアップロードを検知する方法 Snowflake

はじめに:ファイルが届いたら勝手に取り込んでくれたら…

「毎日決まった時間に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データロードの全体像もチェックしてみてくださいね。
Snowflake Snowpipeがステージからテーブルへ新着ファイルを継続的に取り込むデータパイプラインの構造を示す概念図

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バケットのイベント通知に登録
Snowflake SnowpipeのAUTO_INGEST有効化と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からの卒業として、ぜひ試してみてくださいね!

参考リンク

関連記事