管理 Snowflake Open Catalog 的专用连接端点:Azure

要为出站网络流量设置出站专用连接,其中目录的数据存储在 Azure 云存储中,请按照以下步骤操作。

先决条件

  • Open Catalog 账户和外部云存储必须都托管在 Azure 上。

  • 您需要权限才能为 Azure Storage 账户设置防火墙规则,以允许通过特定的专用连接端点路由的请求。

  • 第三方查询引擎或 Snowflake 引擎必须能够通过 Azure 专用链接访问 Azure Storage。以下选项可用于授予此访问权限:

    • 使用 Azure Storage 的专用端点。有关说明,请参阅 Azure 文档中的 使用 Azure Storage 的专用端点 (https://learn.microsoft.com/en-us/azure/storage/common/storage-private-endpoints)。

    • 使用 Azure 服务端点。

    • 更改防火墙设置,将运行查询引擎的计算机的 IP 地址列入白名单。

    否则,当您启用出站专用连接时,引擎无法读取桶中存储的表或写入到桶中存储的表,并且 Open Catalog 无法读取元数据或将元数据写入到桶中。

第 1 步:为 Open Catalog 创建 Snowflake CLI 连接

要在 Open Catalog 中设置专用连接,您需要为 Open Catalog 建立 Snowflake CLI 连接。请按照下列步骤创建此连接。如果尚未安装 Snowflake CLI,请参阅 安装 Snowflake CLI

准备工作

要为 Open Catalog 创建 Snowflake CLI 连接,您需要完整的 Open Catalog 账户标识符。账户标识符包括您的 Snowflake 组织名称和您的 Open Catalog 账户名称;例如,<orgname>.<my-snowflake-open-catalog-account-name>

  • 要查找您的 Snowflake 组织名称 (<orgname>),请参阅 查找账户的组织和账户名称 <https://docs.snowflake.com/en/user-guide/admin-account-identifier.html#label-account-name-find>_。

  • 要查找 Snowflake Open Catalog 账户名称 (<my-snowflake-open-catalog-account-name>),请参阅 查找 Snowflake Open Catalog 账户的账户名称 <https://other-docs.snowflake.com/en/opencatalog/find-account-name>_。

重要

要创建此连接,您必须是具有服务管理员权限的 Open Catalog 用户。有关服务管理员权限的信息,请参阅 服务管理员角色

为 Snowflake Open Catalog 添加 Snowflake CLI 连接

为要启用专用连接的 Snowflake Open Catalog 账户添加连接。

  • 添加一个连接 <https://docs.snowflake.com/en/developer-guide/snowflake-cli/connecting/configure-connections#add-a-connection>_,使用如下值。对于所有其他参数,按 Enter 键跳过指定参数值。

    连接配置参数

    Name for this connection

    指定连接名称,例如 myopencatalogconnection

    Account name

    按如下格式指定您的 Snowflake 组织名称,后接您的 Open Catalog 账户名称:

    <orgname>-<my-snowflake-open-catalog-account-name>

    例如 ABCDEFG-MYACCOUNT1

    要查找这些名称,请参阅 准备工作_。

    Username

    指定您的 Open Catalog 用户名;例如,jsmith

    Password [optional]

    为 Open Catalog 创建连接时,该参数 不是 可选参数。

    输入您的 Open Catalog 密码;例如,MyPassword123456789

    Role for the connection [optional]

    为 Open Catalog 创建连接时,该参数 不是 可选参数。

    您必须输入 POLARIS_ACCOUNT_ADMIN

测试 Snowflake CLI 连接

  • 要测试 CLI 连接,请按照本例测试 myopencatalogconnection 的连接:

    snow connection test -c myopencatalogconnection
    
    Copy

    响应应该如下所示:

    +------------------------------------------------------------------------------+
    | key              | value                                                     |
    |----------------------------+-------------------------------------------------|
    | Connection name  | myopencatalogconnection                                   |
    | Status           | OK                                                        |
    | Host             | ABCDEFG-MYACCOUNT1.snowflakecomputing.cn                 |
    | Account          | ABCDEFG-MYACCOUNT1                                        |
    | User             | jsmith                                                    |
    | Role             | POLARIS_ACCOUNT_ADMIN                                     |
    | Database         | not set                                                   |
    | Warehouse        | not set                                                   |
    +------------------------------------------------------------------------------+
    
    Copy

将用于 Snowflake Open Catalog 的 Snowflake CLI 连接设置为默认连接

为确保您使用的连接始终具有所需的 POLARIS_ACCOUNT_ADMIN 角色,您可以将为 Open Catalog 创建的 Snowflake CLI 连接设置为默认连接。有关默认连接的更多信息,请参阅 设置默认连接 <https://docs.snowflake.com/en/developer-guide/snowflake-cli/connecting/configure-connections#set-the-default-connection>_。

  1. 本例将 myopencatalogconnection 连接设为默认连接,请按照本例操作:

    snow connection set-default myopencatalogconnection
    
    Copy
  2. 要确认所用的用户和角色是否正确,请运行以下命令:

    snow sql -q "Select current_user(); select current_role();"
    
    Copy

    响应将返回您的 Open Catalog 用户名,CURRENT ROLE 应为 POLARIS_ACCOUNT_ADMIN。

    +----------------+
    | CURRENT_USER() |
    |----------------|
    | JSMITH        |
    +----------------+
    select current_role();
    +-----------------------+
    | CURRENT_ROLE()        |
    |-----------------------|
    | POLARIS_ACCOUNT_ADMIN |
    +-----------------------+
    
    Copy

第 2 步:为存储账户配置专用连接端点

您必须为要在 Open Catalog 账户中使用的每个存储账户配置专用连接端点。

备注

如果您要为 Data Lake Storage 存储账户(不是 Blob 存储账户)配置专用连接端点,则必须配置两个专用连接端点。其中一个端点用于 DFS 端点,另一个用于 blob 端点。有关示例,请参阅 为 Data Lake Storage 存储账户配置专用连接端点

使用 Open Catalog 的 Snowflake CLI 连接来调用以下系统函数:

  1. 要为存储账户配置专用连接端点,请调用 SYSTEM$PROVISION_PRIVATELINK_ENDPOINT 系统函数。

  2. 要确认专用连接端点已准备就绪,请调用 SYSTEM$GET_PRIVATELINK_ENDPOINTS_INFO 系统函数。

有关说明,请参阅 Snowflake 文档中的 管理专用连接端点:Azure。请记住,这些说明涉及的是 Snowflake 账户,而不是 Snowflake Open Catalog 账户,但 Open Catalog 中的流程是相同的。

重要

  • 您必须使用 POLARIS_ACCOUNT_ADMIN 角色而不是说明中提及的 ACCOUNTADMIN 角色。

  • 如果您设置的默认 Snowflake CLI 连接没有被授予 POLARIS_ACCOUNT_ADMIN 角色,则必须在命令中包含以下语句:USE ROLE POLARIS_ACCOUNT_ADMIN;

  • 使用命令时,您必须在 $ 的前面插入正斜杠才能对其进行转义。例如 snow sql -q "SELECT SYSTEM\$GET_PRIVATELINK_CONFIG();"

示例:为 Data Lake Storage 存储账户配置专用连接端点

如果使用 Data Lake Storage 存储账户来存储 Iceberg 表,则必须为该账户配置两个专用连接端点。有关更多信息,请参阅 Azure 文档中的 创建专用端点 (https://learn.microsoft.com/en-us/azure/storage/common/storage-private-endpoints#creating-a-private-endpoint)。

例如:

为 blob 端点配置专用端点

SELECT SYSTEM$PROVISION_PRIVATELINK_ENDPOINT(
'/subscriptions/mysubscriptionid/resourceGroups/mystorage/providers/Microsoft.Storage/storageAccounts/storagedemo',
  'storagedemo.blob.core.windows.net',
  'blob'
);
Copy

为 DFS 端点配置专用端点

SELECT SYSTEM$PROVISION_PRIVATELINK_ENDPOINT(
'/subscriptions/mysubscriptionid/resourceGroups/mystorage/providers/Microsoft.Storage/storageAccounts/storagedemo',
  'storagedemo.dfs.core.windows.net',
  'dfs'
);
Copy

第 3 步:配置对存储账户的公共网络访问权限

在 Azure 中,导航到存储账户中的网络设置并配置对存储账户的公共网络访问权限。您可以将此访问权限配置为以下任一项:

  • 禁用所有公共网络访问权限

  • 禁用所有公共网络访问权限(您指定的虚拟网络和 IP 地址除外)

有关更多信息,请参阅 Azure 文档中的 配置 Azure Storage 防火墙和虚拟网络 (https://learn.microsoft.com/en-us/azure/storage/common/storage-network-security?tabs=azure-portal)。

第 4 步:为目录启用专用连接

在此步骤中,您可以为 Open Catalog 账户中的目录启用专用连接。您可以为新目录或现有目录启用专用连接:

为新目录启用专用连接

按照 使用 Azure Storage 创建目录 中的说明进行操作。 确保目录的 Private Link 开关处于 Enabled 状态。

为现有目录启用专用连接

  1. 登录 Open Catalog。

  2. 在导航菜单中,选择 Catalogs

  3. 在目录列表中,选择您要启用专用连接的目录。

  4. 在“Catalog Details”选项卡上,将 PrivateLink 开关设置为 Enabled

第 5 步:批准与存储账户的专用端点连接

要批准连接,必须先在目录中创建或加载表。执行其中一项操作会在 Azure 中生成专用端点连接批准请求。

  1. 使用查询引擎执行以下任一操作:

    • 如果目录中没有存储任何表,要在 Open Catalog 账户中创建表,请使用查询引擎并将数据插入其中。

    • 如果目录中存储了一个表,请尝试加载该表。

    备注

    如果无法向表中插入数据,则可能没有为查询引擎配置 Azure 专用链接;如果是这样,则查询引擎未通过 Azure 专用链接连接到该目录。要解决此问题,请为查询引擎配置 Azure 专用链接。有关更多信息,请参阅 Azure 文档中的 使用 Azure Storage 的专用端点 (https://learn.microsoft.com/en-us/azure/storage/common/storage-private-endpoints) 和 教程:使用 Azure Private Endpoint 连接到存储账户 (https://learn.microsoft.com/en-us/azure/private-link/tutorial-private-endpoint-storage-portal?tabs=dynamic-ip)。

  2. 在 Azure 中,按照以下步骤操作:

    1. 导航到存储账户的网络设置。

    2. 批准专用端点连接的连接请求。如果您创建了表,则会在您批准请求时在 Azure Storage 账户中创建该表。

故障排除

本部分提供了网络流量的出站专用连接问题的故障排除。

无法在 Open Catalog 中查看表的架构

症状

在 Open Catalog 中,您在目录(例如,catalog1)中选择了一个表,但收到以下错误消息:“No permissions to access this resource”。

原因

在 Azure 中,为了通过 VPC 端点路由网络流量,您成功更新了存储账户的网络设置。但是,在 Open Catalog 中,您尚未为此目录启用专用连接,因此 Open Catalog 无法访问桶。

解决方案

为目录(例如,catalog1)启用专用连接。有关详细信息,请参阅 为目录启用专用连接

在查询引擎中收到“Failed to get subscoped credentials”错误消息

症状

您尝试使用查询引擎读取数据或向表中写入数据,但收到以下错误消息:“Failed to get subscoped credentials”。

原因

您锁定了存储账户,但尚未在 Open Catalog 账户中配置专用连接端点或启用专用连接。因此,Open Catalog 无法生成次级作用域凭据并将其返回到查询引擎,导致查询引擎无法访问存储。

解决方案

请执行以下步骤:

语言: 中文