用于外部暂存区和 Snowpipe 自动化的 Microsoft Azure 专用连接

本主题提供了配置详细信息来为以下 Snowflake 功能设置 出站专用连接

  • 使用外部暂存区从 Microsoft Azure 批量加载。

  • 为 Microsoft Azure Blob 存储自动化 Snowpipe。

为专用连接配置批量加载和 Snowpipe 自动化与为公共网络流量配置批量加载和 Snowpipe 自动化之间的区别包括以下内容:

  • 为所需的存储集成、暂存或通知集成设置 USE_PRIVATELINK_ENDPOINT = TRUE

  • 为外部暂存区(批量加载和 Snowpipe 自动化)创建专用连接端点。

  • 为通知集成(仅限 Snowpipe 自动化)创建专用连接端点。

出站专用连接成本

您为每个专用连接端点以及处理的总数据量付费。有关这些项目的定价,请参阅 Snowflake 服务使用量表

在 ACCOUNT_USAGE 和 ORGANIZATION_USAGE 架构中查询计费视图时,可以通过筛选以下服务类型来查看这些项目的成本:

  • OUTBOUND_PRIVATELINK_ENDPOINT

  • OUTBOUND_PRIVATELINK_DATA_PROCESSED

例如,您可以查询 USAGE_IN_CURRENCY_DAILY 视图并筛选这些服务类型。

注意事项

备注

Microsoft Fabric OneLake 存储不支持私有连接。

您可以为同一个存储账户配置出站公共连接和出站专用连接。如果要这样做,请为出站公共连接创建专用存储集成,并指定 USE_PRIVATELINK_ENDPOINT = FALSE

专用连接属性

存储集成或外部暂存区的 USE_PRIVATELINK_ENDPOINT 属性决定了是通过专用连接还是通过穿过公共网络来访问存储集成或外部暂存区。要使用专用连接,请设置 USE_PRIVATELINK_ENDPOINT = TRUE

引用存储集成的暂存区,用于指定 USE_PRIVATELINK_ENDPOINT = TRUE 继承专用端点配置。因此,如果您使用的存储集成已配置为使用专用连接,则无需在暂存区中指定 USE_PRIVATELINK_ENDPOINT 属性,并且您无法修改暂存区来设置 USE_PRIVATELINK_ENDPOINT 属性。

配置外部暂存区访问

以下是使用出站专用连接与存储集成将数据卸载到 Microsoft Azure 上的外部暂存区所独有的步骤。如果您使用的是暂存区的 CREDENTIALS 属性(而不是引用存储集成),则需要修改流。

