Snowflake

Snowflake 连接器允许在虚拟表中构建画布应用和图面 Snowflake 数据,同时启用与传统解决方案相比更快的数据处理和分析。

此连接器在以下产品和区域中可用:

服务 Class 区域
Copilot Studio 高级 除以下各项外的所有 Power Automate 区域
     - 美国政府 (GCC)
     - 美国政府 (GCC High)
     - 由世纪互联运营的中国云
     - 美国国防部(DoD)
逻辑应用程序 标准 除以下各项外的所有 逻辑应用区域
     - Azure 政府区域
     - Azure 中国区域
     - 美国国防部(DoD)
Power Apps 高级 除以下各项外的所有 Power Apps 区域
     - 美国政府 (GCC)
     - 美国政府 (GCC High)
     - 由世纪互联运营的中国云
     - 美国国防部(DoD)
Power Automate 高级 除以下各项外的所有 Power Automate 区域
     - 美国政府 (GCC)
     - 美国政府 (GCC High)
     - 由世纪互联运营的中国云
     - 美国国防部(DoD)
联系人​​
Name Snowflake 支持
URL https://www.snowflake.com/support
Email support@snowflake.com
连接器元数据
发布者 Snowflake
网站 https://www.snowflake.com
隐私策略 https://www.snowflake.com/privacy-policy
类别 数据;营销

连接器深入

本文介绍 Snowflake 连接器的功能和作。

Power Automate 支持的功能

  • 用户可以创建流并添加作,以执行并使用 Snowflake 连接获取自定义 SQL 语句的结果。

Power Apps 支持的功能

逻辑应用支持的功能

  • 用户可以创建流并添加作,以执行并使用 Snowflake 连接获取自定义 SQL 语句的结果。

虚拟网络支持

借助对 Power Platform 的 Azure 虚拟网络支持,用户可以将 Power Platform 与其虚拟网络中的资源集成,而无需通过公共 Internet 公开它们。 若要连接到虚拟网络,请确保遵循下面提到的这两个步骤。

  1. 了解如何设置 Azure 专用链接和 Snowflake
  2. 了解如何为 Power Platform 设置虚拟网络支持

若要详细了解虚拟网络,请查看 虚拟网络支持概述

先决条件

  • 用户必须具有Microsoft外部授权的 Entra ID。 PowerApps 的授权流利用服务主体,Power Automate 将同时支持 Service-Principal 流和代表用户流。
  • 用户必须拥有高级 Power Apps 许可证。
  • 用户必须具有 Snowflake 帐户。

有关使用 Snowflake 连接器的配置必须记住的一些事项

  1. 授权服务器可以代表用户授予 OAuth 客户端访问令牌(称为 DELEGATED BASED AUTH)。
  2. 授权服务器可以向 OAuth 客户端授予 OAuth 客户端本身的访问令牌,称为 SP BASED AUTH
  3. 对于 Oauth 客户端,请确保添加基于委派 AUTH的重定向 URI(基于 Web)。
    重定向 URI - https://global.consent.azure-apim.net/redirect/snowflakev2重定向 URI
  4. 必须创建与访问群体的安全集成。
  5. 对于基于委托的身份验证, external_oauth_token_user_mapping_claim = 'upn'
  6. 对于基于 sp 的身份验证, external_oauth_token_user_mapping_claim = 'sub'
  7. 创建安全集成时,描述创建的集成,并检查提供给 Snowflake 用户的角色是否位于阻止列表中。 如果在阻止列表中,则更改或删除阻止列表中用户的角色。
    阻止的列表
  8. 确保在 login_name Snowflake 帐户中正确设置和角色。 这可以通过管理员选项卡 > 用户和角色 > 进行检查,选择用户并编辑用户详细信息。
    用户详细信息

配置步骤

