Snowflake

Snowflakeステージ

2026-03-21
更新: 2026-03-27
NicheeLab編集部

ステージ(Stage)は、Snowflakeでデータのロード(取り込み)とアンロード(書き出し)を行う際のファイル中間置き場です。COPY INTO文によるバルクロード、Snowpipeによる自動取り込み、データエクスポートなど、ほぼすべてのファイル連携はステージを経由します。SnowPro Core試験ではData Loadingドメインの必須トピックです。

ステージの種類と比較

Snowflakeには4種類のステージがあり、用途・管理方法・セキュリティモデルが異なります。

ステージ種類参照構文作成方法GRANT制御主な用途
User Stage@~自動(ユーザーごと)不可個人作業・検証用の一時ファイル置き場
Table Stage@%table_name自動(テーブルごと)不可特定テーブル専用の一時ロード
Named Internal Stage@stage_nameCREATE STAGE可能チーム共有・権限管理が必要なロード/アンロード
External Stage@stage_nameCREATE STAGE可能S3 / Azure Blob / GCS上の既存データ連携

Internal Stage(Named)の作成と活用

Named Internal StageはSnowflake内部ストレージにファイルを格納するステージです。GRANTで権限制御が可能なため、チーム運用ではUser/Table Stageよりも推奨されます。

-- Named Internal Stageの作成
CREATE OR REPLACE STAGE hr_load_stage
  FILE_FORMAT = (TYPE = CSV SKIP_HEADER = 1 FIELD_OPTIONALLY_ENCLOSED_BY = '"')
  COMMENT = 'HR部門のCSVロード用ステージ';

-- ファイルアップロード(SnowSQL / PUT)
PUT file:///data/employees.csv @hr_load_stage AUTO_COMPRESS = TRUE;

-- ステージ上のファイル一覧を確認
LIST @hr_load_stage;

-- ロード実行
COPY INTO hr.employees
FROM @hr_load_stage
PATTERN = '.*employees.*\.csv\.gz'
ON_ERROR = 'CONTINUE';

External Stage + Storage Integration

External Stageは、S3・Azure Blob Storage・GCS上の外部ストレージを直接参照するステージです。データをSnowflake内部にコピーせずにロード元として利用できるため、既存データレイクとの連携に最適です。

Storage Integrationの設計

Storage IntegrationはSnowflakeとクラウドストレージ間のアクセスを、IAMロールベースの委任で安全に管理するオブジェクトです。長期鍵の埋め込みが不要になり、ACCOUNTADMIN権限で一元管理できます。

-- Storage Integrationの作成(ACCOUNTADMIN)
CREATE OR REPLACE STORAGE INTEGRATION s3_integration
  TYPE = EXTERNAL_STAGE
  STORAGE_PROVIDER = 'S3'
  STORAGE_AWS_ROLE_ARN = 'arn:aws:iam::123456789012:role/snowflake-access'
  ENABLED = TRUE
  STORAGE_ALLOWED_LOCATIONS = ('s3://data-lake-prod/raw/', 's3://data-lake-prod/staging/');

-- IAM信頼関係に必要な情報を取得
DESC INTEGRATION s3_integration;

-- External Stageの作成
CREATE OR REPLACE STAGE data_lake_stage
  STORAGE_INTEGRATION = s3_integration
  URL = 's3://data-lake-prod/raw/'
  FILE_FORMAT = (TYPE = PARQUET);

COPY INTOとステージの連携パターン

COPY INTOはステージからテーブルへのロードと、テーブルからステージへのアンロードの両方向で使用します。

-- ロード:ステージ → テーブル
COPY INTO analytics.orders
FROM @data_lake_stage/orders/2026/03/
FILE_FORMAT = (TYPE = PARQUET)
MATCH_BY_COLUMN_NAME = CASE_INSENSITIVE;

-- アンロード:テーブル → ステージ
COPY INTO @export_stage/monthly_report/
FROM (
  SELECT region, SUM(amount) AS total_amount
  FROM analytics.orders
  WHERE order_date >= '2026-03-01'
  GROUP BY region
)
FILE_FORMAT = (TYPE = CSV COMPRESSION = GZIP)
HEADER = TRUE
OVERWRITE = TRUE;

COPY INTOの主要オプション

オプション用途デフォルト値
ON_ERRORエラーファイルの処理方針ABORT_STATEMENT
PURGEロード成功後のファイル自動削除FALSE
MATCH_BY_COLUMN_NAMEカラム名での自動マッピングNONE
PATTERN正規表現でファイル名をフィルタ(なし)
VALIDATION_MODEロード前のバリデーション(なし)

FILE FORMATの定義と再利用

Named File Formatを事前に定義しておくと、複数のステージやCOPY INTOで一貫したフォーマット設定を再利用できます。

-- Named File Formatの作成
CREATE OR REPLACE FILE FORMAT csv_standard
  TYPE = CSV
  SKIP_HEADER = 1
  FIELD_DELIMITER = ','
  FIELD_OPTIONALLY_ENCLOSED_BY = '"'
  NULL_IF = ('NULL', 'null', '')
  EMPTY_FIELD_AS_NULL = TRUE;

-- ステージでFile Formatを参照
CREATE OR REPLACE STAGE shared_csv_stage
  FILE_FORMAT = csv_standard;

