在 Snowflake 中创建 Apache Iceberg™ 表

在Snowflake中为不同的 目录选项 创建 Apache Iceberg™ 表。您可以使用 CREATE ICEBERG TABLE 命令创建 Iceberg 表。

备注

Snowflake 管理的

要创建以 Snowflake 作为目录的 Iceberg 表,必须指定 外部卷 和 Snowflake 可以在其中写入表数据和元数据的基本位置(外部卷上的目录)。有关创建外部卷的说明,请参阅 配置外部卷

要定义表列,可以使用 Iceberg 数据类型。有关更多信息,请参阅 Apache Iceberg™ 表的数据类型

以下示例创建以 Snowflake 作为 Iceberg 目录的 Iceberg 表。

CREATE OR REPLACE ICEBERG TABLE my_iceberg_table (
    boolean_col boolean,
    int_col int,
    long_col long,
    float_col float,
    double_col double,
    decimal_col decimal(10,5),
    string_col string,
    fixed_col fixed(10),
    binary_col binary,
    date_col date,
    time_col time,
    timestamp_ntz_col timestamp_ntz(6),
    timestamp_ltz_col timestamp_ltz(6)
  )
  CATALOG = 'SNOWFLAKE'
  EXTERNAL_VOLUME = 'my_ext_vol'
  BASE_LOCATION = 'my/relative/path/from/extvol';
Copy

备注

或者,使用变体语法。有关更多信息,请参阅 CREATE TABLE ...AS SELECTCREATE ICEBERG TABLE ...LIKE

创建使用 Snowflake 作为目录的表后,您可以执行以下操作:

有关更多信息,请参阅 管理 Apache Iceberg™ 表

外部目录

要创建使用外部目录或根本不使用目录的 Iceberg 表,必须指定 外部卷目录集成。如果使用外部 Iceberg 目录,可能还需要指定其他参数。例如,使用 AWS Glue 作为目录时,必须指定目录表名称。

创建使用外部目录的 Iceberg 表时,Snowflake 会执行初始元数据刷新。您还可以使用 ALTER ICEBERG TABLE ... REFRESH 命令手动刷新表元数据,以将元数据与最近的表更改同步。有关更多信息,请参阅 刷新表元数据

备注

CREATE ICEBERG TABLE 命令支持不同外部目录的不同选项。本节中的示例仅指定了部分可用选项。要查看完整的语法,请参阅以下页面:

您还可以通过使用 ALTER ICEBERG TABLE 为外部管理的表配置数据治理(例如,掩码或行访问策略)。

AWS Glue

重要

您必须为 AWS Glue 配置目录集成,以便在 Snowflake 和 Glue Data Catalog 之间建立信任关系。有关说明,请参阅 为 AWS Glue 配置目录集成

以下示例创建一个使用 AWS Glue Data Catalog 的 Iceberg 表,并指定已为 AWS Glue (glueCatalogInt) 配置的目录集成的名称及指定 CATALOG_TABLE_NAME 属性的值。

CREATE ICEBERG TABLE myGlueTable
  EXTERNAL_VOLUME='glueCatalogVolume'
  CATALOG='glueCatalogInt'
  CATALOG_TABLE_NAME='myGlueTable';
Copy

创建以 AWS Glue 作为目录的表后,您可以执行以下操作:

对象存储中的 Iceberg 文件

以下示例从外部云存储中的 Iceberg 元数据创建 Iceberg 表,并指定外部卷 (METADATA_FILE_PATH) 上表元数据的相对路径。

CREATE ICEBERG TABLE myIcebergTable
  EXTERNAL_VOLUME='icebergMetadataVolume'
  CATALOG='icebergCatalogInt'
  METADATA_FILE_PATH='path/to/metadata/v1.metadata.json';
Copy

对象存储中的 Delta 文件

以下示例命令根据对象存储中的 Delta 表文件创建 Iceberg 表。

该示例指定与 Delta 表文件的云位置关联的外部卷、为 Delta <label-tables_iceberg_create_cat_int_delta> 配置的目录集成`以及所需 :code:`BASE_LOCATION 参数的值。

CREATE ICEBERG TABLE my_delta_iceberg_table
  CATALOG = delta_catalog_integration
  EXTERNAL_VOLUME = delta_external_volume
  BASE_LOCATION = 'relative/path/from/ext/vol/';
Copy

如果 Delta 表使用分区架构,Snowflake 会自动通过 Delta 日志解释该架构。

Apache Iceberg™ REST 目录

以下示例创建了一个使用远程 Iceberg REST 目录 的表。

CREATE OR REPLACE ICEBERG TABLE my_iceberg_table
  EXTERNAL_VOLUME = 'my_external_volume'
  CATALOG = 'my_rest_catalog_integration'
  CATALOG_TABLE_NAME = 'my_remote_table';
Copy
语言: 中文