批量加载和 Snowpipe 自动化都需要以下步骤。

  1. 在 Snowflake 中,调用 SYSTEM$PROVISION_PRIVATELINK_ENDPOINT 系统函数以在 Snowflake VNet 中配置专用连接端点,使 Snowflake 能够使用专用连接连接到外部 Blob 存储账户:

    USE ROLE ACCOUNTADMIN;
    
    SELECT SYSTEM$PROVISION_PRIVATELINK_ENDPOINT(
      '/subscriptions/cc2909f2-ed22-4c89-8e5d-bdc40e5eac26/resourceGroups/mystorage/providers/Microsoft.Storage/storageAccounts/storagedemo',
      'mystorageaccount.blob.core.windows.net',
      'blob'
    );
    

    此函数将专用端点与主机名绑定,从而使存储集成可以使用专用端点连接到存储位置。

  2. 在 Azure 门户中,作为 Microsoft Azure Blob 存储资源的所有者,批准专用端点。有关详细信息,请参阅 审批流程 (https://learn.microsoft.com/en-us/azure/private-link/manage-private-endpoint?tabs=manage-private-link-powershell#private-endpoint-connections)。

  3. 在 Snowflake 中,调用 SYSTEM$GET_PRIVATELINK_ENDPOINTS_INFO 函数。

    When the output of the function includes "status": "APPROVED", your connection from Snowflake to your storage account will be able to use private connectivity (after the other necessary Snowflake objects are enabled for outbound private connectivity).

    在等待 "APPROVED" 状态时,您可以继续执行后续步骤。

  4. 创建存储集成并确保指定 USE_PRIVATELINK_ENDPOINT 属性:

    CREATE OR REPLACE STORAGE INTEGRATION outbound_private_link_int
      TYPE = EXTERNAL_STAGE
      STORAGE_PROVIDER = AZURE
      AZURE_TENANT_ID = 'cc2909f2-ed22-4c89-8e5d-bdc40e5eac26'
      STORAGE_ALLOWED_LOCATIONS = ('azure://mystorageaccount.blob.core.windows.net/mycontainer/snowflake_privatelink_external_stage_test/')
      USE_PRIVATELINK_ENDPOINT = TRUE
      ENABLED = TRUE;
    

    备注

    创建存储集成后,必须授予 Snowflake 访问您的存储位置的权限。有关更多信息,请参阅 配置 Snowflake 存储集成

  5. 创建引用存储集成的外部暂存区:

    CREATE OR REPLACE STAGE my_storage_private_stage
      URL = 'azure://mystorageaccount.blob.core.windows.net/mycontainer/snowflake_privatelink_external_stage_test/'
      STORAGE_INTEGRATION = outbound_private_link_int;
    
  6. 专用端点具有 "APPROVED" 状态后,测试将数据从 Snowflake 卸载到外部暂存区:

    COPY INTO @my_storage_private_stage
      FROM mytable
      FILE_FORMAT = (FORMAT_NAME = my_csv_format);
    
  7. 查看 Microsoft Azure 暂存区中的结果。

通知集成的语法更新

为 Microsoft Azure Blob 存储自动化 Snowpipe 需要您创建通知集成。以下语法更新允许您为专用连接配置通知集成。

CREATE [ OR REPLACE ] NOTIFICATION INTEGRATION [ IF NOT EXISTS ] <name>
  ...
  USE_PRIVATELINK_ENDPOINT = { TRUE | FALSE }

配置 Snowpipe 自动化

本节修改了 为 Microsoft Azure Blob 存储自动化 Snowpipe 中所述的过程,以重点介绍如何通过专用连接实现 Snowpipe 自动化。唯一的区别是配置专用连接端点和配置存储集成和通知集成的 USE_PRIVATELINK_ENDPOINT 属性。

  1. 创建存储集成和暂存区,以及其专用连接端点,如 本文档前面 所述。

  2. 授予 Snowflake 对存储位置的访问权限,如“为 Microsoft Azure Blob 存储自动化 Snowpipe”主题中所述。

  3. 配置事件网格订阅,如“为 Microsoft Azure Blob 存储自动化 Snowpipe”主题中所述。

  4. 在 Snowflake 中,调用 SYSTEM$PROVISION_PRIVATELINK_ENDPOINT 系统函数以在 Snowflake VNet 中配置专用端点,使 Snowflake 能够使用专用连接连接到 Azure 队列:

    USE ROLE ACCOUNTADMIN;
    
    SELECT SYSTEM$PROVISION_PRIVATELINK_ENDPOINT(
      '/subscriptions/cc2909f2-ed22-4c89-8e5d-bdc40e5eac26/resourceGroups/mystorage/providers/Microsoft.Storage/storageAccounts/mystorageaccount',
        'mystorageaccount.queue.core.windows.net',
        'queue'
    );
    
  5. 在 Azure 门户中,作为 Microsoft Azure 存储资源的所有者,批准专用端点。有关信息,请参阅 审批流程 (https://learn.microsoft.com/en-us/azure/private-link/manage-private-endpoint?tabs=manage-private-link-powershell#private-endpoint-connections)。

  6. 在 Snowflake 中,调用 SYSTEM$GET_PRIVATELINK_ENDPOINTS_INFO 函数。

    When the output of the function includes "status": "APPROVED", your connection from Snowflake to your storage account will be able to use private connectivity (after the other necessary Snowflake objects are enabled for outbound private connectivity).

    重要

    您必须等到状态为 APPROVED 后才能继续下一步操作。

  7. 检索存储队列 URL 和租户 ID,如“为 Microsoft Azure Blob 存储自动化 Snowpipe”主题中所述。

  8. 创建通知集成并确保指定 USE_PRIVATELINK_ENDPOINT 属性:

    CREATE OR REPLACE NOTIFICATION INTEGRATION ni_pl
      ENABLED = TRUE
      TYPE = QUEUE
      NOTIFICATION_PROVIDER = AZURE_STORAGE_QUEUE
      AZURE_STORAGE_QUEUE_PRIMARY_URI = "https://storageaccount.queue.core.windows.net/queuename"
      AZURE_TENANT_ID = '00000000-0000-0000-0000-000000000000'
      USE_PRIVATELINK_ENDPOINT = TRUE;
    
  9. 授予 Snowflake 对存储队列的访问权限,如“为 Microsoft Azure Blob 存储自动化 Snowpipe”主题中所述。

  10. 创建启用自动引入的管道,如“为 Microsoft Azure Blob 存储自动化 Snowpipe”主题中所述。

禁用专用连接

禁用专用连接的过程各不相同,具体取决于是为存储集成、外部暂存区还是为通知集成配置了端点。

存储集成/外部暂存区

如果不再需要外部暂存区的专用连接端点,请取消设置暂存区或存储集成的 USE_PRIVATELINK_ENDPOINT 属性,然后调用 SYSTEM$DEPROVISION_PRIVATELINK_ENDPOINT 系统函数。

通知集成

与存储集成和外部暂存区不同,您无法取消设置通知集成的 USE_PRIVATELINK_ENDPOINT 属性。如果不再需要专用连接,则您需要删除通知集成,然后创建一个新的通知集成。重新创建通知集成后,您可以调用 SYSTEM$DEPROVISION_PRIVATELINK_ENDPOINT 系统函数来取消配置端点。