创建动态 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 中读取数据,请使用以下语法:
配置分区、文件大小和路径布局¶
动态 Iceberg 表支持 PARTITION_BY、TARGET_FILE_SIZE 和 PATH_LAYOUT 表属性。这些属性的工作方式与 Snowflake 管理的常规 Iceberg 表相同。
PARTITION_BY:指定一个或多个 Iceberg 分区表达式,用于控制 Snowflake 如何对表中的数据文件进行分区。例如,要按
order_time列的年份对动态 Iceberg 表进行分区:有关支持的分区转换,请参阅 Partition expression parameters (partitionExpression)。
TARGET_FILE_SIZE:为表指定目标 Parquet 文件的大小。默认值为
AUTO,即由 Snowflake 根据表特征自动选择文件大小。有关更多信息,请参阅 Set a target file size。PATH_LAYOUT:指定 Snowflake 写入 Parquet 数据文件时使用扁平路径布局还是分层路径布局。默认为
FLAT。将HIERARCHICAL与PARTITION_BY结合使用,可在data/目录下启用 Hive 风格的分区路径。
有关完整的参数详细信息,请参阅 CREATE DYNAMIC ICEBERG TABLE。
动态 Iceberg 表的未来授权¶
为了确保能够访问架构中创建的任何新动态 Iceberg 表,请使用 GRANT ...ON FUTURE ICEBERG TABLES 语法,不含 DYNAMIC 关键字。例如:
若使用 DYNAMIC 关键字,则授权不提供对架构中创建的新动态 Iceberg 表的访问权限。例如,以下命令不适用于动态 Iceberg 表:
注意事项和限制¶
动态 Iceberg 表支持与 Snowflake 中的常规 Iceberg 表相同的数据类型。有关更多信息,请参阅 支持的数据类型。
目录 是账户、架构或数据库参数,可将其配置为隐式,就像 Snowflake 管理的常规 Iceberg 表一样。
动态 Iceberg 表目前不支持
IF NOT EXISTS子句。如果目标表已存在,则使用IF NOT EXISTS子句会引发错误。动态 Iceberg 表目前仅支持
CREATE语句。在任何其他命令中指定DYNAMIC ICEBERG``(例如,``ALTER DYNAMIC ICEBERG TABLE <name>)会导致错误。您无法克隆动态 Iceberg 表。此外,克隆包含动态 Iceberg 表的数据库或架构不会将该表克隆到新位置。