Snowflake

总结

说明
发布状态 正式发布
产品 Power BI(语义模型)
Power BI(数据流)
Fabric(数据流 Gen2)
Power Apps(数据流)
支持的身份验证类型 Snowflake(用户名/密码), Microsoft 帐户 (Microsoft Entra ID)
功能参考文档

注意

Snowflake 连接器实现版本 2.0 自2025年7月起已普遍可用。 详细了解此功能

注意

由于部署计划和主机特定功能的缘故,某些功能可能在一个产品中存在,而在其他产品中不存在。

支持的功能

  • 导入
  • DirectQuery(Power BI 语义模型)
  • 高级选项
    • 指定要用作角色名称的文本值
    • 关系列
    • 连接超时时间(以秒为单位)
    • 命令超时(以秒为单位)
    • 数据库
    • 本机 SQL 语句

从 Power Query Desktop 连接到 Snowflake 数据仓库

注意

自 2025 年 3 月版 Power BI Desktop 以来,默认情况下会启用 Snowflake 连接器实现 2.0 选项。

要连接到 Snowflake 计算仓库,请执行以下步骤:

  1. 从 Power BI Desktop 的主页功能区中选择获取数据,从左侧的类别中选择数据库,选择 Snowflake,然后选择连接

    “获取数据”对话框的屏幕截图,其中显示了 Snowflake 数据库选择。

  2. 在显示的 Snowflake 窗口中,在服务器中输入 Snowflake 服务器的名称,然后在仓库中输入 Snowflake 计算仓库的名称。

    Snowflake 对话框的屏幕截图,其中显示了选中的“导入”单选按钮。

  3. 或者,在要用于修改连接查询的任何高级选项中输入值,例如用作角色名称的文本值或命令超时。 详细信息:使用高级选项进行连接

  4. 选择“确定”

  5. 要登录到 Snowflake 计算仓库,请输入用户名和密码,然后选择连接

    Snowflake 凭据提示的屏幕截图,其中显示了“用户名”和“密码”字段。

    注意

    输入特定 Snowflake 服务器的用户名和密码之后,Power BI Desktop 即可在后续连接尝试中使用这些凭据。 可以通过“文件”>“选项和设置”>“数据源设置”来修改这些凭据。 详细信息:更改身份验证方法

    如果要使用 Microsoft 帐户选项,必须在 Snowflake 端配置 Snowflake Microsoft Entra ID 集成。 详细信息:Power BI SSO 到 Snowflake - 入门

  6. 导航器中,选择要在 Power BI Desktop 中导入和使用的一个或多个元素。 然后选择加载以在 Power BI Desktop 中加载表;或选择转换数据以打开 Power Query 编辑器,可在其中筛选和优化要使用的数据集,然后将该优化数据集加载到 Power BI Desktop 中。

    导航器的屏幕截图,其中打开了测试架构数据库,并且选中了 DimProduct 表。

  7. 选择导入以将数据直接导入到 Power BI 中,或选择 DirectQuery,然后选择确定。 详细信息:在 Power BI Desktop 中使用 DirectQuery

    注意

    Microsoft Entra ID 单一登录(SSO)仅支持 DirectQuery。

    连接设置的屏幕截图,其中包含导入和 DirectQuery 选择。

从 Power Query Online 连接到 Snowflake 数据库

请执行以下步骤来建立连接:

  1. 在连接器选择中选择 Snowflake 选项。

  2. 在显示的 Snowflake 对话框中,输入服务器和仓库的名称。

    Power Query Online 中的 Snowflake 连接生成器。

  3. 在要使用的高级选项中输入任何值。 如果 UI 中未表示任何高级选项,稍后可以在 Power Query 的高级编辑器中编辑它们。

  4. 输入连接凭据,包括选择或创建新连接、要使用的网关以及用户名和密码。

  5. 选择“下一步”以连接到数据库。

  6. “导航器”中选择所需的数据,然后选择“转换数据”以在 Power Query 编辑器中转换数据。

    在线导航器的屏幕截图,其中打开了测试架构数据库,并且选中了 DimProduct 表。