Directory Tables

Directory Tablesは、ステージ上のファイルメタデータ(ファイルパス・サイズ・最終更新日時等)をテーブルとしてクエリできる機能です。ステージ作成時にDIRECTORY = (ENABLE = TRUE)を指定して有効化します。

-- Directory Table有効化
ALTER STAGE data_lake_stage SET DIRECTORY = (ENABLE = TRUE);

-- メタデータの手動リフレッシュ
ALTER STAGE data_lake_stage REFRESH;

-- Directory Tableのクエリ
SELECT *
FROM DIRECTORY(@data_lake_stage)
WHERE FILE_URL LIKE '%2026/03%'
ORDER BY LAST_MODIFIED DESC;

セキュリティのベストプラクティス

  • External StageではStorage Integrationを必ず使用:長期鍵の埋め込みを避け、IAMロールによるアクセス委任を行う
  • STORAGE_ALLOWED_LOCATIONSで範囲制限:Storage Integrationで許可するバケット/パスを最小限に絞る
  • Named Stageに適切なGRANTを設定:チーム運用ではUSAGE / READ / WRITE権限をロール単位で制御する
  • Internal Stageの暗号化:Snowflakeが自動的にAES-256暗号化を適用(追加設定不要)

問題で確認

Data Loading / Security

問題 1

チームで共有するS3バケット上のParquetファイルをSnowflakeにロードする構成を設計している。セキュリティ要件として長期鍵をSnowflakeに保存してはならない。最も適切な構成はどれか。

  1. User Stageに各メンバーがファイルをPUTし、個別にCOPY INTOを実行する
  2. Storage Integrationを作成してIAMロール委任を設定し、External Stageから参照する
  3. Table StageにAWS_KEY_IDとAWS_SECRET_KEYを直接指定してExternal Stageを作成する
  4. Named Internal Stageを作成し、S3からファイルをSnowflakeにPUTしてからロードする

正解: B

長期鍵をSnowflakeに保存しない要件を満たすには、Storage IntegrationでIAMロールベースのアクセス委任を設定し、External Stageから参照する構成が最適です。AWS_KEY_IDの直接指定は長期鍵の埋め込みに該当するため要件を満たしません。Internal Stageを使う場合は事前にファイルをSnowflake内部にPUTする必要があり、既存S3の直接参照にはなりません。

よくある質問

Storage Integrationを使わずにExternal Stageを作成できますか?

はい、AWS_KEY_IDとAWS_SECRET_KEYを直接指定してExternal Stageを作成することも技術的には可能です。ただしクレデンシャルがステージ定義に埋め込まれるため、セキュリティリスクが高くなります。Snowflakeの公式ドキュメントでもStorage Integrationの使用が強く推奨されており、IAMロールベースのアクセス委任によって長期鍵の管理が不要になります。試験でもStorage Integrationが「より安全な選択肢」として問われます。

User StageとTable Stageにはどのような制約がありますか?

User Stage(@~)はユーザーごとに自動作成される個人用ステージで、他のユーザーからはアクセスできません。Table Stage(@%table_name)はテーブルごとに自動作成され、そのテーブルへのCOPY INTO専用です。どちらもCREATE STAGE文なしで利用でき便利ですが、Named Stageと異なりファイルフォーマットの事前定義やGRANT権限の付与ができないため、チーム運用にはNamed Internal Stageが推奨されます。

COPY INTOのロード済みファイルはステージから自動削除されますか?

デフォルトではロード済みファイルはステージに残ります。COPY INTOにPURGE = TRUEオプションを指定すると、ロード成功後にステージ上の対象ファイルが自動的に削除されます。ただしPURGEは部分的にロードされたファイルの判定が難しいケースがあるため、ファイル管理を厳密に行いたい場合はREMOVEコマンドで手動削除する運用も検討します。

この記事で学んだ内容を問題で確認しましょう

16,000問以上の問題で実力チェック

無料で問題を解いてみる
この記事の著者

NicheeLab編集部

データエンジニアリング・クラウド資格の専門家。Databricks・Snowflake等の認定資格を保有し、実務経験に基づいた問題作成・解説を行っています。NicheeLab運営。


関連記事
Snowflake

Snowflake資格一覧|全11試験(SnowPro)の難易度・費用

Snowflake認定資格(SnowPro)全11試験の一覧・難易度・費用・出題範囲を徹底解説。...

Snowflake

Snowflake試験の難易度ランキング|全11資格を徹底比較

Snowflake(SnowPro)認定全11試験の難易度をランキング形式で比較。学習時間・合格に必要なスキルから分析。...

Snowflake

Snowflake資格の勉強方法|効率的な学習ルートと合格のコツ

Snowflake認定資格(SnowPro)に最短で合格するための勉強方法。公式リソース・学習スケジュールを徹底ガイド。...

Snowflake

SnowPro Core試験完全解説|出題範囲・問題例・合格戦略

SnowPro Core Certification(COF-C03)を徹底解説。出題範囲・100問の試験形式・合格ライ...

Snowflake

SnowPro Platform Associate完全解説|入門試験の攻略

SnowPro Associate: Platform Certification(SOL-C01)を徹底解説。最も簡単...

Snowflakeの記事一覧 (102件)
© 2026 NicheeLab All rights reserved.