はじめに
本記事は、
「Snowflakeでデータパイプラインを構築する方法(Snowpipe・Stream・Task)」
で紹介したExternal Stageについて、より詳しく解説する記事です。
データパイプラインの記事はこちらです。
データパイプラインでは、External StageはS3上のファイルをSnowflakeから参照するために利用していました。
本記事では、
- External Stageとは何か
- Storage Integrationとの違い
- Snowpipeとの関係
について、図解を交えながら解説します。
この記事はこんな方におすすめ
- Snowflakeを学び始めた方
- S3とSnowflakeを連携したい方
- Snowpipeの仕組みを理解したい方
- External Stageの役割が分からない方
- データパイプラインの全体像を理解したい方
External Stageとは?
External Stageとは、
Amazon S3などの外部ストレージに保存されているファイルをSnowflakeから参照するための設定です。
言い換えると、
SnowflakeからS3を見るための窓口
になります。
External Stage自体にデータが保存されるわけではありません。
イメージ
Snowflake
│
▼
External Stage
│
▼
Amazon S3
External Stageを経由することで、
SnowflakeはS3上のCSVやJSONなどのファイルを読み込めるようになります。
なぜExternal Stageが必要なの?
例えば、
S3にCSVファイルをアップロードしただけでは、
Snowflakeはそのファイルを読むことができません。
そこで、
External Stageに
- バケット名
- フォルダ
- Storage Integration
- ファイル形式
などを設定することで、
Snowflakeは
「この場所のCSVを読めばいい」
と判断できます。
External Stageには何を設定する?
一般的には次のような情報を設定します。
| 設定項目 | 内容 |
|---|---|
| S3のURL | 対象バケット |
| Storage Integration | S3への認証 |
| File Format | CSV・JSONなど |
| 対象フォルダ | 必要に応じて指定 |
Storage Integrationとの違い
初心者が最も混同しやすいポイントです。
| Storage Integration | External Stage |
|---|---|
| 認証を担当 | S3上の場所を指定 |
| IAMロールを利用 | ファイルを参照する設定 |
| 一度作れば使い回せる | 用途ごとに作成可能 |
イメージすると、
という役割になります。
データパイプラインではどこで使われる?
External Stageは、
Snowpipeが読み込むファイルを指定します。
Snowpipeは、
External Stageを参照して
S3上のファイルをロードします。
SQLで作成してみる
External Stageは
SQLで作成します。
CREATE STAGE sample_stage
URL='s3://sample-bucket/'
STORAGE_INTEGRATION=my_storage_integration
FILE_FORMAT=(TYPE=CSV);
それぞれの意味は次のとおりです。
| 設定 | 説明 |
|---|---|
| URL | S3バケット |
| STORAGE_INTEGRATION | 認証情報 |
| FILE_FORMAT | CSV形式 |
External Stageを確認する
作成したStageは
SHOW STAGES;
で確認できます。
また、
LIST @sample_stage;
を実行すると、
S3上に存在するファイル一覧を表示できます。
例えば、
customer.csv
sales.csv
order.csv
のように表示されます。
Snowpipeとの関係
Snowpipeは、
External Stageを利用して
S3上のファイルを読み込みます。
Amazon S3
│
▼
External Stage
│
▼
Snowpipe
│
▼
COPY INTO
│
▼
テーブル
つまり、
External Stageが無ければ、
Snowpipeはどのファイルを読み込めばよいか分かりません。
よくある質問
Q. External Stageにデータは保存されますか?
いいえ。
External StageはS3を参照する設定です。
データ自体はS3に保存されています。
Q. Internal Stageとの違いは?
| External Stage | Internal Stage |
|---|---|
| S3など外部ストレージ | Snowflake内部 |
| 外部ファイルを利用 | Snowflakeへ直接アップロード |
Q. External Stageだけでデータはロードされますか?
いいえ。
External Stageは参照設定です。
データをロードするには
- COPY INTO
- Snowpipe
などを利用します。
まとめ
External Stageは、
SnowflakeがS3上のファイルを参照するための設定です。
Storage Integrationが認証を担当し、
External Stageがファイルの場所を指定することで、
SnowpipeやCOPY INTOからデータを読み込めるようになります。
ポイントのおさらい
- External StageはS3への窓口
- データは保存しない
- Storage Integrationと組み合わせて利用する
- SnowpipeやCOPY INTOから利用される
- S3上のファイルを読み込むために必要
External Stageの役割を理解すると、Snowflakeのデータパイプライン全体の仕組みがより理解しやすくなります。
参考
-
Snowflake公式ドキュメント(External Stages)
https://docs.snowflake.com/en/user-guide/data-load-s3-create-stage -
Snowflake公式ドキュメント(CREATE STAGE)
https://docs.snowflake.com/en/sql-reference/sql/create-stage


