はじめに:データを「いったん置く場所」が必要な理由
Snowflakeにデータを取り込むとき、いきなりテーブルに流し込めるわけではありません。CSVやJSONなどのファイルを
一度どこかに置いて、そこからテーブルにロードするという流れになります。この「いったん置く場所」が
ステージ (Stage) です。
引っ越しに例えると、引越し先の部屋(テーブル)にダンボール(ファイル)を運び込む前に、いったん玄関先や荷捌き場に荷物を置きますよね。ステージはまさにその
荷捌き場のような存在です。この記事では、Snowflakeの内部ステージと外部ステージの違い、作り方、使い方を初心者向けにやさしく解説します。
ステージの2つの種類
Snowflakeのステージは、大きく分けて
内部ステージと
外部ステージの2種類があります。
内部ステージ (Internal Stage)
Snowflakeが管理するクラウドストレージにファイルを置く方式です。ユーザーは保存場所を意識せずに使えます。さらに3つのタイプに分かれます。
- ユーザーステージ: 各ユーザー専用 (
@~ で参照)。個人用の作業領域。
- テーブルステージ: 各テーブルに紐づく (
@%テーブル名 で参照)。1テーブルに対するロードに便利。
- 名前付きステージ: 自分で名前を付けて作るステージ (
@ステージ名)。複数テーブルや複数人で共有可能で、最も柔軟。
外部ステージ (External Stage)
Amazon S3、Google Cloud Storage、Azure Blob Storageなど、
外部のクラウドストレージを指す参照を作る方式です。データの実体はSnowflakeの外にあり、Snowflakeはその場所への「ショートカット」を持つイメージです。すでに自社でS3にデータを蓄積している場合、外部ステージを使うとそのまま取り込めます。
実際にステージを使ってみよう
名前付き内部ステージを作成する
-- 名前付き内部ステージを作成
CREATE STAGE my_internal_stage
FILE_FORMAT = (TYPE = 'CSV' FIELD_OPTIONALLY_ENCLOSED_BY = '"');
ローカルファイルを内部ステージにアップロード (PUT)
SnowSQLなどのCLIから
PUTコマンドでファイルを送ります。
SnowsightのWeb UIだけでは
PUTは使えないので、
SnowSQLのインストールと基本的な使い方も合わせて確認しておくと安心です。
PUT file:///Users/me/data/sales.csv @my_internal_stage;
LIST @my_internal_stage;
外部ステージを作成する
-- S3を参照する外部ステージ
CREATE STAGE my_external_stage
URL = 's3://my-bucket/sales/'
STORAGE_INTEGRATION = my_s3_integration
FILE_FORMAT = (TYPE = 'CSV');
ステージからテーブルへロード (COPY INTO)
COPY INTO sales
FROM @my_internal_stage/sales.csv
ON_ERROR = 'CONTINUE';
よくあるユースケースと注意点
- 小規模な手動ロード: ユーザーステージやテーブルステージが手軽。
- 定期的なバルクロード: 名前付きステージ +
COPY INTO で運用する。
- 既存のS3データを活用: 外部ステージで参照すれば二重コピー不要。
- Snowpipeとの組み合わせ: 外部ステージにファイルが届くと自動でロードする使い方が定番です。詳しくはSnowflakeデータロードの全体像を参照してください。
- 注意: 内部ステージのファイルもストレージ料金がかかります。ロード後は
REMOVEで削除するのがおすすめです。
まとめ
ステージは、ファイルとテーブルをつなぐ
データロードの中継場所です。Snowflake内部に置く「内部ステージ」と、S3などを参照する「外部ステージ」の2種類があり、用途に応じて使い分けます。
PUTでアップロード、
COPY INTOでロード、という流れを覚えておけば、Snowflakeのデータ取り込みの基本はバッチリです。
参考リンク
関連記事