配置外部卷¶
外部卷是一个命名的账户级 Snowflake 对象,用于将 Snowflake 连接到 Iceberg 表的外部云存储。外部卷存储您的存储位置的身份和访问管理 (IAM) 实体。Snowflake 使用 IAM 实体安全地连接到存储,以访问表数据、Iceberg 元数据以及存储表架构、分区和其他元数据的清单文件。
单个外部卷可以支持一个或多个 Iceberg 表。
必须先创建外部卷,然后才能在 Snowflake 中创建 Apache Iceberg™ 表。
创建外部卷¶
创建外部卷的步骤取决于云存储提供商。
有关说明,请参阅以下主题:
每个外部卷都与特定 活动存储位置 相关联,单个外部卷可以支持多个 Iceberg 表。但是,所需的外部卷数量取决于您要如何存储、组织和保护表数据。
如果您想将 Snowflake-Iceberg 表的 所有 数据和元数据放在同一存储位置下的子目录中(例如,在同一 S3 桶中),则可以使用单个外部卷。要为 Snowflake 管理的表配置这些目录,请参阅 数据和元数据目录。
或者,您可以创建多个外部卷以不同的方式保护不同的存储位置。例如,您可以创建以下外部卷:
外部管理的 Iceberg 表的只读外部卷。
配置为具有 Snowflake 管理的表具有读写权限的外部卷。
验证外部卷¶
验证外部卷,以检查 Snowflake 是否可以使用您配置的外部卷成功向存储提供商进行身份验证。您可以使用 SQL 或 Snowsight 验证外部卷。
使用 SQL¶
要使用 SQL 验证外部卷,请调用 SYSTEM$VERIFY_EXTERNAL_VOLUME 函数。
指定要验证的外部卷的名称。
SELECT SYSTEM$VERIFY_EXTERNAL_VOLUME('my_s3_external_volume');
使用 Snowsight¶
要使用 Snowsight 验证外部卷,请按照以下步骤操作:
登录 Snowsight。
在导航菜单中,选择 Catalog » External data。
选择 External volumes 选项卡。
选择要验证其连接的外部卷。
选择 ... » Verify connection。
在账户、数据库或架构级别设置默认外部卷¶
您可以 设置现有外部卷 作为默认卷,也可以在创建时 设置新的外部卷 作为默认卷。
将现有外部卷设置为默认卷¶
要将用于 Iceberg 表的现有外部卷设置为默认卷,可以在以下级别设置 EXTERNAL_VOLUME 参数:
- 账户:
账户管理员可以使用 ALTER ACCOUNT 命令设置账户的参数。如果为账户设置了该值,则默认情况下在账户中创建的所有 Iceberg 表都会读取和写入此外部卷。
- 对象:
用户可以执行适当的 CREATE <object> 或 ALTER <object> 命令,以在数据库或架构级别上替换 EXTERNAL_VOLUME 参数值。系统会使用适用范围级别最低的声明:架构 > 数据库 > 账户。
除使用适当的 ALTER <object_type> 命令修改对象所需的最小权限之外,角色还必须拥有外部卷上的 USAGE 权限。
备注
对 EXTERNAL_VOLUME 参数的更改仅适用于更改 之后 创建的表。现有表将继续使用创建时指定的外部卷。
或者,您可以在创建外部卷时,使用 Snowsight 在账户、数据库或架构级别设置默认外部卷。
示例¶
以下语句为名为 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/';
将新的外部卷设置为默认卷¶
要将新的外部卷设置为用于 Iceberg 表的默认卷,则在 Snowsight 中创建外部卷时,使用配置设置中的 Scope 字段在账户、数据库或架构级别将外部卷设置为默认卷。
有关如何在 Snowsight 中创建外部卷的说明,请参阅以下部分:
使用 Snowsight 为外部卷授予 USAGE 权限¶
USAGE 权限授予引用外部卷以及查看外部卷详细信息的能力。有关更多信息,请参阅 外部卷权限。
要使用 Snowsight 向外部卷授予 USAGE 权限,请按照以下步骤操作:
使用 Snowsight 添加存储位置¶
备注
要使用 SQL 将存储位置添加到外部卷,请使用 ALTER EXTERNAL VOLUME 命令的 ADD STORAGE_LOCATION 参数。
要使用 Snowsight 将命名的存储位置添加到外部卷,请按照以下步骤操作:
登录 Snowsight。
切换到对您要向其添加存储位置的外部卷具有 OWNERSHIP 权限的角色。
有关说明,请参阅 切换您的主要角色。
在导航菜单中,选择 Catalog » External data。
选择 External volumes 选项卡。
选择要添加存储位置的外部卷。
选择 ... » Add storage location
选择云存储提供商,并指定要添加的存储位置的配置:
选择 Amazon S3 选项卡。
指定要添加的存储位置的配置:
字段
描述
Location name
输入其他存储位置的名称。
Region type
指定存储数据文件的云存储提供商。
Standard (default):选择使用 时默认使用的角色和仓库。中国境外公共 AWS 区域的 S3 存储。
Government (GovCloud):选择使用 时默认使用的角色和仓库。AWS 政府区域 中的 S3 存储。
S3 role ARN
为 ARN Identity and Access Management (AWS) 角色指定区分大小写的 Amazon 资源名称 (IAM),该角色授予对包含数据文件的 S3 桶的权限。
您在 创建 IAM 角色 时记录了此值。
Encryption (optional)
指定使用的加密类型。可能的值:
None (default):选择使用 时默认使用的角色和仓库。无加密。
SSE-S3:选择使用 时默认使用的角色和仓库。使用 S3 托管式加密密钥进行服务器端加密。有关更多信息,请参阅 ` 使用具有 Amazon S3 托管式加密密钥的服务器端加密 (SSE-S3) <https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingServerSideEncryption.html (https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingServerSideEncryption.html)>`_。
SSE-KMS (enter key):选择使用 时默认使用的角色和仓库。使用 KMS 中存储的密钥进行服务器端加密。有关更多信息,请参阅 ` 使用 AWS Key Management Service 进行服务器端加密 (SSE-KMS) <https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingKMSEncryption.html (https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingKMSEncryption.html)>`_。
Connectivity
指定是否使用出站专用连接来加强安全态势。有关使用此参数的信息,请参阅 Amazon Web Services 外部存储卷的专用连接。可能的值:
Public (default):选择使用 时默认使用的角色和仓库。使用公共互联网。
Private (AWS PrivateLink):选择使用 时默认使用的角色和仓库。使用出站专用连接。
Storage base URL
指定其他存储位置的基本 URL。
选择 Microsoft Azure 选项卡。
指定要添加的存储位置的配置:
字段
描述
Location name
输入其他存储位置的名称。
Storage base URL
指定其他存储位置的基本 URL。
Azure tenant ID
指定 Azure 租户 ID。
要查找 Azure 租户 ID,请参阅 Microsoft Entra 文档中的 `如何查找您的 Microsoft Entra 租户 ID<https://learn.microsoft.com/en-us/entra/fundamentals/how-to-find-tenant>`_。
Use PrivateLink endpoint
指定是否使用出站专用连接来加强安全态势。有关使用出站专用连接的信息,请参阅 Microsoft Azure 外部存储卷的专用连接。
选择 Google Cloud 选项卡。
指定要添加的存储位置的配置:
字段
描述
Location name
输入其他存储位置的名称。
Storage base URL
指定其他存储位置的基本 URL。
Encryption (optional)
指定使用的加密类型。可能的值:
None (default):选择使用 时默认使用的角色和仓库。无加密。
SSE-KMS (enter key):选择使用 时默认使用的角色和仓库。使用 KMS 中存储的密钥进行服务器端加密。有关更多信息,请参阅 ` 客户管理的加密密钥 <https://cloud.google.com/storage/docs/encryption/customer-managed-keys (https://cloud.google.com/storage/docs/encryption/customer-managed-keys)>`_。
选择 S3 Compatible 选项卡。
指定要添加的存储位置的配置:
字段
描述
Location name
输入其他存储位置的名称。
Storage base URL
指定云存储位置的基本 URL。
AWS key ID
指定用于连接和访问 S3 兼容存储位置的 AWS 键 ID。
AWS secret key
指定用于连接和访问 S3 兼容存储位置的 AWS 密钥键。
Storage endpoint
指定指向兼容 S3 的 API 端点的完全限定域名。
备注
存储端点不应包括桶名;例如,指定
example.com,而不是my_bucket.example.com。
选择 Add storage location。