配置外部卷¶
外部卷是一个命名的账户级 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');
在账户、数据库或架构级别设置默认外部卷¶
要将用于 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';
在数据库级别设置外部卷后,可以在该数据库中创建 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/';