External Volumeは、SnowflakeがApache Iceberg Tableのデータファイル (Parquet)とメタデータを格納するための外部クラウドストレージの場所を定義するオブジェクトです。 S3・Azure Blob Storage・Google Cloud Storageをデータの永続化先として指定し、 Snowflakeの計算エンジンでIceberg形式のテーブルを読み書きできます。
Snowflake
│
├─ CREATE ICEBERG TABLE ... EXTERNAL_VOLUME = 'my_vol'
│ └─ テーブルメタデータ: Snowflake Catalog or External Catalog
│
└─ External Volume (my_vol)
│
└─ クラウドストレージ
├─ data/ ← Parquetデータファイル
└─ metadata/ ← Icebergメタデータ(manifest, snapshot)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ロールの信頼ポリシーに設定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でサービスプリンシパルに権限付与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 S3 | Azure Blob | GCS |
|---|---|---|---|
| STORAGE_PROVIDER | S3 | AZURE | GCS |
| URLプレフィックス | s3:// | azure:// | gcs:// |
| 認証設定 | IAMロールARN | Azure Tenant ID | GCPサービスアカウント(自動) |
| DESCRIBE後の設定先 | IAMロール信頼ポリシー | Azure AD権限 | IAM Storage Admin |
-- 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';-- 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) |
-- 一覧表示
SHOW EXTERNAL VOLUMES;
-- 詳細確認(IAM設定に必要な情報を取得)
DESCRIBE EXTERNAL VOLUME iceberg_s3_vol;
-- External Volumeの削除(参照するIceberg Tableを先に削除する必要あり)
DROP EXTERNAL VOLUME iceberg_s3_vol;Data Sharing & Interoperability
問題 1
SparkとSnowflakeの両方から同じIceberg TableにアクセスしたいとAが求めている。SparkがAWS Glue Data Catalogでテーブルを管理している場合、Snowflake側でIceberg Tableを作成する際に指定するCATALOGの値として正しいものはどれか。
正解: 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で利用できます。
NicheeLab編集部
データエンジニアリング・クラウド資格の専門家。Databricks・Snowflake等の認定資格を保有し、実務経験に基づいた問題作成・解説を行っています。NicheeLab運営。
Snowflake資格一覧|全11試験(SnowPro)の難易度・費用
Snowflake認定資格(SnowPro)全11試験の一覧・難易度・費用・出題範囲を徹底解説。...
Snowflake試験の難易度ランキング|全11資格を徹底比較
Snowflake(SnowPro)認定全11試験の難易度をランキング形式で比較。学習時間・合格に必要なスキルから分析。...
Snowflake資格の勉強方法|効率的な学習ルートと合格のコツ
Snowflake認定資格(SnowPro)に最短で合格するための勉強方法。公式リソース・学習スケジュールを徹底ガイド。...
SnowPro Core試験完全解説|出題範囲・問題例・合格戦略
SnowPro Core Certification(COF-C03)を徹底解説。出題範囲・100問の試験形式・合格ライ...
SnowPro Platform Associate完全解説|入門試験の攻略
SnowPro Associate: Platform Certification(SOL-C01)を徹底解説。最も簡単...