Azure Synapse Link for Dataverse 常见问题

本文提供有关将 Microsoft Dataverse 表数据导出到 Azure Synapse Analytics 和 Azure Data Lake 的常见问题的信息。

我是否可以手动执行任务,例如为连接的 Azure 存储中的数据文件创建、更新、删除或设置自动删除策略?

客户不应修改数据文件,并且数据文件夹中不应放置任何客户文件。

备注

若要删除数据湖中过时和陈旧的数据,而不中断 Azure Synapse Link,请考虑使用查询和分析增量更新功能

如何访问我的表关系?

若要访问多对多关系,关系将以表的形式提供,以从添加表页面为新链接选择关系,从管理表为预先存在的链接选择关系。

备注

当采用 CSV 格式写入时,所有关系数据默认处于仅追加模式。

Azure Synapse Link 是 Dataverse 的一项免费功能。 利用 Azure Synapse Link for Dataverse 不会向 Dataverse 收取额外费用。 但是,请考虑 Azure 服务的潜在成本:

添加列时会发生什么情况?

当向源中的表添加新列时,还会在相应文件分区的目标中的文件末尾添加它。 当在添加列之前存在的行不显示在新列中时,新的或更新的行将显示新添加的列。

删除列时会发生什么情况?

当从源中的表删除列时,不会从目标中删除该列。 相反,这些行不再更新,并且在保留之前的行时标记为 NULL。

如果更改列的数据类型,将会发生什么情况?

更改列的数据类型是一个中断性变更,您需要取消链接和重新链接。

删除行时会发生什么情况?

删除行的处理方式有所不同,具体取决于您选择的数据写入选项:

  • CSV 格式的就地更新:这是默认模式。 在此模式下删除表行时,也将从 Azure Data Lake 中的相应数据分区删除该行。 换言之,从目标中硬删除数据。
  • CSV 格式的仅追加和增量文件夹更新:在此模式下,在删除 Dataverse 表行时,不会从目标中硬删除它。 相反,一个行将设置为 isDeleted=True,并添加到 Azure Data Lake 中相应数据分区中的文件。
  • 导出为 Delta Lake 格式:Azure Synapse Link 在下一个增量同步周期对数据执行软删除,在 30 天后进行硬删除。

为什么我在导出的文件中看不到列标头?

Azure Synapse Link 遵循 Common Data Model 使跨应用程序和业务流程(例如 Microsoft Power Apps、Power BI、Dynamics 365 和 Azure)共享数据及其含义成为可能。 在每个 CDM 文件夹中,列标头等元数据存储在 model.json 文件中。 详细信息:Common Data Model 和 Azure Data Lake Storage Gen2 | Microsoft Learn

为什么 Model.json 文件会出现数据类型的长度的增加或变化,而不保留 Dataverse 中定义的数据?

Model.json 将保留列大小的数据库长度。 Dataverse 对每个列有一个数据库长度概念。 如果您创建一个大小为 200 的列,然后将其缩小到 100,Dataverse 仍然允许您的现有数据显示在 Dataverse 中。 它通过将 DBLength 保留为 200 并将 MaxLength 保留为 100 来实现。 您将在 DBLength 中看到 Model.json,如果您将其用于下游流程,则永远不会为 Dataverse 列预配更少的空间。

备注

备忘录字段定义为 varchar(max),其中默认最大长度为 9999。

导出的 Dataverse 表中预期可以有哪些日期和时间格式?

导出的 Dataverse 表中预期可以有三种日期和时间格式。

列名称 Format 数据类型 示例
SinkCreatedOnSinkModifiedOn M/d/yyyy H:mm:ss tt datetime 6/28/2021 4:34:35 PM
CreatedOn yyyy-MM-dd'T'HH:mm:ss.sssssssXXX datetimeOffset 2018-05-25T16:21:09.0000000+00:00
所有其他列 yyyy-MM-dd'T'HH:mm:ss'Z' datetime 2021-06-25T16:21:12Z

备注

CreatedOn 数据类型已于 2022 年 7 月 29 日从 datetime 更改为 datetimeOffset。 若要编辑在更改之前创建的表的数据类型格式,请删除并重新添加该表。

您可以为 Dataverse 中的“日期和时间”列选择不同的列行为,这会更新数据类型格式。 详细信息:日期及时间列的行为和格式

为什么某些 Dataverse 表显示 1.csv 或 1_001.csv 文件名,而不是常规的日期时间分区文件名?

当您选择仅追加导出模式并且包含的表中没有有效的 CreatedOn 列时,此行为是预期行为。 Blob 将组织到文件中,例如 1.csv、2.csv(由于缺少有效的创建日期,因此使用自定义分区)。 当任何分区接近 95% 的 MaxBlockPerBlobLimit 时,系统会自动生成一个新文件 - 在此处显示为 1_001.csv。