答: 在 Microsoft Entra ID 中配置 OAuth 资源

  1. 导航到 Microsoft Azure 门户 并进行身份验证。
  2. 导航到Microsoft Entra ID。
  3. 单击 “应用注册”。
  4. 单击“ 新建注册”。
  5. 输入“Snowflake OAuth 资源”或类似的名称值。
  6. 验证 支持的帐户类型 是否设置为 单租户
  7. 单击“注册”。
  8. 单击“ 公开 API”。
  9. 单击 应用程序 ID URI 旁边的链接以添加应用程序 ID URI。 应用程序 ID URI 的格式 Application ID URI <api://9xxxxxxxxxxxxxxxxxx>
  10. 对于 委派身份验证此处的屏幕截图):
    1. 单击“ 添加范围 ”以添加表示 Snowflake 角色的范围。
    2. 选择谁可以同意。
    3. 添加说明。
    4. 单击“添加范围”以保存。
      示例: session:scope:analyst

      OR

  11. 对于 服务主体身份验证此处的屏幕截图):
    若要将 Snowflake 角色添加为 OAuth 流的角色,编程客户端会自行请求访问令牌:
    1. 单击 “清单”。

    2. appRoles找到元素。

    3. 输入具有以下设置 的应用角色 ,Snowflake 角色应是有权访问仓库的角色,以及架构上的使用权限( 请查看此处 ,了解清单 vales 的详细信息)。

    4. 请参阅以下示例定义:

      应用角色如下所示。 避免使用高特权角色,例如 ACCOUNTADMINSECURITYADMINORGADMIN

       "appRoles":[
           {
               "allowedMemberTypes": [ "Application" ],
               "description": "Analyst.",
               "displayName": "Analyst",
               "id": "3ea51f40-2ad7-4e79-aa18-12c45156dc6a",
               "isEnabled": true,
               "lang": null,
               "origin": "Application",
               "value": "session:role:analyst"
           }
       ]
      
    5. 单击“保存”

  12. (可选)如果在 Snowflake 中使用了另一个Microsoft产品(如 PowerBI)的安全集成,并且具有其他声明映射,则需要修改清单。 清单需要使用不同的颁发者发出令牌,以便可以在 Snowflake 中创建具有唯一声明映射的独立安全集成。
    a。 单击 “清单”。
    b. 找到该属性 requestedAccessTokenVersion 并将值设置为“2”。
    • 当设置为“2”时 requestedAccessTokenVersion ,访问令牌将具有格式的颁发者: https://login.microsoftonline.com/<Tenant-ID>/v2.0
    • 当设置为“1”时 requestedAccessTokenVersion ,访问令牌将具有格式的颁发者: https://sts.windows.net/<tenant-ID>/
      c. 单击保存。

B. 在 Microsoft Entra ID 中创建 OAuth 客户端

  1. 导航到 Microsoft Azure 门户 并进行身份验证。
  2. 导航到 Azure Active Directory。
  3. 单击 “应用注册”。
  4. 单击“ 新建注册”。
  5. 输入客户端的名称,例如“Snowflake OAuth 客户端”。
  6. 验证支持的帐户类型是否设置为单租户。
  7. 单击“注册”。
  8. “概述 ”部分中,复制 ClientID应用程序”(客户端)ID 字段。 这称为 <OAUTH_CLIENT_ID> 以下步骤。
  9. 单击 “证书和机密 ”,然后单击 “新建客户端密码”。
  10. 添加机密的说明。
  11. 出于测试目的,请选择长生机密,但对于生产,请遵循必要的安全策略。
  12. 单击 添加。 复制机密。 这称为 <OAUTH_CLIENT_SECRET> 以下步骤。
  13. 对于 委派身份验证
    a。 单击“ 管理 ->API 权限”。
    b. 单击“ 添加权限”。
    c. 单击 “我的 API”。
    d. 单击在Microsoft Entra ID 的“配置 Oauth 资源”中创建的 Snowflake OAuth 资源
    e. 单击“ 委派的权限 ”框。
    f. 检查与应用程序中手动定义的作用域相关的 权限 ,以便向此客户端授予权限。
    g. 单击“ 添加权限”。
    h. 单击“ 授予管理员许可 ”按钮,向客户端授予权限。 请注意,出于测试目的,以这种方式配置权限。 但是,在生产环境中,不建议以这种方式授予权限。
    一. 单击
    j. 单击“管理 -> 身份验证”,添加平台 - > Web 并输入重定向 URI
    https://global.consent.azure-apim.net/redirect/snowflakev2

    OR

  14. 对于 服务主体身份验证
    a。 单击“ 管理 ->API 权限”。
    b. 单击“ 添加权限”。
    c. 单击 “我的 API”。
    d. 单击在Microsoft Entra ID 中配置 Oauth 资源中创建的 Snowflake OAuth 资源。
    e. 单击“ 应用程序权限 ”框。
    f. 检查与要授予此客户端的应用程序清单中手动定义的角色相关的权限。
    g. 单击“ 添加权限”。
    h. 单击“ 授予管理员许可 ”按钮,向客户端授予权限。 请注意,出于测试目的,以这种方式配置权限。 但是,在生产环境中,不建议以这种方式授予权限。
    一. 单击“是”。

