この記事は SnowPro Core認定試験(COF-C02) の合格体験記事です。
現在SnowPro Coreは(COF-C03)に移行中です。
はじめに
先日、SnowPro Core試験に2回目の挑戦で合格しました。
1回目の受験では残念ながら不合格だったのですが、結果を振り返る中で、自分の理解が曖昧だった部分や試験で問われるポイントが見えてきました。その後、重要だと感じたテーマを中心に再度学習し、3週間後に無事に合格することができました。
本記事では、その中でも特に重要だと感じたポイントをテーマごとに整理して紹介していきます。
今回は Stage(ステージ) についてです。
ステージとは
ステージ(Stage)とは、Snowflakeがデータをロードまたはアンロードする際に使用する 一時的なファイルの保管場所 です。
また、Snowflakeでは、ローカルPCやS3のファイルを直接テーブルにINSERTすることはできません。必ず一度「ステージ」と呼ばれる場所にファイルを置いてから、COPY INTOコマンドでテーブルへ取り込む、という2段階のフローを取ります。
データのフローはシンプルにすると下図になります。
【ロード(データ取り込み)】
ローカルファイル → PUT → ステージ → COPY INTO → テーブル
【アンロード(データ取り出し)】
テーブル → COPY INTO → ステージ → GET → ローカルファイル
ステージは「データの中継地点」と理解しておくとイメージしやすいです。
ステージを利用することで、データのロード・アンロード処理を効率的かつ安全に実行できます。例えば、ロード前にファイルの内容を確認したり、複数ファイルをまとめて管理したりすることが可能です。また、エラー発生時の切り分けや再実行もしやすくなるため、大量データを扱う環境では特に重要な役割を担っています。
そのため、Snowflakeではファイルを直接テーブルに読み込むのではなく、まずステージを経由してデータを取り込む仕組みが採用されています。
覚えておくべきポイント
① ステージの種類
Snowflakeのステージは大きく 内部ステージ と 外部ステージ に分かれます。
内部ステージ(Internal Stage)
Snowflake自身のストレージにファイルを保存します。
| 種類 | 参照方法 | 特徴 |
|---|---|---|
| ユーザーステージ | @~ |
各ユーザーに自動作成。他ユーザーと共有不可。削除不可 |
| テーブルステージ | @%テーブル名 |
各テーブルに自動作成。そのテーブル専用。削除不可 |
| 名前付きステージ | @ステージ名 |
手動で作成。複数ユーザー・テーブルで共有可能 |
外部ステージ(External Stage)
Amazon S3・Google Cloud Storage・Microsoft Azureなど、外部のクラウドストレージを参照するステージです。
ファイルをSnowflake内に保存するのではなく、外部ストレージ上のデータをそのまま利用できる点が特徴です。
-- 外部ステージの作成例(S3)
CREATE STAGE my_external_stage
URL = 's3://my-bucket/data/'
CREDENTIALS = (AWS_KEY_ID = '...' AWS_SECRET_KEY = '...');
② ロード・アンロードのコマンド
Snowflakeでは、ローカル・ステージ・テーブル間のファイル移動を専用のコマンドで行います。ロード(取り込み)とアンロード(取り出し)でそれぞれ使うコマンドが分かれているので、方向ごとに整理して覚えておくと混乱しません。
| コマンド | 方向 | 使用できる場所 |
|---|---|---|
| PUT | ローカル → ステージ | SnowSQL / ドライバーのみ |
| GET | ステージ → ローカル | SnowSQL / ドライバーのみ |
COPY INTO <table> |
ステージ → テーブル | すべての環境 |
COPY INTO <location> |
テーブル → ステージ | すべての環境 |
| LIST @ステージ名 | ステージ内のファイル一覧表示 | すべての環境 |
| REMOVE @ステージ名 | ステージ内のファイル削除 | すべての環境 |
-- ステージのファイル一覧確認
LIST @my_stage;
-- ステージへのファイルアップロード(SnowSQLで実行)
PUT file:///local/path/data.csv @my_stage;
-- ステージからテーブルへロード
COPY INTO my_table
FROM @my_stage
FILE_FORMAT = (TYPE = CSV FIELD_OPTIONALLY_ENCLOSED_BY = '"');
-- テーブルからステージへアンロード(パーティション付き)
COPY INTO @my_stage/sales/
FROM sales
PARTITION BY (TO_DATE(sale_date))
FILE_FORMAT = (TYPE = CSV);
-- ステージからローカルへダウンロード(SnowSQLで実行)
GET @my_stage/output/ file:///local/path/output/;
③ディレクトリテーブル(Directory Table)
ディレクトリテーブルとは、ステージ上に暗黙的に作成されるオブジェクト で、ステージ内のファイルのメタデータをSQLでクエリできる仕組みです。
「ファイルの実データではなく、ファイルのメタデータを管理する仕組み」という点を理解して覚えました。
④ ファイルURLの種類
ステージ上のファイルへアクセスする方法として、Snowflakeには3種類のURLが存在します。「それぞれのURLがどのような用途で利用されるのか」を理解しておくことが重要です。
| URL種別 | 特徴 | 権限 |
|---|---|---|
| Pre-Signed URL | 指定した有効期間内のみ有効な一時URL | ステージ権限不要。期限切れ後は無効 |
| Scoped URL | クエリ結果のコンテキストにスコープされたURL | ステージ権限不要。アクセストークン不要 |
| File URL | ファイルへの永続的なパス形式のURL | 別途認証が必要 |
⑤ Snowpipeとステージの関係
Snowpipeはステージにアップロードされたファイルをリアルタイムで自動的にテーブルへロードするサービスです。
通常のCOPY INTOでは手動またはスケジュール実行が必要ですが、Snowpipeを利用することでファイルの到着をトリガーに自動でロード処理を実行できます。
ファイル → ステージ → Snowpipe(自動検知)→ テーブル
- Snowpipeは Snowflakeが管理するコンピューティング を使用(仮想ウェアハウス不要)
- ステージに追加された新規ファイルを継続的に取り込める
-
SYSTEM$PIPE_STATUS()でパイプの稼働状況確認・トラブルシュートができる
最後に
StageはSnowflakeにおけるデータロードの基盤となる機能であり、SnowPro Core試験でも重要なポイントの一つです。
私自身、最初はステージの種類や用途の違いを個別に覚えようとして混乱していましたが、まずは「どこからどこへデータが流れるのか」という概念やデータフローを理解することで、全体像を掴みやすくなりました。その結果、各ステージの特徴や関連コマンドなどの派生知識も整理しながら覚えられるようになりました。
試験勉強では細かい仕様やコマンドに目が行きがちですが、まずは全体の流れを理解することをおすすめします。
なお、本記事は私が試験対策の中で特に重要だと感じたポイントをまとめたものであり、SnowPro Coreの出題範囲を網羅しているわけではありません。実際の受験にあたっては、公式ドキュメントや公式学習コンテンツもあわせて確認しながら学習を進めることをおすすめします。
この記事がこれからSnowPro Coreを受験される方の参考になれば幸いです。試験勉強、頑張ってください!
参考リンク