使用高级选项进行连接

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 实现。 此外,我们将逐步将现有客户过渡到阶段的 2.0 实现,更新将应用到不同区域到 2025 年 11 月。 在此期间,你可以更新现有查询并添加 Implementation="2.0" 标志来测试2.0实现,如此处所示。 转换后,未指定实现的连接将自动更新为 2.0 实现。

Source = Snowflake.Databases("contoso.snowflakecomputing.com", "CONTOSO_WH", [Implementation="2.0"])

为了帮助诊断任何潜在问题,您可以在 Mashup 日志中找到 ImplementationDriverType 的详细信息,如以下示例所示。 如果在过渡期间遇到任何问题,请联系支持人员。 同时,若要自行缓解,可以指定 Implementation="1.0" 在解决问题之前继续使用 1.0 连接器,以避免业务中断。

{"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 通常以纳秒精度存储时间戳值。 根据 Snowflake 的说法,在 ADBC 中,这可能会导致 1677 之前或 2262 之后的日期溢出异常。 此选项的有效值为 nullnanosecondsmicroseconds。 默认情况下,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 中默认启用,以便新创建的连接自动使用新的连接器实现。
- 修复了自 3 月最新版本发布以来 不可见的视图 问题。
2025 年 2 月 - 通过减少元数据调用数来提高性能。
- 解决了大型结果集的重复值问题。

注意

使用本地数据网关时,请注意支持的最低版本为 2025 年 1 月。 建议使用具有最新功能的最新版本。

注意

此功能在 Power BI Desktop 的 64 位版本中受支持,在 32 位版本中不起作用。

故障排除

错误:SQL 编译错误:对象不存在,或者无法执行操作

当系统找不到指定的对象时,会发生此错误。 通常,此错误是由于用户将无效的数据库名称设置为其默认数据库造成的。

确保对属性 DEFAULT_NAMESPACE 使用有效的默认数据库名称:DESC USERusername

更新默认的数据库名称:alter userusername set DEFAULT_NAMESPACE=<database name>.<schema name>。 有关详细信息,请参阅 Snowflake 文档 - https://docs.snowflake.com/en/sql-reference/sql/alter-user

限制和已知问题

数据库名称中的连字符

如果数据库名称中具有连字符,则可能会遇到 ODBC: ERROR[42000] SQL compilation error。 此问题在 2024 年 9 月版本中得到解决。

布尔数据类型的切片器视觉对象

布尔数据类型的切片器视觉对象在 2024 年 6 月版本中没有按预期运行。 此非功能性是一个已知问题。 作为临时解决方案,用户可以通过导航到以下位置来将报表中的布尔数据类型转换为文本:“传输”->“数据类型”->“文本”。 2024 年 10 月版本中提供了修补程序。

在 Implementation=“2.0”时视图不可见

在 Power BI Desktop 2025 年 3 月版本的某些版本中,在使用 Snowflake 连接器实现 2.0Implementation="2.0")时,可能会遇到视图不可见的问题。 自 Power BI Desktop 2025 年 3 月发布以来,此问题已修复。 升级安装以重试。

TIMESTAMP_NTZ值为 UTC,实现=“2.0”

TIMESTAMP_LTZ类型不会转换为本地时区,但在使用 Snowflake 连接器实现 2.0Implementation="2.0"返回 UTC 值。 例如,从 Snowflake 执行 SELECT CURRENT_TIMESTAMP 会返回 UTC 时间,而不是用户的本地时区。 此问题在 2025 年 7 月版本中得到解决。

使用 Implementation=“2.0” 时,索引超出了数组的边界

在某些情况下,当使用 Snowflake 连接器实现 2.0Implementation="2.0")时,会引发一个错误,指示 Index was outside the bounds of the array。 此问题在 2025 年 6 月版本中得到解决。

其他信息