从 Microsoft Dataverse 流式传输数据

借助 Datastream,您可以从 Microsoft Dataverse 环境中复制历史数据和增量更改,以进行分析和数据集成。Dataverse 是一个基于云的数据平台,用于存储和管理业务应用使用的数据。

在配置 Dataverse 来源之前,请先查看 Datastream 中的关键术语、复制行为、支持的版本和已知限制。

关键词

Dataverse 采用以下概念:

  • 表(以前称为实体)类似于关系型数据库中的表。Dataverse 默认包含标准表,但您也可以创建自定义表。
  • 列(以前称为字段)是表的属性,类似于关系型数据库中的列。
  • “行”是表中的特定记录,类似于关系型数据库中的行。

行为

Datastream 中的 Dataverse 来源支持依赖于 Dataverse Web API,该 API 使用开放数据协议 (OData)。Datastream 会根据您设置的时间间隔轮询源更改。

从 Dataverse 来源复制数据时,会观察到以下行为:

  • API 交互:Datastream 使用 RESTful 请求与 Dataverse Web API 进行交互。基础环境网址为 https://ORGANIZATION_ID.crm.dynamics.com/api/data/v9.1/。 使用标准标头(Accept: application/json、OData-MaxVersion: 4.0、OData-Version: 4.0)。
  • 身份验证:Datastream 使用 OAuth 2.0 和客户端凭证授权类型处理身份验证。Datastream 会从 Microsoft Identity Platform 获取令牌。
  • 架构发现:Dataverse 架构是动态的。Datastream 通过查询 /EntityDefinitions 端点来发现对象名称和架构。

    • 对象名称:Datastream 通过向 /EntityDefinitions 实体集路径发送 GET 请求(其中包含 $filter=TableType ne 'Virtual' and IsPrivate eq false 过滤条件和 $select=EntitySetName 参数)来提取对象名称。
    • 对象架构:Datastream 通过向 /EntityDefinitions 实体集路径发送 GET 请求(其中包含 $expand=Attributes($select=LogicalName,AttributeType,AttributeTypeName) 参数和 $filter=EntitySetName eq '[objectName]' 过滤条件),按实体提取对象架构。
  • 数据复制:

    • Datastream 会复制标准和自定义 Dataverse 表。不包括虚拟表和不公开表。
    • 历史回填:如果为数据流配置了历史回填,Datastream 会复制所包含表的所有历史数据。为此,您需要向实体集发送初始 GET 请求,并使用 API 响应中提供的 @odata.nextLink 属性遍历所有页面。 使用 Prefer: odata.maxpagesize=5000 标头。
    • 增量同步:Datastream 会复制插入和更新事件。这是通过使用基于时间戳的同步来实现的,即过滤 modifiedon 字段大于上次同步时间 ($filter=modifiedon gt [last_sync_timestamp]) 的记录。Datastream 不会捕获删除事件。
  • 轮询间隔:Datastream 会根据您在创建数据流时设置的轮询间隔来轮询更改。该间隔时间会反映在数据流的数据新鲜度指标中。

所有复制的对象都支持使用 modifiedon 字段进行增量同步,以及完整回填。

版本

Datastream 使用 Dataverse Web API v9.1 版。

已知限制

将 Dataverse 用作来源时的已知限制包括:

  • 基于 modifiedon 时间戳的增量同步方法不会捕获删除事件。
  • Datastream 不支持使用增量链接 (@odata.deltaLink) 的 Dataverse 推荐更改跟踪功能。这是因为不支持存储后续增量拉取所需的增量链接网址。
  • 复制仅限于标准表和自定义表。不支持虚拟表和私有表。
  • 准确更新源表中的 modifiedon 字段对于确保增量同步按预期运行至关重要。
  • 如需检索 Picklist 字段的标签,数据请求必须包含 Prefer: data.include-annotations="*" 标头,而不仅仅是整数值。

后续步骤