C. 收集 Snowflake 的 Azure AD 信息

  1. 导航到 Microsoft Azure 门户 并进行身份验证。
  2. 导航到 Azure Active Directory。
  3. 单击 “应用注册”。
  4. 单击在 Microsoft Entra ID 的“配置 Oauth 资源 ”中创建的 Snowflake OAuth 资源。
  5. 在“概述”界面中单击“终结点”。
  6. 在右侧,复制 OAuth 2.0 令牌终结点(v2), 并记下 OpenID Connect 元数据联合连接元数据的 URL。
  • OAuth 2.0 令牌终结点(v2)称为 <AZURE_AD_OAUTH_TOKEN_ENDPOINT> 以下配置步骤。 终结点应类似于 https://login.microsoftonline.com/<tenant-id>/oauth2/v2.0/token
  • 对于 OpenID Connect 元数据,请在新的浏览器窗口中打开。
    • 找到参数 jwks_uri 并复制其值。
    • 此参数值将称为 <AZURE_AD_JWS_KEY_ENDPOINT> 以下配置步骤中的值。 终结点应类似于 https://login.microsoftonline.com/<tenant-id>/discovery/v2.0/keys
  • 对于 联合元数据文档,请在新的浏览器窗口中打开 URL。
    • "entityID" 参数中找到 XML Root Element 并复制其值。
    • 此参数值将称为 <AZURE_AD_ISSUER> 以下配置步骤中的值。 entityID 值应类似于 https://sts.windows.net/<tenant-id>/.

D. 验证 Entra 授权设置

建议此时测试配置,请使用下面的 curl,并检查 Entra 是否使用任何 API 测试工具(如失眠或其他工具)颁发令牌。

  • 委托身份验证:(可选)
    • 必须执行前面的步骤才能获取代码,可以遵循本文档

      curl --request POST --url https://login.microsoftonline.com/<TENANT_ID>/oauth2/token --header 'Content-Type: multipart/form-data' --form client_id=<AAD_CLIENT_ID> --form client_secret=< AAD_CLIENT_SECRET> --form resource=< AAD_RESOURCE_ID> --formgrant_type=authorization_code --form code=<CODE_GENERATED_ABOVE> --form redirect_uri=https://localhost
      
    • 注意:请在 AAD 客户端应用中添加重定向 URI。

OR

  • 服务主体身份验证:

    curl -X POST -H "Content-Type: application/x-www-form-urlencoded;charset=UTF-8" \ --data-urlencode "client_id=client_id from above B.8" \ --data-urlencode "client_secret=<Secret from above B.12>" \ --data-urlencode "grant_type=client_credentials" \ --data-urlencode "scope=api://<Appl_URI_ID>/.default" \'https://login.microsoftonline.com/<tenant_id>/oauth2/v2.0/token'
    

若要验证令牌,请在 Snowflake 中执行以下命令:

select system$verify_external_oauth_token(‘<token>’);

E. 创建与受众的安全集成

external_oauth_audience_list安全集成的参数必须与配置 Microsoft Entra ID 时指定的应用程序 ID URI 匹配。

  • 委派身份验证:

    create security integration external_oauth_azure_1    
        type = external_oauth
        enabled = true
        external_oauth_type = azure
        external_oauth_issuer = '<AZURE_AD_ISSUER>'
        external_oauth_jws_keys_url = '<AZURE_AD_JWS_KEY_ENDPOINT>'
        external_oauth_audience_list = ('<SNOWFLAKE_APPLICATION_ID_URI>')
        external_oauth_token_user_mapping_claim = ‘upn’ 
        external_oauth_snowflake_user_mapping_attribute = 'login_name or email address';
    

如果已设置 Azure AD 的安全集成,请使用:

