创建动态 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;
Copy

动态 Iceberg 表的未来授权

为了确保能够访问架构中创建的任何新动态 Iceberg 表,请使用 GRANT ...ON FUTURE ICEBERG TABLES 语法,不含 DYNAMIC 关键字。例如:

GRANT <privilege> ON FUTURE ICEBERG TABLES IN SCHEMA my_schema TO ROLE my_role;
Copy

若使用 DYNAMIC 关键字,则授权不提供对架构中创建的新动态 Iceberg 表的访问权限。例如,以下命令不适用于动态 Iceberg 表:

GRANT <privilege> ON FUTURE DYNAMIC TABLES IN SCHEMA my_schema TO ROLE my_role;
Copy

注意事项和限制

  • 动态 Iceberg 表支持与 Snowflake 中的常规 Iceberg 表相同的数据类型。有关更多信息,请参阅 支持的数据类型

  • 目录 是账户、架构或数据库参数,可将其配置为隐式,就像 Snowflake 管理的常规 Iceberg 表一样。

  • 动态 Iceberg 表目前不支持 IF NOT EXISTS 子句。如果目标表已存在,则使用 IF NOT EXISTS 子句会引发错误。

  • 动态 Iceberg 表目前仅支持 CREATE 语句。在任何其他命令中指定 DYNAMIC ICEBERG``(例如,``ALTER DYNAMIC ICEBERG TABLE <name>)会导致错误。

语言: 中文