配置外部卷

外部卷是一个命名的账户级 Snowflake 对象,用于将 Snowflake 连接到 Iceberg 表的外部云存储。外部卷存储您的存储位置的身份和访问管理 (IAM) 实体。Snowflake 使用 IAM 实体安全地连接到存储,以访问表数据、Iceberg 元数据以及存储表架构、分区和其他元数据的清单文件。

单个外部卷可以支持一个或多个 Iceberg 表。

必须先创建外部卷,然后才能在 Snowflake 中创建 Apache Iceberg™ 表。

创建外部卷

创建外部卷的步骤取决于云存储提供商。

有关说明,请参阅以下主题:

每个外部卷都与特定 活动存储位置 相关联,单个外部卷可以支持多个 Iceberg 表。但是,所需的外部卷数量取决于您要如何存储、组织和保护表数据。

如果您想将 Snowflake-Iceberg 表的 所有 数据和元数据放在同一存储位置下的子目录中(例如,在同一 S3 桶中),则可以使用单个外部卷。要为 Snowflake 管理的表配置这些目录,请参阅 数据和元数据目录

或者,您可以创建多个外部卷以不同的方式保护不同的存储位置。例如,您可以创建以下外部卷:

  • 外部管理的 Iceberg 表的只读外部卷。

  • 配置为具有 Snowflake 管理的表具有读写权限的外部卷。

验证外部卷

要检查 Snowflake 是否可以使用您配置的外部卷成功向存储提供商进行身份验证,请调用 SYSTEM$VERIFY_EXTERNAL_VOLUME 函数。

指定要验证的外部卷的名称。

SELECT SYSTEM$VERIFY_EXTERNAL_VOLUME('my_s3_external_volume');
Copy

在账户、数据库或架构级别设置默认外部卷

要将用于 Iceberg 表的现有外部卷设置为默认卷,可以在以下级别设置 EXTERNAL_VOLUME 参数:

账户:

账户管理员可以使用 ALTER ACCOUNT 命令设置账户的参数。如果为账户设置了该值,则默认情况下在账户中创建的所有 Iceberg 表都会读取和写入此外部卷。

对象:

用户可以执行适当的 CREATE <object>ALTER * <object>* 命令,以在数据库或架构级别上替换 EXTERNAL_VOLUME 参数值。系统会使用适用范围级别最低的声明:架构 > 数据库 > 账户。

除使用适当的 ALTER <object_type> 命令修改对象所需的最小权限之外,角色还必须拥有外部卷上的 USAGE 权限。

备注

对 EXTERNAL_VOLUME 参数的更改仅适用于更改 之后 创建的表。现有表将继续使用创建时指定的外部卷。

示例

以下语句为名为 my_database_1 的数据库设置外部卷 (my_s3_vol):

ALTER DATABASE my_database_1
  SET EXTERNAL_VOLUME = 'my_s3_vol';
Copy

在数据库级别设置外部卷后,可以在该数据库中创建 Iceberg 表,而无需指定外部卷。以下语句会在 my_database_1 中创建 Iceberg 表,该表使用 Snowflake 作为目录,并使用为数据库设置的默认外部卷 (my_s3_vol)。

CREATE ICEBERG TABLE iceberg_reviews_table (
  id STRING,
  product_name STRING,
  product_id STRING,
  reviewer_name STRING,
  review_date DATE,
  review STRING
)
CATALOG = 'SNOWFLAKE'
BASE_LOCATION = 'my/product_reviews/';
Copy
语言: 中文