An External Volume is an object that defines the external cloud storage location where Snowflake stores data files (Parquet) and metadata for Apache Iceberg Tables. It points to S3, Azure Blob Storage, or Google Cloud Storage as the durable data backend, letting the Snowflake compute engine read and write Iceberg-format tables.
Snowflake
│
├─ CREATE ICEBERG TABLE ... EXTERNAL_VOLUME = 'my_vol'
│ └─ Table metadata: Snowflake Catalog or External Catalog
│
└─ External Volume (my_vol)
│
└─ Cloud storage
├─ data/ ← Parquet data files
└─ metadata/ ← Iceberg metadata (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'
)
);
-- Check External Volume details to configure IAM on the AWS side
DESCRIBE EXTERNAL VOLUME iceberg_s3_vol;
-- → STORAGE_AWS_IAM_USER_ARN
-- → STORAGE_AWS_EXTERNAL_ID
-- Add these to the trust policy of the AWS IAM roleCREATE 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'
)
);
-- After DESCRIBE, grant the service principal permissions in Azure ADCREATE OR REPLACE EXTERNAL VOLUME iceberg_gcs_vol
STORAGE_LOCATIONS = (
(
NAME = 'gcs-us-primary'
STORAGE_BASE_URL = 'gcs://my-iceberg-bucket/warehouse/'
STORAGE_PROVIDER = 'GCS'
)
);
-- After DESCRIBE, grant Storage Admin to the GCP service account| Item | AWS S3 | Azure Blob | GCS |
|---|---|---|---|
| STORAGE_PROVIDER | S3 | AZURE | GCS |
| URL prefix | s3:// | azure:// | gcs:// |
| Auth configuration | IAM Role ARN | Azure Tenant ID | GCP service account (auto) |
| Where to configure after DESCRIBE | IAM role trust policy | Azure AD permissions | IAM Storage Admin |
-- Create an Iceberg Table managed by the Snowflake catalog
-- Snowflake manages both metadata and data (read/write enabled)
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 works just like a regular table
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';-- Integrate with AWS Glue Data Catalog
-- First create a 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 managed by the external catalog (read-only)
CREATE OR REPLACE ICEBERG TABLE analytics.events.external_events
EXTERNAL_VOLUME = 'iceberg_s3_vol'
CATALOG = 'glue_catalog'
CATALOG_TABLE_NAME = 'events';| Aspect | Snowflake catalog | External catalog (Glue, etc.) |
|---|---|---|
| Metadata management | Managed by Snowflake | Managed by an external service |
| Writes | INSERT / UPDATE / DELETE / MERGE supported | Read-only |
| Data sharing | Spark and others can read the Parquet files directly | Spark and others reference the same catalog |
| Use case | Snowflake-centric workloads | Multi-engine setups (Spark + Snowflake) |
-- List
SHOW EXTERNAL VOLUMES;
-- Inspect details (information required for IAM setup)
DESCRIBE EXTERNAL VOLUME iceberg_s3_vol;
-- Drop an External Volume (Iceberg Tables that reference it must be dropped first)
DROP EXTERNAL VOLUME iceberg_s3_vol;Data Sharing & Interoperability
問題 1
Team A wants both Spark and Snowflake to access the same Iceberg Table, with Spark managing the table in the AWS Glue Data Catalog. When creating the Iceberg Table in Snowflake, which value of CATALOG is correct?
正解: C
To integrate with an external catalog (such as AWS Glue), first create the connection with CREATE CATALOG INTEGRATION, then pass the integration's name as the CATALOG parameter of CREATE ICEBERG TABLE. CATALOG = 'SNOWFLAKE' creates a Snowflake-managed catalog that is decoupled from Spark's Glue catalog. There is no direct 'GLUE' value — access must go through a Catalog Integration.
What is the difference between an External Volume and an External Stage?
An External Stage points to files in cloud storage that Snowflake loads via COPY INTO. An External Volume, by contrast, specifies the storage location where Snowflake directly reads and writes Apache Iceberg table data (Parquet data files plus metadata). External Stages are for ETL data loading, while External Volumes are the data backend for Iceberg Tables.
Can multiple Iceberg Tables share a single External Volume?
Yes. You can isolate each table's data by subpath within an External Volume. Specifying CATALOG_TABLE_NAME or BASE_LOCATION on CREATE ICEBERG TABLE places the table's data in a distinct directory inside the same External Volume. That said, packing too many tables into one External Volume makes IAM permissions hard to manage, so splitting External Volumes by team or use case is recommended.
Which Snowflake Edition supports External Volumes?
External Volumes and Iceberg Tables are available on Standard Edition and above. Iceberg Tables managed by the Snowflake catalog (where Snowflake performs writes) may require Enterprise Edition or higher. Read-only Iceberg Tables that use an external catalog (such as AWS Glue) are available on all Editions.
Practice with certification-focused question sets
無料で問題を解いてみるNicheeLab Editorial Team
NicheeLab editorial team focused on data engineering and cloud certification learning. Content is structured around practical study needs and official exam domains.
Snowflake Certifications: All 11 Exams Explained (2026)
Every SnowPro certification — Associate, Core, Specialty, Ad...
Snowflake Exam Difficulty Ranking: All 11 Certs Compared (2026)
All 11 SnowPro exams ranked by difficulty with study-time es...
Snowflake Study Guide: Fastest Pass Route by Exam (2026)
How to pass SnowPro certifications efficiently — official ma...
SnowPro Core (COF-C03): Complete Exam Guide (2026)
Pass the SnowPro Core exam — six domains, scope, sample ques...
SnowPro Associate Platform (SOL-C01): Complete Guide (2026)
The entry-level SnowPro Associate exam — scope, weighting, s...