CREATE ICEBERG TABLE(Iceberg REST 目录)

在当前/指定架构中为 Iceberg REST 目录创建或替换 Apache Iceberg™ 表

在以下场景中使用此命令:

备注

在创建表之前,必须创建存储 Iceberg 元数据和数据文件的 外部卷。有关说明,请参阅 配置外部卷

您还需要为表配置目录集成。有关更多信息,请参阅 为|iceberg-tm| REST 目录配置目录集成为 Snowflake Open Catalog 配置目录集成

另请参阅:

ALTER ICEBERG TABLEDROP ICEBERG TABLESHOW ICEBERG TABLESDESCRIBE ICEBERG TABLEUNDROP ICEBERG TABLE

语法

CREATE [ OR REPLACE ] ICEBERG TABLE [ IF NOT EXISTS ] <table_name>
  [ EXTERNAL_VOLUME = '<external_volume_name>' ]
  [ CATALOG = '<catalog_integration_name>' ]
  CATALOG_TABLE_NAME = '<rest_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>' , ... ] ) ]
Copy

必填参数

table_name

指定 Snowflake 中的表的标识符(名称);对于在其中创建表的架构而言,必须是唯一的。

此外,标识符必须以字母字符开头,且不能包含空格或特殊字符,除非整个标识符字符串放在双引号内(例如,"My object")。放在双引号内的标识符也区分大小写。

有关更多信息,请参阅 标识符要求

备注

要检索远程目录中的表或命名空间列表,可以使用以下函数:

CATALOG_TABLE_NAME = 'rest_catalog_table_name'

指定外部目录可识别的表名称。创建表后,此参数无法更改。

备注

请勿使用表名称 (mynamespace.mytable) 指定命名空间。若要为此表指定命名空间,并替换对目录集成设置的默认命名空间,请使用 CATALOG_NAMESPACE 参数。

可选参数

EXTERNAL_VOLUME = 'external_volume_name'

指定外部卷的标识符(名称),Iceberg 表会以 Parquet 格式将自身的元数据文件和数据存储在里面。Iceberg 元数据和清单文件存储表架构、分区、快照和其他元数据。

如果未指定此参数,则 Iceberg 表将默认使用架构、数据库或账户的外部卷。架构优先于数据库,数据库优先于账户。

CATALOG = 'catalog_integration_name'

指定此表的目录集成的标识符(名称)。

如果未指定此参数,则 Iceberg 表将默认使用架构、数据库或账户的目录集成。架构优先于数据库,数据库优先于账户。

CATALOG_NAMESPACE = 'catalog_namespace'

可选择指定 REST 目录源的命名空间(例如,my_database),并替换通过目录集成指定的默认目录命名空间。通过在表级别指定命名空间,您可以使用单个 REST 目录集成,跨不同数据库创建 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'

指定表的注释。

默认:无值

TAG ( tag_name = 'tag_value' [ , tag_name = 'tag_value' , ... ] )

指定 标签 名称和标签字符串值。

标签值始终为字符串,标签值的最大字符数为 256。

有关在语句中指定标签的信息,请参阅 对象和列的标签配额

访问控制要求

用于执行此 SQL 命令的 角色 必须至少具有以下 权限

权限

对象

备注

CREATE ICEBERG TABLE

架构

CREATE EXTERNAL VOLUME

账户

需要创建新的外部卷。

USAGE

外部卷

需要引用现有的外部卷。

CREATE INTEGRATION

账户

需要创建新的目录集成。

USAGE

目录集成

需要引用现有目录集成。

请注意,对架构中的对象进行操作还需要对父数据库和架构具有 USAGE 权限。

有关创建具有指定权限集的自定义角色的说明,请参阅 创建自定义角色

有关对 安全对象 执行 SQL 操作的相应角色和权限授予的一般信息,请参阅 访问控制概述

使用说明

  • 如果您使用双引号标识符创建了外部卷或目录集成,则必须 :emph:` 完全 ` 按照在 CREATE ICEBERG TABLE 语句中创建的标识符(包括双引号)来指定标识符。未包含引号可能会导致 Object does not exist 错误(或类似类型的错误)。

  • 创建表的注意事项:

    • 架构不能包含同名的表和/或视图。创建表时:

      • 如果架构中已存在同名视图,则会返回错误,并且不会创建表。

      • 如果架构中已存在同名的表,则会返回错误,并且不会创建表,除非命令中包含可选的 OR REPLACE 关键字。

    • CREATE OR REPLACE <object> 语句是原子的。也就是说,当对象被替换时,旧对象将被删除,新对象将在单个事务中创建。

      这意味着与 CREATE OR REPLACE ICEBERG TABLE 操作并行的任何查询都使用旧的或新的表版本。

    • 保留关键字 类似,ANSI 保留函数名称(CURRENT_DATECURRENT_TIMESTAMP 等)不能用作列名。

    • 重新创建表(使用可选 OR REPLACE 关键字)会删除其历史记录,这会使表上的任何流都过时。过时的流是不可读的。

  • 关于元数据:

    注意

    客户应确保在使用 Snowflake 服务时,不会将个人数据(用户对象除外)、敏感数据、出口管制数据或其他受监管数据作为元数据输入。有关更多信息,请参阅 Snowflake 中的元数据字段

示例

创建使用远程 Iceberg REST 目录的 Iceberg 表

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

创建 Iceberg 表来查询 Snowflake Open Catalog 中的表

此示例创建了一个 Iceberg 表,可用于 使用 Snowflake 查询 Snowflake Open Catalog 中的表

CREATE ICEBERG TABLE open_catalog_iceberg_table
  EXTERNAL_VOLUME = 'my_external_volume'
  CATALOG = 'open_catalog_int'
  CATALOG_TABLE_NAME = 'my_open_catalog_table';
Copy
语言: 中文