何时应该使用按年或按月分区策略?

对于一年内数据量较高的 Dataverse 表,我们建议您使用按月分区。 这样做会导致文件较小且性能更佳。 此外,如果 Dataverse 表中的行更新频繁,拆分为多个较小的文件有助于在就地更新场景中提高性能。 Delta Lake 仅可用于年度分区,因为与 CSV 格式相比,它的性能更优。

什么是仅追加模式?仅追加模式和就地更新模式之间有什么区别?

在仅追加模式下,Dataverse 表中的增量数据将追加到湖中的相应文件分区。 详细信息:Azure Synapse Link 中的高级配置选项

何时对更改的历史视图使用仅追加模式?

仅追加模式是用于将 Dataverse 表数据写入湖中的建议选项,特别是当数据量在具有频繁更改数据的分区中较高时。 同样,对于企业客户而言,这是一种常用且强烈建议的选项。 此外,您还可以在以下情况下选择使用此模式:打算增量查看 Dataverse 中的更改并处理 ETL、AI 和 ML 场景中的更改。 仅追加模式提供更改的历史记录(而不是最新更改或就地更新),并从 AI 场景启用多个时序,例如预测或根据历史值预测分析。

当我以仅追加模式导出数据时,如何检索每个记录的最新行并排除已删除的行?

在仅追加模式下,您应该使用 VersionNumberSinkModifiedOn 标识具有相同 ID 的记录的最新版本,然后对最新版本应用 isDeleted=0

当我使用仅追加模式导出数据时,为什么会看到重复的版本号?

对于仅追加模式,如果 Azure Synapse Link for Dataverse 由于网络延迟等任何原因,未从 Azure 数据湖获得数据已提交的确认,Azure Synapse Link 将在这些情况下重试并再次提交数据。 通过使用 SinkModifiedOn 筛选数据,可在下游使用时灵活处理此场景。

为什么我在 Sinkmodifiedon 和 Modifiedon 中看到差异?

这是预期行为。 Modifiedon 是在 Dataverse 中更改记录的日期/时间;Sinkmodifiedon 是在数据湖中修改记录的日期和时间。

导出不支持哪些 Dataverse 表?

除了以下系统表之外,也不支持未启用更改跟踪的任何表:

  • 附件
  • 日历
  • Calendarrule

备注

您可以使用 Azure Synapse Link for Dataverse 添加审核表以进行导出。 但是,仅支持使用 Delta Lake 配置文件导出审核表。

我使用的是导出到 Delta Lake 功能,是否可以停止 Apache Spark 作业或更改执行时间?

当配置的时间间隔中发生数据更改时,将触发 Delta Lake 转换作业。 无法选择停止或暂停 Apache Spark 池。 但是,您可以在管理表 > 高级时间间隔下创建链接后修改时间间隔。

查找列由 ID 和值组成。 查找值仅在根表上更改。 为了更好地反映查找列的值,我们建议您使用原始根表加入以获取最新值。

在 Dataverse 中,计算列仅保留公式信息,实际值取决于基表列。 因此,仅在所有列均位于同一导出表内时,才支持计算列。

哪些 Dataverse 表默认情况下使用仅追加模式?

默认情况下,没有 createdOn 字段的所有表都使用“仅追加”模式进行同步。 这将包括关系表和 ActivityParty 表。

为什么我会看到错误消息 - 无法列出路径上的目录内容?

  • Dataverse 数据存储在连接的存储容器中。 您需要链接存储帐户中的“存储 Blob 数据参与者”角色才能通过 Synapse 工作区执行读取和查询操作。
  • 如果您选择使用 Delta Lake 格式导出数据,则在 Delta Lake 转换后清理您的 CSV 文件。 您需要通过 Synapse 工作区使用 non_partitioned 表查询数据。

为什么我会看到错误消息 - 由于文件不完整或无法读取(仅限 CSV 文件)而无法大容量加载?

Dataverse 数据可以通过创建、更新和删除事务不断更改。 此错误由于在您从中读取数据时更改了基础文件而造成。 因此,对于不断更改的表,更改消耗管道以使用快照数据(分区表)来消耗。 详细信息:无服务器 SQL 池故障排除

Azure Synapse Link for Dataverse 设计用于分析目的。 我们建议客户将长期保留用于存档。 详细信息:Dataverse 数据长期保留概述

在 Dataverse 中删除记录后,为什么我在数据湖中看不到任何数据更改?

对于要删除记录的任何直接 SQL 调用,不会触发 Azure Synapse Link for Dataverse 服务,因为未调用 BPO.Delete。 有关示例功能,请转到如何清理继承访问权限