Snowflake Streaming to Iceberg Tables Reference

Reference for configuring Snowflake Streaming to Iceberg tables, including settings, data types, schemas, and limitations.
Available Plans
  • starter
  • growth
  • enterprise

This guide provides a detailed reference for the Snowflake Streaming to Iceberg tables integration, including:

  • Data type mappings between RudderStack events and Snowflake-managed Iceberg tables
  • Table schemas and supported events

Use this guide as a lookup when you design schemas, write queries, or troubleshoot issues.

Data type mappings

The table below describes how RudderStack event properties map to Snowflake-managed Iceberg column types.

RudderStack typeIceberg column typeNotes
StringVARCHARStandard string representation
IntegerNUMBER(10,0) or NUMBER(19,0)Iceberg requires explicit precision. RudderStack uses integer types with appropriate precision based on the value range
FloatDOUBLEDouble-precision floating point
BooleanBOOLEANStandard boolean type
TimestampTIMESTAMP_NTZ(6)Timestamp without timezone information and with microsecond precision
JSON / nested objectsVARCHARJSON is stored as a string because VARIANT is not available in Snowflake-managed Iceberg tables

Work with JSON data

Because Snowflake-managed Iceberg tables do not currently support the VARIANT data type, JSON and nested object data are stored as VARCHAR columns that contain JSON strings.

To query nested fields, use PARSE_JSON in your Snowflake queries. For example:

-- Instead of: SELECT payload:event_name FROM my_table
-- Use:
SELECT PARSE_JSON(payload):event_name AS event_name
FROM your_database.your_schema.tracks;
tip

Tip: When Snowflake adds VARIANT support to Iceberg tables (for example, via newer Iceberg table versions), JSON handling may change.

Always refer to the Snowflake documentation for the latest behavior.

Timestamp behavior

Snowflake-managed Iceberg tables use TIMESTAMP_NTZ for timestamps:

  • Timestamps do not store timezone information
  • RudderStack sends timestamps in a normalized form, and Snowflake stores them as TIMESTAMP_NTZ(6)
  • If you rely on timezone-aware behavior, you must perform conversions explicitly in your queries, for example using CONVERT_TIMEZONE

Supported tables and events

RudderStack creates a set of Iceberg tables based on the event types that your sources send. The following table summarizes the mapping:

Event typeTable createdNotes
trackTRACKS and event-specific tables (for example, PAGE_VIEWED)Standard event tracking
pagePAGESPage view events
screenSCREENSScreen view events for mobile and other apps
identifyIDENTIFIESIdentity events stored in an append-only table
groupGROUPSGroup membership events
aliasALIASESIdentity alias events
USERSNot created for Iceberg destinations
info

For Iceberg-enabled destinations, RudderStack does not create a USERS table.

The USERS table relies on MERGE operations for deduplication, which is not supported in this integration.

FAQ

See the Snowflake Streaming to Iceberg Tables FAQ for answers to frequently asked questions on this integration.

Questions? We're here to help.

Join the RudderStack Slack community or email us for support