从 Microsoft Dataverse 流式传输数据

Datastream 支持从 Microsoft Dataverse 实例复制更改事件。Dataverse 是一个基于云的数据平台,可让您安全地存储和管理业务应用所使用的数据。

本页包含以下方面的信息:

  • 从 Dataverse 复制时需要了解的关键术语。
  • Datastream 如何处理从来源 Dataverse 环境中拉取的数据的行为。
  • Datastream 支持的 Dataverse 版本。
  • 将 Dataverse 用作来源的已知限制。

关键术语

Dataverse 按照以下概念运行:

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

行为

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

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

  • API 交互:Datastream 使用 RESTful 请求与 Dataverse Web API 进行交互。基本环境网址为 https://ORGANIZATION_ID.crm.dynamics.com/api/data/v9.1/. 系统会使用标准标头(Accept: application/jsonOData-MaxVersion: 4.0OData-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 表和自定义 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 不支持 Dataverse 推荐的更改跟踪功能,该功能使用增量链接 (@odata.deltaLink)。这是因为系统不支持存储后续增量拉取所需的增量链接网址。
  • 复制仅限于标准表和自定义表。系统不支持虚拟表和私有表。
  • 准确更新来源表中的 modifiedon 字段对于确保增量同步按预期运行至关重要。
  • 如需检索 Picklist 字段的标签,数据请求必须包含 Prefer: data.include-annotations="*" 标头,而不仅仅是整数值。

后续步骤