Snowflake reading from the Glue Data Catalog

Two Snowflake objects make the lakehouse work. Catalog Integration points Snowflake at the Glue Data Catalog so it can read metadata. External Volume points Snowflake at the S3 prefix so it can read data files. Both are backed by an IAM role that Snowflake assumes when it reads.

The Snowflake-AWS handshake

Snowflake assumes an IAM role and uses Catalog Integration plus External Volume to read Iceberg without copying.
snowflake/creating_resources_in_snowflake.sql
sql
CREATE OR REPLACE CATALOG INTEGRATION glueCatalog_WarehouseWeatherData
  CATALOG_SOURCE = GLUE
  CATALOG_NAMESPACE = 'warehouse_weather_data'
  TABLE_FORMAT = ICEBERG
  GLUE_AWS_ROLE_ARN = 'arn:aws:iam::xxxxxxxxxxxx:role/snowflake_service_role'
  GLUE_CATALOG_ID = 'xxxxxxxxxxxx'
  GLUE_REGION = 'us-east-1'
  ENABLED = TRUE
  REFRESH_INTERVAL_SECONDS = 600;

Catalog Integration with the Glue source. The role ARN is the bridge: Snowflake assumes it when reading.

snowflake/creating_resources_in_snowflake.sql
sql
CREATE OR REPLACE EXTERNAL VOLUME warehouse_weather_data_vol
   STORAGE_LOCATIONS =
        (
            (
               NAME = 's3_warehouse_weather_data.db'
               STORAGE_PROVIDER= 'S3'
               STORAGE_BASE_URL = 's3://learnwithparam-aws-lakehouse/pipeline-weather-data/warehouse/warehouse_weather_data.db/'
               STORAGE_AWS_ROLE_ARN='arn:aws:iam::xxxxxxxxxxxx:role/snowflake_service_role'
            )
        )
    ALLOW_WRITES=FALSE;

External Volume points Snowflake at the S3 path where the Iceberg data files live. Same role assumption pattern.

Notice ALLOW_WRITES=FALSE. Snowflake reads, never writes. Glue is the writer. Keeping that boundary explicit prevents an accidental Snowflake INSERT from corrupting the lakehouse contract.

Quiz: Quiz

Loading practice…