Snowflake

Snowflake External VolumesとIceberg連携の構築手順

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

External Volumeは、SnowflakeがApache Iceberg Tableのデータファイル (Parquet)とメタデータを格納するための外部クラウドストレージの場所を定義するオブジェクトです。 S3・Azure Blob Storage・Google Cloud Storageをデータの永続化先として指定し、 Snowflakeの計算エンジンでIceberg形式のテーブルを読み書きできます。

External VolumeとIceberg Tableの関係

Snowflake
  │
  ├─ CREATE ICEBERG TABLE ... EXTERNAL_VOLUME = 'my_vol'
  │    └─ テーブルメタデータ: Snowflake Catalog or External Catalog
  │
  └─ External Volume (my_vol)
       │
       └─ クラウドストレージ
            ├─ data/     ← Parquetデータファイル
            └─ metadata/ ← Icebergメタデータ(manifest, snapshot)

AWS S3用External Volumeの作成

CREATE OR REPLACE EXTERNAL VOLUME iceberg_s3_vol
  STORAGE_LOCATIONS = (
    (
      NAME = 'us-east-1-primary'
      STORAGE_BASE_URL = 's3://my-iceberg-bucket/warehouse/'
      STORAGE_PROVIDER = 'S3'
      STORAGE_AWS_ROLE_ARN = 'arn:aws:iam::123456789012:role/snowflake-iceberg-role'
    )
  );

-- External Volumeの情報を確認してAWS側のIAM設定を行う
DESCRIBE EXTERNAL VOLUME iceberg_s3_vol;
-- → STORAGE_AWS_IAM_USER_ARN
-- → STORAGE_AWS_EXTERNAL_ID
-- これらをAWS IAMロールの信頼ポリシーに設定

Azure Blob Storage用External Volumeの作成

CREATE OR REPLACE EXTERNAL VOLUME iceberg_azure_vol
  STORAGE_LOCATIONS = (
    (
      NAME = 'azure-east-primary'
      STORAGE_BASE_URL = 'azure://myaccount.blob.core.windows.net/iceberg-container/warehouse/'
      STORAGE_PROVIDER = 'AZURE'
      AZURE_TENANT_ID = 'a1b2c3d4-e5f6-7890-abcd-ef1234567890'
    )
  );

-- DESCRIBE後にAzure ADでサービスプリンシパルに権限付与

Google Cloud Storage用External Volumeの作成

CREATE OR REPLACE EXTERNAL VOLUME iceberg_gcs_vol
  STORAGE_LOCATIONS = (
    (
      NAME = 'gcs-us-primary'
      STORAGE_BASE_URL = 'gcs://my-iceberg-bucket/warehouse/'
      STORAGE_PROVIDER = 'GCS'
    )
  );

-- DESCRIBE後にGCPサービスアカウントにStorage Admin権限を付与

クラウド別設定比較

項目AWS S3Azure BlobGCS
STORAGE_PROVIDERS3AZUREGCS
URLプレフィックスs3://azure://gcs://
認証設定IAMロールARNAzure Tenant IDGCPサービスアカウント(自動)
DESCRIBE後の設定先IAMロール信頼ポリシーAzure AD権限IAM Storage Admin

Snowflakeカタログ管理のIceberg Table作成

-- Snowflake管理カタログでIceberg Tableを作成
-- Snowflakeがメタデータとデータの両方を管理(読み書き可能)
CREATE OR REPLACE ICEBERG TABLE analytics.events.user_actions (
  event_id STRING,
  user_id INT,
  event_type STRING,
  event_timestamp TIMESTAMP_NTZ,
  properties OBJECT
)
  CATALOG = 'SNOWFLAKE'
  EXTERNAL_VOLUME = 'iceberg_s3_vol'
  BASE_LOCATION = 'analytics/user_actions/';

-- 通常のテーブルと同様にDML操作が可能
INSERT INTO analytics.events.user_actions
VALUES ('evt-001', 12345, 'page_view', '2026-03-27 10:00:00', PARSE_JSON('{"page": "/home"}'));

SELECT * FROM analytics.events.user_actions
WHERE event_timestamp >= '2026-03-27';

外部カタログ連携のIceberg Table作成

-- AWS Glue Data Catalogとの連携
-- 先にCatalog Integrationを作成
CREATE OR REPLACE CATALOG INTEGRATION glue_catalog
  CATALOG_SOURCE = GLUE
  CATALOG_NAMESPACE = 'analytics_db'
  TABLE_FORMAT = ICEBERG
  GLUE_AWS_ROLE_ARN = 'arn:aws:iam::123456789012:role/snowflake-glue-role'
  GLUE_CATALOG_ID = '123456789012'
  GLUE_REGION = 'us-east-1'
  ENABLED = TRUE;

