Apache Iceberg™ 表的 Snowpipe Streaming 高性能架构

Snowpipe Streaming 采用高性能架构,支持将数据引入 Snowflake 管理的 Apache Iceberg 表中,包括 Iceberg v2 和 Iceberg v3 表。这使得数据近乎实时地流式传输到 Iceberg 表中,并具有高性能架构的所有性能优势。

备注

经典架构仅支持 Iceberg v2 表。如果需要 Iceberg v3 支持,则必须使用高性能架构。有关经典架构中 Iceberg 支持的更多信息,请参阅 Snowpipe Streaming Classic with Apache Iceberg™ tables

工作原理

Snowpipe Streaming 通过 PIPE 对象将数据引入目标 Iceberg 表中。Snowflake 使用相应的 Iceberg 元数据创建与 Iceberg 兼容的 Apache Parquet 数据文件,并将其上传到您配置的外部云存储位置。数据以 Snowflake 管理的 Iceberg 表的形式提供,该表在 Snowflake 中注册为 Iceberg 目录。

Snowflake 使用 外部卷 连接到您的存储位置。

开始使用

本节提供了如何设置具有高性能架构的 Snowpipe Streaming 以将数据引入 Iceberg 表的分步示例。

第 1 步:创建外部卷

创建 外部卷,用于指定 Iceberg 表数据的存储位置。

授予流式传输角色外部卷的 USAGE:

GRANT USAGE ON EXTERNAL VOLUME my_external_volume TO ROLE my_streaming_role;

第 2 步:创建 Snowflake 管理的 Iceberg 表

使用您配置的外部卷创建 Snowflake 管理的 Iceberg 表

CREATE OR REPLACE ICEBERG TABLE my_iceberg_table (
    event_id NUMBER,
    event_type STRING,
    event_data VARIANT,
    event_timestamp TIMESTAMP_NTZ
)
    CATALOG = 'SNOWFLAKE'
    EXTERNAL_VOLUME = 'my_external_volume'
    BASE_LOCATION = 'my_iceberg_table/'
    ICEBERG_VERSION = 3;

备注

如果忽略 ICEBERG_VERSION 参数,表默认为 Iceberg v2。

第 3 步:创建用于引入的管道

创建一个以 Iceberg 表为目标的管道。您可以使用默认管道(自动创建)或创建自定义管道:

-- Option 1: Use the default pipe.
-- The default pipe is automatically created when you open a channel
-- against the table using the SDK. The default pipe name follows the
-- convention: <TABLE_NAME>-STREAMING (for example, MY_ICEBERG_TABLE-STREAMING).

-- Option 2: Create a custom pipe with explicit column mapping.
CREATE OR REPLACE PIPE my_iceberg_pipe AS
    COPY INTO my_iceberg_table (event_id, event_type, event_data, event_timestamp)
    FROM (SELECT $1:event_id, $1:event_type, $1:event_data, $1:event_timestamp);

第 4 步:使用 SDK 流式传输数据

配置 SDK 以通过管道将数据流式传输到 Iceberg 表中。使用 Tutorial: Get started with Snowpipe Streaming high-performance architecture SDK 中所述的相同 SDK 设置,在客户端配置中指定 Iceberg 表的管道。

支持的 Iceberg 版本

高性能架构同时支持 Iceberg v2 和 Iceberg v3 表。

经典架构 仅支持 Iceberg v2 表。

支持的数据类型

Snowflake Ingest SDK 支持 Snowflake 当前支持的大部分 Iceberg 数据类型。有关更多信息,请参阅 Apache Iceberg™ 表的数据类型

SDK 还支持引入到三个 结构化数据类型:结构化 ARRAY、结构化 OBJECT 和结构化 MAP。

使用说明

限制

以下限制适用于具有高性能架构的 Snowpipe Streaming 和 Iceberg 表:

  • 不支持分区的 Iceberg 表。

  • Iceberg 表不支持架构演化。

  • 长度受限的 VARCHAR 列(例如 VARCHAR(100))不支持 Iceberg 表。使用没有长度限制的 STRING 或 VARCHAR。

Snowpipe Streaming 高性能架构限制Iceberg 表限制 同样适用。