总结
| 项 | 说明 |
|---|---|
| 发布状态 | 正式发布 |
| 产品 | Power BI(语义模型) Power BI(数据流) Fabric(数据流 Gen2) Power Apps(数据流) |
| 支持的身份验证类型 | Snowflake(用户名/密码),Microsoft 帐户(Microsoft Entra ID),密钥对认证 |
| 功能参考文档 | — |
注意
Snowflake 连接器实现 2.0 自 2025 年 7 月起正式发布。 详细了解此功能。
注意
密码输入字段仅在必要时才会根据上传的证书类型自动显示。 用户上传证书后,系统会检测它是加密还是未加密,并有条件地显示通行短语对话框。 支持加密密钥和未加密密钥。
注意
由于部署计划和主机特定的功能,某些功能可能存在于一个产品中,但不是其他功能。
注意
Snowflake 将弃用用户名/密码身份验证模式( 在此处阅读详细信息)。 可以在 Fabric 路线图上的“连接”下找到详细信息。
支持的功能
- 导入
- DirectQuery(Power BI 语义模型)
- 高级选项
- 指定要用作角色名称的文本值
- 关系列
- 连接超时时间(以秒为单位)
- 命令超时(以秒为单位)
- 数据库
- 本机 SQL 语句
从 Power Query Desktop 连接到 Snowflake 数据仓库
注意
自 2025 年 3 月版 Power BI Desktop 以来,默认情况下会启用 Snowflake 连接器实现 2.0 选项。
要连接到 Snowflake 计算仓库,请执行以下步骤:
从 Power BI Desktop 的主页功能区中选择获取数据,从左侧的类别中选择数据库,选择 Snowflake,然后选择连接。
在显示的 Snowflake 窗口中,在服务器中输入 Snowflake 服务器的名称,然后在仓库中输入 Snowflake 计算仓库的名称。
或者,在要用于修改连接查询的任何高级选项中输入值,例如用作角色名称的文本值或命令超时。 要了解详细信息,请转到通过高级选项进行连接。
选择“确定”。
要登录到 Snowflake 计算仓库,请输入用户名和密码,然后选择连接。
注意
输入特定 Snowflake 服务器的用户名和密码之后,Power BI Desktop 即可在后续连接尝试中使用这些凭据。 可以通过“文件”>“选项和设置”>“数据源设置”来修改这些凭据。 有关详细信息,请转到 “更改身份验证方法”。
如果要使用 Microsoft 帐户选项,必须在 Snowflake 端配置 Snowflake Microsoft Entra ID 集成。 有关详细信息,请转到 Power BI SSO to Snowflake - 入门。
在导航器中,选择要在 Power BI Desktop 中导入和使用的一个或多个元素。 然后选择 “加载 ”以加载 Power BI Desktop 中的表,或 “转换数据 ”以打开 Power Query 编辑器,可在其中筛选和优化要使用的数据集,然后将优化后的数据集加载到 Power BI Desktop 中。
选择导入以将数据直接导入到 Power BI 中,或选择 DirectQuery,然后选择确定。 有关详细信息,请转到 在 Power BI Desktop 中使用 DirectQuery。
注意
Microsoft Entra ID 单一登录(SSO)仅支持 DirectQuery。
从 Power Query Online 连接到 Snowflake 数据库
请执行以下步骤来建立连接:
在连接器选择中选择 Snowflake 选项。
在显示的 Snowflake 对话框中,输入服务器和仓库的名称。
在要使用的高级选项中输入任何值。 如果 UI 中未表示任何高级选项,稍后可以在 Power Query 的高级编辑器中编辑它们。
输入连接凭据,包括选择或创建新连接、要使用的网关以及用户名和密码。
选择“下一步”以连接到数据库。
在“导航器”中选择所需的数据,然后选择“转换数据”以在 Power Query 编辑器中转换数据。
使用高级选项进行连接
Power Query 提供一组高级选项,可以根据需要将这些选项添加到查询中。
下表列出了可以在 Power Query 中设置的所有高级选项。
| 高级选项 | 说明 |
|---|---|
| 角色名称 | 指定报表通过驱动程序使用的角色。 此角色必须可供用户使用。 否则,未设置任何角色。 |
| 包含关系列 | 如果选中,则包含可能与其他表格有关系的列。 如果清除此框,则看不到这些列。 |
| 连接超时时间(以秒为单位) | 指定在返回错误之前与 Snowflake 服务交互时等待响应的时间。 默认值为 0(无超时)。 |
| 命令超时(以秒为单位) | 指定在返回错误之前等待查询完成的时间。 默认值为 0(无超时)。 |
| 数据库 | 指定仓库中的特定数据库。 此选项仅在 Power Query Desktop 中可用。 |
| SQL 语句 | 有关信息,请参阅使用本机数据库查询从数据库导入数据。 此选项仅在 Power Query Desktop 中可用。 |
选择所需的高级选项后,请在 Power Query Desktop 中选择 确定,或在 Power Query Online 中选择 下一步 以连接到 Snowflake 数据库。
Snowflake 连接器实现 2.0
2025 年 1 月,我们引入了 Snowflake 连接器的新实现,以增强与 Snowflake 的集成。 此连接器自 2025 年 7 月起正式发布。 建议将 Power BI Desktop 和本地数据网关升级到最新版本,以便从最新的功能中受益。 向我们提供反馈 ,帮助我们继续改进连接器。
Snowflake 连接器实现 2.0 是使用开源 箭头数据库连接 (ADBC)驱动程序生成的。 ADBC 提供了一组标准接口,用于与箭头数据交互,这对于提取大型数据集特别高效,开销最小,且无需序列化或复制。 ADBC 驱动程序还包含安全增强功能,例如内存安全和垃圾回收。 此外,与开放源代码社区的合作可实现更快速的更新,利用新式工具和安全开发生命周期(SDL)流程。
为了使你能够利用这些性能和安全增强功能,从 2025 年 7 月开始,桌面中的所有新创建连接都会自动使用 2.0 实现。 还可以通过更新现有查询并按如下所示添加 Implementation="2.0" 标志 Snowflake.Databases 来测试 2.0 实现。
Source = Snowflake.Databases("contoso.snowflakecomputing.com", "CONTOSO_WH", [Implementation="2.0"])
为了帮助诊断任何潜在问题,您可以在 Mashup 日志中找到 Implementation 和 DriverType 的详细信息,如以下示例所示。 如果在过渡期间遇到任何问题,请联系支持人员。 同时,若要自我缓解,可以删除 Implementation="2.0" 以继续使用 ODBC 连接器以避免业务中断,然后再解决问题。
{
"Start":"2024-11-02T00:14:02.7968686Z",
"Action":"Engine/Module/Snowflake/IO/Snowflake/Implementation",
"ResourceKind":"Snowflake",
"ResourcePath":"powerbi.snowflakecomputing.com ;DEMO_WH",
"HostProcessId":"29200",
"Implementation":"2.0",
"DriverType":"ADBC",
"ProductVersion":"2.139.0.0 (Main)+eda56ecd858054173a4d11db9c63a6da5cf92a99",
"ActivityId":"106f16b6-cfbb-4853-9f20-ed45486486d2",
"Process":"Microsoft.Mashup.Container.NetFX45",
"Pid":38560,
"Tid":1,
"Duration":"00:00:00.0000291"
}
自 2025 年 7 月发布以来,以下选项可用:
-
UseHighPrecision:控制应如何处理 Snowflake NUMBER(38,0) 字段的精度。 如果未指定任何值,连接器将使用SHOW PARAMETERS LIKE 'ODBC_TREAT_DECIMAL_AS_INT'向 Snowflake 发起查询。 如果未设置任何值,连接器将使用列指定的规模。 值true将 NUMBER(38,0)视为十进制类型。false该值将 NUMBER(38,0)视为 Int64 类型。 如果刻度大于 0,则列被视为 Double 类型。 -
DateTimePrecision:控制 Snowflake Timestamp 值的精度处理方式。 Snowflake 通常以纳秒精度存储时间戳值。 在 ADBC 中,根据 Snowflake 的说法,此精度可能会导致 1677 之前或 2262 之前的日期溢出异常。 此选项的有效值为 null,nanoseconds或microseconds。 默认情况下,null 值使用nanoseconds。 建议在 1677 之前或 2262 之后需要日期的用户使用此设置microseconds。 如果用户需要在 1677 之前或 2262 年之后保留第 1000 万位的精度,我们建议保留 ODBC 驱动程序。
如果需要使用代理连接到 Snowflake,请参阅 代理设置说明。 驱动程序将环境变量用于代理设置。
下表包含过去版本中发布的连接器增强功能的摘要:
| 释放 | 连接器改进 |
|---|---|
| 2025 年 7 月 | • 布尔列返回布尔类型,修复了布尔列在空记录集架构(包括元数据)中被视为字符串类型的问题。 • 将最大时间戳精度设置为微秒的新设置。 • 改进了持续时间支持。 • 向 ADBC 添加了对导航属性的支持。 • 改进了 ADBC 驱动程序中的跟踪功能,现在可以通过驱动程序层跟踪“ActivityId”。 |
| 2025 年 4 月 | • 添加了对 Snowflake 查询标记的支持。 例如: {"PowerQuery":true,"Host":"PBI_SemanticModel_MWC","HostContext":"PowerBIPremium-DirectQuery"} |
| 2025 年 3 月 | • 从 Snowflake 检索数据时提高了性能。 • 在 Power BI Desktop 中默认启用,以便新创建的连接自动使用新的连接器实现。 • 修复了自三月份最新版本以来视图不可见的问题。 |
| 2025 年 2 月 | • 通过减少元数据调用数来提高性能。 • 解决了大型结果集的重复值问题。 |
注意
使用本地数据网关时,请注意支持的最低版本为 2025 年 1 月。 建议使用具有最新功能的最新版本。
注意
此功能在 Power BI Desktop 的 64 位版本中受支持,在 32 位版本中不起作用。
故障排除
错误:SQL 编译错误:对象不存在,或者无法执行操作
当系统找不到指定的对象时,会发生此错误。 通常,此错误是由于用户将无效的数据库名称设置为其默认数据库造成的。
确保对属性 DEFAULT_NAMESPACE 使用有效的默认数据库名称:DESC USERusername
更新默认的数据库名称:alter userusername set DEFAULT_NAMESPACE=<database name>.<schema name>。 有关详细信息,请转到 Snowflake 文档。
限制和已知问题
Snowflake 连接器实现 2.0 中的已知问题
目前, Snowflake 连接器实现 2.0 具有以下已知问题。 目前正在进行修复工作,修复程序发布后将更新文档。
- 包含
count distinct逻辑的 Snowflake 查询返回不正确的结果。 - 创建关系时,遇到错误
Object reference not set to an instance of an object。 取消弹出窗口后,仍可定义关系。 - 内存使用率增加。 使用
Implementation="2.0"时,总体加载时间通常更快,但内存消耗也可能更高,在某些情况下会导致问题,例如Resource Governing: This operation was canceled because there wasn't enough memory to finish running it. Either reduce the memory footprint of your dataset by doing things such as limiting the amount of imported data, or if using Power BI Premium, increase the memory of the Premium capacity where this dataset is hosted.
已解决的问题
数据库名称中的连字符
如果数据库名称中具有连字符,则可能会遇到 ODBC: ERROR[42000] SQL compilation error。 此问题在 2024 年 9 月版本中得到解决。
布尔数据类型的切片器视觉对象
布尔数据类型的切片器视觉对象在 2024 年 6 月版本中没有按预期运行。 此非功能性是一个已知问题。 作为临时解决方案,用户可以通过导航到以下位置来将报表中的布尔数据类型转换为文本:“传输”->“数据类型”->“文本”。 2024 年 10 月版本中提供了修补程序。
在 Implementation=“2.0”时视图不可见
在 Power BI Desktop 2025 年 3 月版本的某些版本中,在使用 Snowflake 连接器实现 2.0 (Implementation="2.0")时,可能会遇到视图不可见的问题。 此问题自 Power BI Desktop 2025 年 3 月发布以来已修复。 若要重试,请升级安装。
TIMESTAMP_NTZ值为 UTC,实现=“2.0”
TIMESTAMP_LTZ类型不会转换为本地时区,但在使用 Snowflake 连接器实现 2.0 (Implementation="2.0")时返回 UTC 值。 例如,从 Snowflake 执行 SELECT CURRENT_TIMESTAMP 会返回 UTC 时间,而不是用户的本地时区。 此问题在 2025 年 7 月版本中得到解决。
使用 Implementation=“2.0” 时,索引超出了数组的边界
在某些情况下,当使用 Index was outside the bounds of the array ()时,会引发一个错误,指示 Implementation="2.0"。 此问题在 2025 年 6 月版本中得到解决。