-- 外部カタログ管理のIceberg Table(読み取り専用)
CREATE OR REPLACE ICEBERG TABLE analytics.events.external_events
  EXTERNAL_VOLUME = 'iceberg_s3_vol'
  CATALOG = 'glue_catalog'
  CATALOG_TABLE_NAME = 'events';

カタログ管理方式の比較

観点Snowflakeカタログ外部カタログ(Glue等)
メタデータ管理Snowflakeが管理外部サービスが管理
書き込みINSERT / UPDATE / DELETE / MERGE可能読み取り専用
データ共有Spark等から直接Parquetを読み取り可能Spark等が同じカタログを参照
ユースケースSnowflake中心のワークロードマルチエンジン(Spark + Snowflake)

External Volumeの管理コマンド

-- 一覧表示
SHOW EXTERNAL VOLUMES;

-- 詳細確認(IAM設定に必要な情報を取得)
DESCRIBE EXTERNAL VOLUME iceberg_s3_vol;

-- External Volumeの削除(参照するIceberg Tableを先に削除する必要あり)
DROP EXTERNAL VOLUME iceberg_s3_vol;

ベストプラクティス

  • External Volumeはチーム/ドメインごとに分離:IAM権限の最小化とコスト追跡の観点から、用途別にExternal Volumeとバケットを分ける
  • BASE_LOCATIONで論理的にパス分離:同一External Volume内にテーブルを作成する場合はBASE_LOCATIONで明確にパスを分離する
  • Snowflakeカタログを優先:Snowflakeで読み書きする場合はSnowflakeカタログを使用し、マルチエンジンアクセスが必要な場合のみ外部カタログを検討する
  • ストレージのライフサイクルルール:Icebergのスナップショット管理と合わせて、古いデータファイルのアーカイブ/削除ルールを設定する

問題で確認

Data Sharing & Interoperability

問題 1

SparkとSnowflakeの両方から同じIceberg TableにアクセスしたいとAが求めている。SparkがAWS Glue Data Catalogでテーブルを管理している場合、Snowflake側でIceberg Tableを作成する際に指定するCATALOGの値として正しいものはどれか。

  1. CATALOG = 'SNOWFLAKE'を指定し、Snowflakeにメタデータを移行する
  2. CATALOG = 'GLUE'を指定し、直接GlueカタログのARNを参照する
  3. 事前に作成したCatalog Integration名(例: glue_catalog)をCATALOGに指定する
  4. CATALOGパラメータは不要で、EXTERNAL_VOLUMEのみ指定すればGlueと自動連携する

正解: C

外部カタログ(AWS Glue等)と連携する場合、まずCREATE CATALOG INTEGRATIONでGlueへの接続設定を作成し、そのIntegration名をCREATE ICEBERG TABLEのCATALOGパラメータに指定します。CATALOG = 'SNOWFLAKE'だとSnowflake管理カタログになり、SparkのGlueカタログとは分離されます。'GLUE'という直接指定はサポートされておらず、Catalog Integration経由でのアクセスが必要です。

よくある質問

External VolumeとExternal Stageの違いは何ですか?

External Stageはクラウドストレージ上のファイルをCOPY INTOでSnowflakeにロードするための参照先です。一方External Volumeは、Apache Iceberg形式のテーブルデータ(Parquetファイル + メタデータ)をSnowflakeが直接読み書きするためのストレージ指定です。External StageはETLのデータロード用、External VolumeはIceberg Tableのデータ格納先という役割の違いがあります。

1つのExternal Volumeに複数のIceberg Tableを作成できますか?

はい、可能です。External Volume内のサブパスで各テーブルのデータを分離できます。CREATE ICEBERG TABLE時にCATALOG_TABLE_NAMEやBASE_LOCATIONを指定することで、同一External Volume内の異なるディレクトリにテーブルデータを配置できます。ただし、大量のテーブルを1つのExternal Volumeに集約するとIAM権限の管理が複雑になるため、用途やチーム別にExternal Volumeを分けるのが推奨されます。

External VolumeはどのEditionで利用できますか?

External VolumeとIceberg TablesはStandard Edition以上のすべてのEditionで利用可能です。ただし、Snowflake管理カタログでのIceberg Table(Snowflakeが書き込みを行う形式)はEnterprise Edition以上が必要な場合があります。External Catalog(AWS Glue等)を使った読み取り専用のIceberg Tableは全Editionで利用できます。

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

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.