创建动态 Apache Iceberg™ 表¶
本主题介绍如何创建动态 Iceberg 表,以 Iceberg 表格式存储查询结果。
创建动态 Iceberg 表¶
动态 Iceberg 表结合了动态表和 Snowflake 管理的 Iceberg 表的优点,提供外部云存储管理、自动数据转换和性能优化等功能。
动态 Iceberg 表与数据湖集成,可用于将数据存储在外部云存储中,例如 AWS S3 或 Azure Blob 存储,同时由 Snowflake 管理。这些表支持 ACID 事务、架构演化、隐藏式分区和表快照。
动态 Iceberg 表的自动数据转换使用声明式 SQL 来定义所需的最终状态,而无需管理中间步骤。Snowflake 根据您指定的数据新鲜度目标处理编排、日程安排和刷新数据转换。
通过增量处理来优化性能,与完整数据刷新相比,增量处理仅处理已变更数据以提高性能并降低成本。此外,您可以使用简单的命令在批处理和流数据之间转换,从而为数据处理工作流程提供灵活性。
动态 Iceberg 表的用例示例包括:
数据湖集成:可在 Snowflake 中执行转换和分析的同时经济高效地存储大型数据集,利用 Iceberg 格式进行高效查询和管理。
定义连续数据转换管道:可通过使用动态表,确保数据始终是最新的,无需人工干预,并通过增量处理有效地处理高速数据流。
要创建动态 Iceberg 表,请执行 CREATE DYNAMIC ICEBERG TABLE SQL 语句。例如,要创建一个动态 Iceberg 表,并从 my_iceberg_table
中读取数据,请使用以下语法:
CREATE DYNAMIC ICEBERG TABLE my_dynamic_iceberg_table (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;
注意事项和限制¶
动态 Iceberg 表支持与 Snowflake 中的常规 Iceberg 表相同的数据类型。有关更多信息,请参阅 支持的数据类型。
目录 是账户、架构或数据库参数,可将其配置为隐式,就像 Snowflake 管理的常规 Iceberg 表一样。
动态 Iceberg 表目前不支持
IF NOT EXISTS
子句。如果目标表已存在,则使用IF NOT EXISTS
子句会引发错误。动态 Iceberg 表目前仅支持
CREATE
语句。在任何其他命令中指定DYNAMIC ICEBERG``(例如,``ALTER DYNAMIC ICEBERG TABLE <name>
)会导致错误。您无法克隆动态 Iceberg 表。此外,克隆包含动态 Iceberg 表的数据库或架构不会将该表克隆到新位置。