CREATE ICEBERG TABLE(使用 AWS Glue 作为 Iceberg 目录)¶
使用在 AWS Glue Data Catalog 中注册的 Iceberg 表,在当前/指定架构中创建或替换 Apache Iceberg™ 表。这种类型的 Iceberg 表需要 目录集成 才能将 Snowflake 连接到 AWS Glue。
本主题将 Iceberg 表简称为“表”(指定 Iceberg 表 的位置除外)以避免混淆。
- 另请参阅:
ALTER ICEBERG TABLE、DROP ICEBERG TABLE、SHOW ICEBERG TABLES、DESCRIBE ICEBERG TABLE、UNDROP ICEBERG TABLE
语法¶
CREATE [ OR REPLACE ] ICEBERG TABLE [ IF NOT EXISTS ] <table_name>
[ EXTERNAL_VOLUME = '<external_volume_name>' ]
[ CATALOG = '<catalog_integration_name>' ]
CATALOG_TABLE_NAME = '<catalog_table_name>'
[ CATALOG_NAMESPACE = '<catalog_namespace>' ]
[ REPLACE_INVALID_CHARACTERS = { TRUE | FALSE } ]
[ AUTO_REFRESH = { TRUE | FALSE } ]
[ COMMENT = '<string_literal>' ]
[ [ WITH ] TAG ( <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' , ... ] ) ]
必填参数¶
table_name
指定表的标识符(名称);在创建表的架构中必须是唯一的。
此外,标识符必须以字母字符开头,且不能包含空格或特殊字符,除非整个标识符字符串放在双引号内(例如,
"My object"
)。放在双引号内的标识符也区分大小写。有关更多信息,请参阅 标识符要求。
CATALOG_TABLE_NAME = 'catalog_table_name'
指定 AWS Glue Data Catalog 可识别的表名称。有关在创建 Iceberg 表时使用
CATALOG_TABLE_NAME
的示例,请参阅 `示例`_(本主题内容)。创建表后,该参数无法更改。
可选参数¶
EXTERNAL_VOLUME = 'external_volume_name'
指定外部卷的标识符(名称),Iceberg 表会以 Parquet 格式将自身的元数据文件和数据存储在里面。Iceberg 元数据和清单文件存储表架构、分区、快照和其他元数据。
如果未指定此参数,则 Iceberg 表将默认使用架构、数据库或账户的外部卷。架构优先于数据库,数据库优先于账户。
CATALOG = 'catalog_integration_name'
指定此表的目录集成的标识符(名称)。您必须指定已为 AWS Glue 配置的目录集成。有关信息,请参阅 为 AWS Glue 配置目录集成。
如果未指定,则默认将 Iceberg 表视为架构、数据库或账户的目录集成。架构优先于数据库,数据库优先于账户。
CATALOG_NAMESPACE = 'catalog_namespace'
可选择指定 AWS Glue 数据目录源的命名空间(例如,
my_glue_database
),并替换通过目录集成指定的默认目录命名空间。通过在表级别指定命名空间,您可以使用 AWS Glue 的单个目录集成,跨不同数据库创建 Iceberg 表。如果未指定,则该表将使用与目录集成关联的默认目录命名空间。
REPLACE_INVALID_CHARACTERS = { TRUE | FALSE }
指定在查询结果中是否使用 Unicode 替换字符 (�) 替换无效的 UTF-8 字符。您只能为使用外部 Tables 目录的表设置此参数。
TRUE
会将无效的 UTF-8 字符替换为 Unicode 替换字符。FALSE
保留无效的 UTF-8 字符不变。如果在 Parquet 数据文件中遇到无效的 UTF-8 字符,Snowflake 会返回用户错误消息。
如果未指定,则 Iceberg 表将默认使用架构、数据库或账户的参数值。架构优先于数据库,数据库优先于账户。
默认:
FALSE
AUTO_REFRESH = { TRUE | FALSE }
指定在使用 自动刷新 时,Snowflake 是否应自动轮询与表关联的外部 Iceberg 目录以获取元数据更新。如果没有为目录集成上的
REFRESH_INTERVAL_SECONDS
参数指定值,则 Snowflake 将使用 30 秒作为默认刷新间隔。默认:FALSE
COMMENT = 'string_literal'
指定表的注释。
默认:无值
访问控制要求¶
权限 |
对象 |
备注 |
---|---|---|
CREATE ICEBERG TABLE |
架构 |
|
CREATE EXTERNAL VOLUME |
账户 |
需要创建新的外部卷。 |
USAGE |
外部卷 |
需要引用现有的外部卷。 |
CREATE INTEGRATION |
账户 |
需要创建新的目录集成。 |
USAGE |
目录集成 |
需要引用现有目录集成。 |
请注意,对架构中的对象进行操作还需要对父数据库和架构具有 USAGE 权限。
有关创建具有指定权限集的自定义角色的说明,请参阅 创建自定义角色。
使用说明¶
运行此命令的注意事项:
如果您使用双引号标识符创建了外部卷或目录集成,则必须 :emph:` 完全 ` 按照在 CREATE ICEBERG TABLE 语句中创建的标识符(包括双引号)来指定标识符。未包含引号可能会导致
Object does not exist
错误(或类似类型的错误)。若要查看示例,请参阅 ` 示例 `_ (本主题内容)部分。
创建表的注意事项:
架构不能包含同名的表和/或视图。创建表时:
如果架构中已存在同名视图,则会返回错误,并且不会创建表。
如果架构中已存在同名的表,则会返回错误,并且不会创建表,除非命令中包含可选的
OR REPLACE
关键字。
CREATE OR REPLACE <object> 语句是原子的。也就是说,当对象被替换时,旧对象将被删除,新对象将在单个事务中创建。
这意味着与 CREATE OR REPLACE ICEBERG TABLE 操作并行的任何查询都使用旧的或新的表版本。
与 保留关键字 类似,ANSI 保留函数名称(CURRENT_DATE、CURRENT_TIMESTAMP 等)不能用作列名。
重新创建表(使用可选
OR REPLACE
关键字)会删除其历史记录,这会使表上的任何流都过时。过时的流是不可读的。
关于元数据:
注意
客户应确保在使用 Snowflake 服务时,不会将个人数据(用户对象除外)、敏感数据、出口管制数据或其他受监管数据作为元数据输入。有关更多信息,请参阅 Snowflake 中的元数据字段。
示例¶
创建以 AWS Glue 作为目录的 Iceberg 表¶
此示例创建一个使用 AWS Glue 数据目录的 Iceberg 表。语句使用可选的 CATALOG_NAMESPACE
参数以替换默认目录命名空间,并为表设置目录命名空间,
CREATE ICEBERG TABLE glue_iceberg_table
EXTERNAL_VOLUME='glue_catalog_volume'
CATALOG='glue_catalog_integration'
CATALOG_TABLE_NAME='my_glue_catalog_table'
CATALOG_NAMESPACE='icebergcatalogdb2';
使用带双引号的标识符指定外部卷或目录集成¶
此示例创建一个具有外部卷和目录集成的 Iceberg 表,表的标识符中包含双引号。放在双引号内的标识符区分大小写,并且通常包含特殊字符。
标识符 "glue_volume_1"
和 "glue_catalog_integration_1"
指定为与创建时完全相同(包括双引号)。未包含引号可能会导致 Object does not exist
错误(或类似类型的错误)。
要了解更多信息,请参阅 加双引号的标识符。
CREATE OR REPLACE ICEBERG TABLE itable_with_quoted_catalog
EXTERNAL_VOLUME = '"glue_volume_1"'
CATALOG = '"glue_catalog_integration_1"'
CATALOG_TABLE_NAME='my_glue_catalog_table'
CATALOG_NAMESPACE='icebergcatalogdb2';