共用方式為


開啟鏡像登陸區域需求和格式

本文詳述 Microsoft Fabric 中開放鏡像的登陸區域和資料表/資料欄作業需求。

重要

此功能處於預覽

一旦您透過網狀架構入口網站或 Fabric 工作區中的公用 API 建立開啟的鏡像資料庫,您就可以在鏡像資料庫專案的 [首頁] 頁面的 OneLake 中取得登陸區域 URL。 此著陸區域是您應用程式用於創建元數據檔案並以 Parquet 格式(未壓縮、Snappy、GZIP、ZSTD)載入數據的位置。

網狀架構入口網站的螢幕快照,其中顯示鏡像資料庫專案首頁中的登陸區域 URL 位置。

登陸區域

針對每個鏡像資料庫,OneLake 中都有一個用於儲存元數據和 delta 表格的唯一位置。 開放鏡像為應用程式提供著陸資料夾,以建立元數據檔案,並將數據推送至 OneLake。 鏡像功能會監控登陸區域中的這些檔案,並讀取資料夾中新增的表格和數據。

例如,如果您有在登陸區域中建立的數據表 (Table ATable BTable C、 ),請建立資料夾,例如下列 URL:

  • https://onelake.dfs.fabric.microsoft.com/<workspace id>/<mirrored database id>/Files/LandingZone/TableA
  • https://onelake.dfs.fabric.microsoft.com/<workspace id>/<mirrored database id>/Files/LandingZone/TableB
  • https://onelake.dfs.fabric.microsoft.com/<workspace id>/<mirrored database id>/Files/LandingZone/TableC

登陸區域中的元數據檔案

每個數據表資料夾都必須包含檔案 _metadata.json

此資料表元資料檔案包含 JSON 記錄,當前僅將唯一索引鍵欄指定為 keyColumns

例如,若要宣告數據行 C1 ,以及 C2 做為數據表的複合唯一索引鍵:

{
   "keyColumns" : ["C1", "C2"]
}

如果未 keyColumns 指定 或 _metadata.json ,則無法更新/刪除。 您可以隨時新增此檔案,但一旦新增 keyColumns 就無法變更。

登陸區域中的數據檔和格式

開啟鏡像支援 Parquet 作為登陸區域檔格式,無論是否壓縮。 支援的壓縮格式包括Snappy、GZIP 和 ZSTD。

寫入登陸區域的所有 Parquet 檔案都有下列格式:

<rowMarker><DataColumns>

  • rowMarker:欄位名稱是 __rowMarker__(包含在 rowMarker 前後的兩個底線)。 RowMaker 價值觀和行為:

    RowMarker\Scenario 如果在目的地中不存在具有相同鍵列的數據行 如果目的地中存在具有相同鍵欄的數據行
    0 (插入) 將行插入到目標位置 將列插入至目的地,不驗證重複鍵欄位的檢查。
    1 (更新) 將行插入目的地表格,無需驗證或例外狀況檢查是否存在具有相同鍵值列的行。 更新具有相同鍵欄的資料列。
    2 (移除) 沒有數據變更,無驗證/例外狀況可檢查具有相同鍵列的數據行是否存在。 刪除具有相同鍵值的數據行。
    4 (Upsert) 將資料列插入目標,未進行驗證或例外來檢查是否存在具有相同索引鍵的資料列。 使用相同鍵欄的欄位來更新該列。
  • 數據列順序:檔案中的所有記錄都應該按照交易中套用的自然順序。 對於更新多次的相同數據列而言,這很重要。 開啟鏡像會使用檔案中的順序來套用變更。

  • 檔案順序:檔案應該以單調遞增的數位新增。

  • 檔案名:檔案名為 20 位數,例如 00000000000000000001.parquet 第一個檔案,而 00000000000000000002.parquet 第二個數位則為 。 檔名應以連續數字為單位。 鏡像服務會自動刪除檔案,但最後一個檔案將會保留,讓發行者系統可以參考它,以依序新增下一個檔案。

初始載入

對於初始將數據載入開啟的鏡像資料庫,rowMarker 初始數據檔中是選擇性的,不建議使用。 當 rowMarker 不存在時,鏡像會將整個檔案視為 INSERT。

為了提升效能和精確的度量,rowMarker 是僅針對增量更改的強制欄位,用於執行更新/刪除/插入或更新操作。

漸進式變更

開啟鏡像功能將依序讀取增量變更並將其套用至目標 Delta 表格。 順序在變更記錄檔和檔案的順序中是隱含的。

