從 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 會傳送 GET 要求至 /EntityDefinitions 實體集路徑,並使用 $filter=TableType ne 'Virtual' and IsPrivate eq false 篩選器和 $select=EntitySetName 參數,擷取物件名稱。
    • 物件結構定義:Datastream 會傳送 GET 要求至 /EntityDefinitions 實體集路徑,並使用 $expand=Attributes($select=LogicalName,AttributeType,AttributeTypeName) 參數和 $filter=EntitySetName eq '[objectName]' 篩選器,擷取每個實體的物件結構定義。
  • 資料複製:

    • Datastream 會複製標準和自訂 Dataverse 資料表。不含虛擬和私人資料表。
    • 歷來資料補充:如果為串流設定,Datastream 會複製所含資料表的所有歷來資料。方法是先向實體集傳送 GET 要求,然後使用 API 回應中提供的 @odata.nextLink 屬性,逐一查看所有頁面。系統會使用 Prefer: odata.maxpagesize=5000 標頭。
    • 增量同步:Datastream 會複製插入和更新事件。Datastream 會使用時間戳記同步處理功能,篩選 modifiedon 欄位大於上次同步處理時間 ($filter=modifiedon gt [last_sync_timestamp]) 的記錄,藉此達成這項作業。Datastream 不會擷取刪除事件。
  • 輪詢間隔:Datastream 會根據您建立串流時設定的輪詢間隔,輪詢變更。這個間隔會反映在串流的資料更新間隔指標中。

所有複製的物件都支援使用 modifiedon 欄位進行增量同步,以及完整補充。

版本

Datastream 使用 Dataverse Web API 9.1 版。

已知限制

使用 Dataverse 做為來源時,已知限制包括:

  • 根據 modifiedon 時間戳記,增量同步處理方法不會擷取刪除事件。
  • Datastream 不支援 Dataverse 建議的變更追蹤功能,該功能會使用差異連結 (@odata.deltaLink)。這是因為系統不支援儲存後續遞增提取所需的差異連結網址。
  • 複製功能僅限標準和自訂表格。不支援虛擬和私人資料表。
  • 請務必準確更新來源資料表中的 modifiedon 欄位,確保增量同步作業正常運作。
  • 如要擷取 Picklist 欄位的標籤,資料要求必須包含 Prefer: data.include-annotations="*" 標頭,而不只是整數值。

後續步驟