alter security integration external_oauth_azure_1 set external_oauth_token_user_mapping_claim = ('sub','upn');  

对于委派身份验证,Snowflake 用户 login_nameemail_address 应与将运行 Power Automate 流的用户的 Entra 电子邮件匹配。

示例:

ALTER USER SNOWSQL_DELEGATE_USER  
LOGIN_NAME = '<ENTRA-USERID>' or EMAIL_ADDRESS = ‘ENTRA-USERID’ 
DISPLAY_NAME = 'SnowSQL Delegated User'  
COMMENT = 'A delegate user for SnowSQL client to be used for OAuth based connectivity'; 

OR

  • 服务主体身份验证:

    create security integration external_oauth_azure_2 
        type = external_oauth 
        enabled = true 
        external_oauth_type = azure 
        external_oauth_issuer = '<AZURE_AD_ISSUER>' 
        external_oauth_jws_keys_url = '<AZURE_AD_JWS_KEY_ENDPOINT>' 
        external_oauth_audience_list = ('<SNOWFLAKE_APPLICATION_ID_URI>') 
        external_oauth_token_user_mapping_claim = ‘sub’     
        external_oauth_snowflake_user_mapping_attribute = 'login_name';
    

请继续下面的服务主体身份验证设置。

为基于服务主体的连接创建用户:

  • 子值应映射到 Snowflake 中的用户,避免使用高特权帐户 Accountadmin、Orgadmin、Securityadmin。

    CREATE OR REPLACE USER SNOWSQL_OAUTH_USER  
    LOGIN_NAME = '<subvalue from decoded token>'  
    DISPLAY_NAME = 'SnowSQL OAuth User'  
    COMMENT = 'A system user for SnowSQL client to be used for OAuth based connectivity'; 
    
    CREATE ROLE ANALYST; 
    
    GRANT ROLE ANALYST TO USER SNOWSQL_OAUTH_USER;
    

F. 验证 Snowflake 访问 [可选]

  • 委派身份验证

    snowsql -a organization-locator -u 'user@sandbox.onmicrosoft.com' --rolename <rolename> --authenticator oauth --token "<token-value>"
    

OR

  • 服务主体身份验证

    snowsql -a <snowflake-accountname> -u ‘sub-value’ -r <snowflake-role from A.11.h above> –authenticator oauth –token <output from curl at step D> 
    

使用 Snowflake 连接器的客户 [已弃用]

适用:所有区域

若要从较旧的 Snowflake 连接器迁移到新连接器,请执行以下步骤。

此选项仅适用于没有显式身份验证类型的较旧连接,并且仅用于向后兼容性。

如果使用先前的连接器的 Power Automate 流已生成(现已标记为已弃用),则需要按照上述配置步骤中所述的步骤设置新连接,并更新现有流以使用新连接。

作“将结果集行从数组转换为对象”也需要删除,因为该功能现在包装在“检查状态和获取结果”。

已知问题和限制

  1. 执行联接命令时,我们当前不支持重复列。 解决方法是向重复列添加别名。

  2. 此处列出了虚拟表的其他限制。

  3. 虚拟表仅支持使用“服务主体”身份验证创建的连接。

  4. 使用服务主体身份验证时,用户需要具有 对 information_schema.columns 表的读取访问权限。

  5. 无法在 Canvas 应用中直接创建 Snowflake 连接、解决问题所需的错误信息和步骤如下所示:

    1. 如果 Snowflake 连接直接在 Canvas 应用中创建,将显示错误,如以下屏幕截图所示 :“创建连接连接”错误
    2. 无需直接在 Canvas 应用中添加连接器,而是从 Canvas 应用外部创建服务主体连接(未委派)
    3. 使用上面创建的 Snowflake 连接并创建虚拟表 连接错误
    4. 之后,可以在 Canvas 应用中加载虚拟表,并从 Canvas 应用生成可以继续 连接错误
    5. 上图的 ANIMALS 表是使用 Snowflake 连接创建的虚拟表,如上所述

注释

  1. 用户始终需要确保在配置连接/流作时,所有 Snowflake 帐户详细信息(仓库、角色、架构、数据库)都与 Snowflake 帐户相同。
  2. 作为基于委托的连接和服务主体连接的验证步骤,请创建 Power Automate 流来验证连接。

