配置外部卷¶
外部卷是一个命名的账户级 Snowflake 对象,用于将 Snowflake 连接到 Iceberg 表的外部云存储。外部卷存储您的存储位置的身份和访问管理 (IAM) 实体。Snowflake 使用 IAM 实体安全地连接到存储,以访问表数据、Iceberg 元数据以及存储表架构、分区和其他元数据的清单文件。
单个外部卷可以支持一个或多个 Iceberg 表。
必须先创建外部卷,然后才能在 Snowflake 中创建 Apache Iceberg™ 表。
创建外部卷¶
创建外部卷的步骤取决于云存储提供商。
有关说明,请参阅以下主题:
每个外部卷都与特定 活动存储位置 相关联,单个外部卷可以支持多个 Iceberg 表。但是,所需的外部卷数量取决于您要如何存储、组织和保护表数据。
如果您想将 Snowflake-Iceberg 表的 所有 数据和元数据放在同一存储位置下的子目录中(例如,在同一 S3 桶中),则可以使用单个外部卷。要为 Snowflake 管理的表配置这些目录,请参阅 数据和元数据目录。
或者,您可以创建多个外部卷以不同的方式保护不同的存储位置。例如,您可以创建以下外部卷:
外部管理的 Iceberg 表的只读外部卷。
配置为具有 Snowflake 管理的表具有读写权限的外部卷。
验证外部卷¶
Verify an external volume to check that Snowflake can successfully authenticate to your storage provider using an external volume that you've configured. You can verify an external volume by using SQL or Snowsight.
使用 SQL¶
To verify an external volume by using SQL, call the SYSTEM$VERIFY_EXTERNAL_VOLUME function.
指定要验证的外部卷的名称。
SELECT SYSTEM$VERIFY_EXTERNAL_VOLUME('my_s3_external_volume');
使用 Snowsight¶
要使用 Snowsight 验证外部卷,请按照以下步骤操作:
登录 Snowsight。
在导航菜单中,选择 Catalog » External data。
Select the External volumes tab.
Select the external volume whose connection you want to verify.
选择 ... » Verify connection。
在账户、数据库或架构级别设置默认外部卷¶
您可以 设置现有外部卷 作为默认卷,也可以在创建时 设置新的外部卷 作为默认卷。
将现有外部卷设置为默认卷¶
要将用于 Iceberg 表的现有外部卷设置为默认卷,可以在以下级别设置 EXTERNAL_VOLUME 参数:
- 账户:
账户管理员可以使用 ALTER ACCOUNT 命令设置账户的参数。如果为账户设置了该值,则默认情况下在账户中创建的所有 Iceberg 表都会读取和写入此外部卷。
- 对象:
用户可以执行适当的 CREATE <object> 或 ALTER <object> 命令,以在数据库或架构级别上替换 EXTERNAL_VOLUME 参数值。系统会使用适用范围级别最低的声明:架构 > 数据库 > 账户。
除使用适当的 ALTER <object_type> 命令修改对象所需的最小权限之外,角色还必须拥有外部卷上的 USAGE 权限。
备注
对 EXTERNAL_VOLUME 参数的更改仅适用于更改 之后 创建的表。现有表将继续使用创建时指定的外部卷。
Alternatively, you can set a default external volume at the account, database, or schema level when you create the external volume by using 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/';
Set a new external volume as the default¶
要将新的外部卷设置为用于 Iceberg 表的默认卷,则在 Snowsight 中创建外部卷时,使用配置设置中的 Scope 字段在账户、数据库或架构级别将外部卷设置为默认卷。
有关如何在 Snowsight 中创建外部卷的说明,请参阅以下部分:
使用 Snowsight 为外部卷授予 USAGE 权限¶
USAGE 权限授予引用外部卷以及查看外部卷详细信息的能力。有关更多信息,请参阅 外部卷权限。
要使用 Snowsight 向外部卷授予 USAGE 权限,请按照以下步骤操作:
登录 Snowsight。
切换到对您要向其授予 USAGE 权限的外部卷具有 OWNERSHIP 权限的角色。
在导航菜单中,选择 Catalog » External data。
Select the External volumes tab.
Select the external volume that you want to grant USAGE privileges on.
选择 + Privilege。
从 Roles 字段中,选择要向其授予外部卷的 USAGE 权限的角色。
从 Privileges 字段中,选择 USAGE。
选择 Grant privileges。
使用 Snowsight 添加存储位置¶
备注
要使用 SQL 将存储位置添加到外部卷,请使用 ALTER EXTERNAL VOLUME 命令的 ADD STORAGE_LOCATION 参数。
要使用 Snowsight 将命名的存储位置添加到外部卷,请按照以下步骤操作:
登录 Snowsight。
切换到对您要向其添加存储位置的外部卷具有 OWNERSHIP 权限的角色。
有关说明,请参阅 切换您的主要角色。
在导航菜单中,选择 Catalog » External data。
Select the External volumes tab.
Select the external volume that you want to add a storage location to.
选择 ... » 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
指定是否使用出站专用连接来加强安全态势。有关使用此参数的信息,请参阅 Private connectivity to external volumes for 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。