一旦從任何數據列/檔案找到 rowMarker 數據行,數據變更就會被視為累加變更。

更新的資料列必須包含完整的資料列數據與所有欄位。

以下是一些示例 parquet 數據,記錄了將 E0001 的 EmployeeLocation 從 Redmond 更改為 Bellevue 的歷史變化。 在此案例中,EmployeeID欄已標示為著陸區元數據檔案中的關鍵欄。

__rowMarker__,EmployeeID,EmployeeLocation
0,E0001,Redmond
0,E0002,Redmond
0,E0003,Redmond
1,E0001,Bellevue

如果主鍵欄已更新,則應該通過刪除過去的主鍵欄並插入具有新主鍵和數據的行來呈現。 例如,將 E0001 的唯一rowMarkerEmployeeID標識碼變更為 E0002 的數據列記錄。 您不需要提供刪除資料列的所有欄位數據,只需提供關鍵欄位即可。

__rowMarker__,EmployeeID,EmployeeLocation
0,E0001,Bellevue
2,E0001,NULL
0,E0002,Bellevue

表格操作

開啟鏡像支持數據表作業,例如新增、卸除和重新命名數據表。

新增資料表

當啟用鏡像功能時,會捕捉應用程式新增至登陸區域的任何數據表。 在每次反覆運算中開啟新數據表的鏡像掃描。

刪除資料表

開啟同步會追蹤資料夾名稱。 如果刪除數據表資料夾,開啟鏡像會卸除鏡像資料庫中的數據表。

如果重新建立資料夾,開啟鏡像功能會刪除數據表,並使用資料夾中的新數據重新建立該數據表,方法是追蹤資料夾的ETag來完成。

嘗試卸除數據表時,您可以嘗試刪除資料夾,但有可能開啟鏡像仍在使用資料夾中的數據,而導致發行者刪除失敗。

重新命名數據表

若要重新命名數據表,請卸除並重新建立具有初始和增量數據的資料夾。 數據必須重新填入重新命名的數據表。

概要

您可以在架構資料夾內指定資料表路徑。 架構登陸區域應該有 <schemaname>.schema 資料夾名稱。 可以有多個架構,而且架構中可以有多個數據表。

例如,如果您有要在登陸區域中建立的架構 (Schema1Schema2) 和數據表 (Table ATable BTable C、 ),請在 OneLake 中建立類似下列路徑的資料夾:

  • https://onelake.dfs.fabric.microsoft.com/<workspace id>/<mirrored database id>/Files/LandingZone/Schema1.schema/TableA
  • https://onelake.dfs.fabric.microsoft.com/<workspace id>/<mirrored database id>/Files/LandingZone/Schema1.schema/TableB
  • https://onelake.dfs.fabric.microsoft.com/<workspace id>/<mirrored database id>/Files/LandingZone/Schema2.schema/TableC

表格欄位和欄位操作

欄位類型

  • 簡單的 parquet 類型在登陸區域受到支持。
  • 複雜類型應該寫入為 JSON 字串。
  • 地理、影像等二進位複雜類型可以儲存為登陸區域中的二進位類型。

新增欄位

如果將新的欄位新增至 parquet 檔案,則開放鏡像功能會將這些欄位新增至 delta 表格。

刪除欄位

如果從新的記錄檔中刪除欄位,請啟用鏡像功能以在新行中為這些欄位存放NULL,而舊行中的數據仍保留這些欄位。 若要刪除數據行, 請卸除數據表 ,然後再次在登陸區域中建立數據表資料夾,這會導致使用新的架構和數據重新建立 Delta 資料表。

啟用鏡射時,會一律聯集舊版中新增數據的所有欄。 若要移除數據行,請重新建立資料表/資料夾。

變更資料行類型

若要變更數據行類型,請卸除並重新建立具有新數據行類型之初始和累加數據的資料夾。 提供新的數據行類型而不重新建立數據表會導致錯誤,而該數據表的復寫將會停止。 重新建立數據表資料夾之後,複寫會以新的資料和架構繼續執行。

重新命名資料行

若要重新命名數據行,請刪除資料表資料夾,然後使用所有資料和新的資料列名稱重新建立資料夾。

清理過程

開啟鏡像的清除程式會將所有處理檔案移至名為 _ProcessedFiles_FilesReadyToDelete的個別資料夾。 7 天后,檔案會從這個資料夾移除。

後續步驟