常规限制

Name 价值
连接器并发处理的最大请求数 50

正在创建连接

连接器支持以下身份验证类型:

服务主体(Microsoft Entra ID 应用程序) 使用 Microsoft Entra ID 应用程序访问 Snowflake 数据库。 所有区域 可共享
服务主体委托身份验证(Microsoft Entra ID 应用程序) 使用 Microsoft Entra ID 应用程序访问 Snowflake 数据库。 所有区域 可共享
默认值 [已弃用] 此选项仅适用于没有显式身份验证类型的较旧连接,并且仅用于向后兼容性。 所有区域 不可共享

服务主体(Microsoft Entra ID 应用程序)

身份验证 ID:oauthSP

适用:所有区域

使用 Microsoft Entra ID 应用程序访问 Snowflake 数据库。

这是可共享的连接。 如果 Power App 与其他用户共享,则连接也会共享。 有关详细信息,请参阅 画布应用的连接器概述 - Power Apps |Microsoft Docs

Name 类型 Description 必选
租户 字符串 True
客户 ID 字符串 True
客户端密码 securestring True
资源 URL 字符串 Snowflake OAuth 受众 URL (资源 URL) True
Snowflake SaaS URL 字符串 Snowflake URL 不包括 HTTPS 前缀(例如,fnpuupu-in12345.snowflakecomputing.com) True
Snowflake 数据库 字符串 指定要连接到的数据库 True
仓库名称 字符串 要连接到的 Snowflake 仓库 True
角色 字符串 要连接为的 Snowflake 角色 True
Schema 字符串 要连接到的 Snowflake 架构 True

服务主体委托身份验证(Microsoft Entra ID 应用程序)

身份验证 ID:oauthSPUserDelegated

适用:所有区域

使用 Microsoft Entra ID 应用程序访问 Snowflake 数据库。

这是可共享的连接。 如果 Power App 与其他用户共享,则连接也会共享。 有关详细信息,请参阅 画布应用的连接器概述 - Power Apps |Microsoft Docs

Name 类型 Description 必选
客户 ID 字符串 Snowflake OAuth 客户端 ID True
客户端密码 securestring Snowflake OAuth 客户端机密 True
资源 URL 字符串 Snowflake OAuth 受众 URL(资源 URL) True

默认值 [已弃用]

适用:所有区域

此选项仅适用于没有显式身份验证类型的较旧连接,并且仅用于向后兼容性。

这是不可共享的连接。 如果 Power App 与另一个用户共享,系统会提示其他用户显式创建新连接。

Name 类型 Description 必选
这是由于 MCS UI 连接小组件 bug 而需要一个虚拟占位符。 应在 connectionParameterSets 中进行任何身份验证更改 字符串 这是由于 MCS UI 连接小组件 bug 而需要一个虚拟占位符。 应在 connectionParameterSets 中进行任何身份验证更改

限制

名称 调用 续订期
每个连接的 API 调用数 900 60 秒

操作

取消语句的执行

取消语句的执行

提交 SQL 语句以供执行

提交 SQL 语句以供执行

检查状态并获取结果

检查语句的执行状态并获取结果

取消语句的执行

取消语句的执行

参数

名称 密钥 必需 类型 说明
实例
Instance True string

