本記事はBeeX Advent Calendar 2025の17日目の記事です。
はじめに
今回はSnowflakeのステージという機能について解説します。
なお、本記事内では機能の説明のみを対象としており、ステージの作成・設定を含む操作、データのロード・アンロードコマンドについては解説していませんのでご注意ください。
さくっと結論
- Snowflakeにおけるステージはテーブルに対してデータをロード/アンロードする際に利用できる一時的な置き場のようなもの。
- Snowflake内部に作成される内部ステージと、外部ストレージと繋ぐための外部ステージがある。
- 内部ステージはSnowflake内のストレージを利用する。
内部ステージには以下の種類がある。-
ユーザーステージ
デフォルトで割り当てられるステージ。ユーザー単位で割り当てられる。
自分以外のユーザーは確認・利用ができない。
-
テーブルステージ
テーブルと1対1で紐づくステージ。
紐づくテーブルにデータをロード/アンロードする際に使うステージ。
テーブルのOWNERSHIP権限を持つロールが割り当てられている場合は他ユーザーも確認・利用が可能。
-
名前付きステージ
テーブルにデータをロード/アンロードする際に使うステージ。
ロールに権限が付与されていれば誰でも確認・利用が可能。
-
ユーザーステージ
- 外部ステージはSnowflake以外のサービスのオブジェクトストレージと接続して直接データをロード/アンロードする際に使うステージ。
S3やGoogle Cloud Storageなどの対応するパブリッククラウドのオブジェクトストレージなどと接続することが可能。
もうちょっと詳細の説明
ユーザーステージについて
前述したとおり、ユーザー単位で利用できるステージです。
内部ステージの一種なので、Snowflakeのストレージ内に保存されます。

テーブルにデータをロードする場合、Snowflakeにファイルをアップロードしてロードする必要があります。
複数のテーブルなどにロードする場合などは便利です。
ただし、SnowsightというWebインターフェースではこちらのステージに対してファイルをアップロードすることはできません。
Snowflake CLI クライアント、SnowSQL クライアント、またはドライバー経由でPUTコマンドを使用してアップできます。
ユーザーステージは、ステージを作成する際にロード時のファイル形式を事前に設定しておくことができません。
(システム側で勝手に出来上がるため、ステージを作成するという概念がない)
ロードする際、ロード対象のファイルのフォーマットに合わせてFILE_FORMATを指定する必要があります。
別途FILE_FORMATオブジェクトを作成することは可能です。
テーブルステージについて
こちらはテーブル単位に存在するステージです。
テーブルに対するOWNERSHIP権限が必要になりますが、OWNERSHIP権限を持つロールが付与されていればユーザー間で共有ができます。

単一のテーブルに紐づくのでちゃんと権限管理がされていれば、アクセス制御などが可能になります。管理者向けの機能ですね。
また、こちらもユーザーステージと同様にステージ作成時にFILE_FORMATを設定することはできず、ロードする際に設定が必要になります。
(ユーザーステージ同様、システム側で勝手に出来上がるため、ステージを作成するという概念がない)
別途FILE_FORMATオブジェクトを作成することは可能です。
名前付きステージについて
こちらはテーブルステージとは違って、テーブルには紐づきません。
そのため、1つの名前付きステージから複数のテーブルに対してデータをロードすることができます。

複数のユーザーやテーブルが関係するデータロードを設計する場合は、こちらの名前付きステージが推奨されます。
こちらは他の内部ステージと違って、FILE_FORMATをステージ作成時に事前設定をすることができます。
外部ステージについて
外部ステージは、外部ストレージにあるオブジェクト(ファイル)を簡単にロードしたり、外部ストレージにアンロードできるパイプのようなものです。

外部ステージを利用しなくても外部ストレージのオブジェクトをロードしたりすることは可能なのですが、認証情報をロード/アンロードする度に入力する必要があります。
クエリ履歴などに毎回残ってしまうので、セキュリティ的にもあまりよくなさそうです。
こうした問題を解決できるのが外部ステージです。
事前に認証情報を設定して残りは@<ステージ名>を指定してCOPY INTOを実行できるようになります。
AWS×Snowflakeや、Google Cloud×Snowflake、Azure×Snowflakeのアーキテクチャを検討する場合には、基本的には必須かと思います。
おわりに
今回はSnowflakeのステージについて解説しました。
ステージは概念がわかりにくいので、このエントリを書く際にも理解しなおしが必要で地味に大変でした。
このエントリが、誰かの参考になれば幸いです。
今度は、ステージの作成と利用を検証してみたいと思います。
参考記事