在 Snowflake 中创建 Apache Iceberg™ 表¶
在Snowflake中为不同的 目录选项 创建 Apache Iceberg™ 表。您可以使用 CREATE ICEBERG TABLE 命令创建 Iceberg 表。
备注
要创建 Iceberg 表,您必须有一个正在运行的仓库,该仓库被指定为会话的当前仓库。如果在创建 Iceberg 表时未指定正在运行的仓库,则可能会发生错误。有关更多信息,请参阅 使用仓库。
要创建与 Snowflake Open Catalog 配合使用的 Iceberg 表,请参阅 在 Snowflake 中将 Apache Iceberg™ 表与 Snowflake Open Catalog 结合使用。
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';
备注
或者,使用变体语法。有关更多信息,请参阅 CREATE TABLE ...AS SELECT 和 CREATE 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';
创建以 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';
对象存储中的 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/';
如果 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';