Snowflake 实例的 URI(没有 https://)

语句句柄
statementHandle True string

语句句柄

请求编号
requestId string

请求编号

返回

名称 路径 类型 说明
代码
code string

代码

sqlState
sqlState string

sqlState

消息
message string

消息

statementHandle
statementHandle string

statementHandle

statementStatusUrl
statementStatusUrl string

statementStatusUrl

提交 SQL 语句以供执行

提交 SQL 语句以供执行

参数

名称 密钥 必需 类型 说明
实例
Instance True string

Snowflake 实例的 URI(没有 https://)

请求编号
requestId string

请求的 ID

异步
asyncexecution boolean

指示是否应异步执行查询

可为 Null
nullable boolean

如果可为 null 为 false,则 null 值将被字符串替换

报表
statement string

要执行的 SQL 语句 - 尚不支持的语句批处理

timeout
timeout integer

超时前的秒数

数据库
database string

数据库

架构
schema string

架构

warehouse
warehouse string

warehouse

角色
role string

角色

timezone
timezone string

执行语句时要使用的时区。

查询标记
query_tag string

要与 SQL 语句关联的查询标记。

二进制输出格式
binary_output_format string

二进制值的输出格式。

日期输出格式
date_output_format string

DATE 值的输出格式。

时间输出格式
time_output_format string

TIME 值的输出格式。

时间戳输出格式
timestamp_output_format string

TIMESTAMP 值的输出格式。

timestamp ltz 输出格式
timestamp_ltz_output_format string

TIMESTAMP_LTZ值的输出格式。

timestamp_ntz_output_format
timestamp_ntz_output_format string

TIMESTAMP_NTZ值的输出格式。

timestamp tz 输出格式
timestamp_tz_output_format string

TIMESTAMP_TZ值的输出格式。

多语句计数
MULTI_STATEMENT_COUNT integer

使用多语句功能时要执行的语句数。 0 表示可变数量的语句。 不允许负数。

返回

名称 路径 类型 说明
Partitions
Partitions array of object

Partitions

RowCount
Partitions.RowCount integer

RowCount

UncompressedSize
Partitions.UncompressedSize integer

UncompressedSize

CompressedSize
Partitions.CompressedSize integer

CompressedSize

Schema
Schema array of object

Schema

姓名
Schema.name string

姓名

数据库
Schema.database string

数据库

架构
Schema.schema string

架构

Schema.table string

可为空
Schema.nullable boolean

可为空

精准率
Schema.precision integer

精准率

缩放
Schema.scale integer

缩放

byteLength
Schema.byteLength integer

byteLength

排序规则
Schema.collation string

排序规则

length
Schema.length integer

length

类型
Schema.type string

类型

Data
Data array of

Data

Rows
Metadata.Rows integer

Rows

Format
Metadata.Format string

Format

Code
Metadata.Code string

Code

StatementStatusUrl
Metadata.StatementStatusUrl string

StatementStatusUrl

RequestId
Metadata.RequestId string

RequestId

SqlState
Metadata.SqlState string

SqlState

StatementHandle
Metadata.StatementHandle string

StatementHandle

StatementHandles
Metadata.StatementHandles array of string

执行多个语句的 StatementHandles

CreatedOn
Metadata.CreatedOn string

CreatedOn

检查状态并获取结果

检查语句的执行状态并获取结果

参数

名称 密钥 必需 类型 说明
实例
Instance True string

Snowflake 实例的 URI(没有 https://)

语句句柄
statementHandle True string

语句句柄

请求编号
requestId string

请求编号

分区
partition integer

分区

姓名
name string

姓名

数据库
database string

数据库

架构
schema string

架构

table string

可为空
nullable boolean

可为空

精准率
precision integer

精准率

缩放
scale integer

缩放

byteLength
byteLength integer

byteLength

排序规则
collation string

排序规则

length
length integer

length

类型
type string

类型

返回

名称 路径 类型 说明
Partitions
Partitions array of object

Partitions

RowCount
Partitions.RowCount integer

RowCount

UncompressedSize
Partitions.UncompressedSize integer

UncompressedSize

CompressedSize
Partitions.CompressedSize integer

CompressedSize

Schema
Schema array of object

Schema

姓名
Schema.name string

姓名

数据库
Schema.database string

数据库

架构
Schema.schema string

架构

Schema.table string

精准率
Schema.precision integer

精准率

缩放
Schema.scale integer

缩放

类型
Schema.type string

类型

可为空
Schema.nullable boolean

可为空

byteLength
Schema.byteLength integer

byteLength

排序规则
Schema.collation string

排序规则

length
Schema.length integer

length

Data
Data array of

Data

StatementHandle
StatementHandle string

StatementHandle

Rows
Metadata.Rows integer

Rows

Format
Metadata.Format string

Format

Code
Metadata.Code string

Code

StatementStatusUrl
Metadata.StatementStatusUrl string

StatementStatusUrl

RequestId
Metadata.RequestId string

RequestId

SqlState
Metadata.SqlState string

SqlState

CreatedOn
Metadata.CreatedOn string

CreatedOn

StatementHandles
Metadata.StatementHandles array of string

执行多个语句的 StatementHandles