用于 Dataverse 的 Azure Synapse Link 常见问题解答

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

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

客户不应修改数据文件,不应将客户文件放在数据文件夹中。

注释

若要在不中断 Azure Synapse Link 的情况下删除 Data Lake 中的过时和停滞数据,请考虑使用功能 查询和分析增量更新

如何访问我的表关系?

若要访问多对多关系,该关系可用作表,可从新链接的 “添加表 ”页中选择,并从 “管理表 ”中选择预先存在的链接。

注释

当采用 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 遵循通用数据模型,使数据及其含义可以在应用程序和业务流程(例如Microsoft Power Apps、Power BI、Dynamics 365 和 Azure)之间共享。 在每个 CDM 文件夹中,列标题等元数据存储在 model.json 文件中。 详细信息: 通用数据模型和 Azure Data Lake Storage Gen2 |Microsoft Learn

为什么 Model.json 文件增加或更改数据类型的长度,并且不保留 Dataverse 中定义的内容?

Model.json 将保留列大小的数据库长度。 在 Dataverse 中,每个列都有数据库长度的概念。 如果创建大小为 200 的列,后来将其减小到 100,Dataverse 仍允许在 Dataverse 中显示现有数据。 它通过将 DBLength 设定为 200 和 MaxLength 设定为 100 来这样做。 Model.json 中看到的内容是 DBLength ,如果将它用于下游进程,则永远不会为 Dataverse 列预配较少的空间。

注释

备注字段定义为 varchar(max) 默认最大长度为 9999。

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

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

列名 Format 数据类型 Example
SinkCreatedOnSinkModifiedOn M/d/yyyy H:mm:ss tt 日期/时间 2021/6/28 下午 4:34:35
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' 日期/时间 2021-06-25T16:21:12Z

注释

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

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

为什么我看到像 1.csv 或 1_001.csv 这样的文件名,而不是某些 Dataverse 表所使用的常规的按日期时间分区的文件名?

当您选择仅追加导出模式并且包含的表中没有有效的 CreatedOn 列时,此行为是预期行为。 Blob 组织到 1.csv、2.csv 等文件中(由于缺少有效的创建日期,使用自定义分区)。 当任何分区接近 MaxBlockPerBlobLimit 的 95% 时,系统将自动生成一个新文件,如 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 是在 Data Lake 中修改记录的日期和时间。

哪些 Dataverse 表不支持导出?

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

  • 附件
  • 日历
  • 日历规则

注释

可以使用 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 Workspace 中通过 非分区 表查询数据。

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

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

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

在 Dataverse 中删除记录时,为什么在 Data Lake 中看不到任何数据更改?

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