创建动态 Apache Iceberg™ 表¶
本主题说明如何创建以下类型的动态表及其相关注意事项:
从 Snowflake 管理的 Apache Iceberg™ 表中读取作为基表的动态表。
动态 Iceberg 表,以 Iceberg 表格式存储查询结果。
Snowflake 管理的 Iceberg 基表可以是常规的 Snowflake 管理的 Iceberg 表 或 Snowflake 管理的动态 Iceberg 表。
创建从 Iceberg 表读取的动态表¶
如果您希望管道对 Snowflake 管理的Iceberg 表中的数据进行操作,或者希望已处理的数据可从其他引擎(例如使用 Spark 的 Apache Iceberg SDK)进行查询,那么从 Snowflake 管理的 Iceberg 表读取的动态表非常有用。
从 Iceberg 表创建动态表类似于从常规表创建动态表。为此,请执行 CREATE DYNAMIC TABLE SQL 语句,就像对常规表一样。
创建动态 Iceberg 表¶
动态 Iceberg 表结合了动态表和 Snowflake 管理的 Iceberg 表的优点,提供外部云存储管理、自动数据转换和性能优化等功能。
动态 Iceberg 表与数据湖集成,可用于将数据存储在外部云存储中,例如 AWS S3 或 Azure Blob 存储,同时由 Snowflake 管理。这些表支持 ACID 事务、架构演化、隐藏式分区和表快照。
动态 Iceberg 表的自动数据转换使用声明式 SQL 来定义所需的最终状态,而无需管理中间步骤。Snowflake 根据您指定的数据新鲜度目标处理编排、日程安排和刷新数据转换。
通过增量处理来优化性能,与完整数据刷新相比,增量处理仅处理已变更数据以提高性能并降低成本。此外,您可以使用简单的命令在批处理和流数据之间转换,从而为数据处理工作流程提供灵活性。
动态 Iceberg 表的用例示例包括:
数据湖集成:可在 Snowflake 中执行转换和分析的同时经济高效地存储大型数据集,利用 Iceberg 格式进行高效查询和管理。
定义连续数据转换管道:可通过使用动态表,确保数据始终是最新的,无需人工干预,并通过增量处理有效地处理高速数据流。
要创建动态 Iceberg 表,请执行 CREATE DYNAMIC ICEBERG TABLE SQL 语句。例如,要创建一个名为 product
的动态 Iceberg 表,并从 my_iceberg_table
读取数据,请使用以下语法:
CREATE DYNAMIC ICEBERG TABLE product (product_id NUMBER(10,0), product_name STRING, order_time TIMESTAMP_NTZ)
TARGET_LAG = '20 minutes'
WAREHOUSE = my_warehouse
EXTERNAL_VOLUME = 'my_external_volume'
CATALOG = 'SNOWFLAKE'
BASE_LOCATION = 'my_iceberg_table'
AS
SELECT product_id, product_name, order_time FROM staging_table;
动态 Iceberg 表的未来授权¶
为了确保能够访问架构中创建的任何新动态 Iceberg 表,请使用 GRANT ...ON FUTURE ICEBERG TABLES 语法,不含 DYNAMIC
关键字。例如:
GRANT <privilege> ON FUTURE ICEBERG TABLES IN SCHEMA my_schema TO ROLE my_role;
若使用 DYNAMIC
关键字,则授权不提供对架构中创建的新动态 Iceberg 表的访问权限。例如,以下命令不适用于动态 Iceberg 表:
GRANT <privilege> ON FUTURE DYNAMIC TABLES IN SCHEMA my_schema TO ROLE my_role;