開啟鏡像登陸區域需求和格式
本文詳述 Microsoft Fabric 中開放鏡像的登陸區域和資料表/資料欄作業需求。
重要
此功能處於預覽。
一旦您透過網狀架構入口網站或 Fabric 工作區中的公用 API 建立開啟的鏡像資料庫,您就可以在鏡像資料庫專案的 [首頁] 頁面的 OneLake 中取得登陸區域 URL。 此著陸區域是您應用程式用於創建元數據檔案並以 Parquet 格式(未壓縮、Snappy、GZIP、ZSTD)載入數據的位置。
登陸區域
針對每個鏡像資料庫,OneLake 中都有一個用於儲存元數據和 delta 表格的唯一位置。 開放鏡像為應用程式提供著陸資料夾,以建立元數據檔案,並將數據推送至 OneLake。 鏡像功能會監控登陸區域中的這些檔案,並讀取資料夾中新增的表格和數據。
例如,如果您有在登陸區域中建立的數據表 (Table A
、 Table B
Table 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 的唯一rowMarker
EmployeeID
標識碼變更為 E0002 的數據列記錄。 您不需要提供刪除資料列的所有欄位數據,只需提供關鍵欄位即可。
__rowMarker__,EmployeeID,EmployeeLocation
0,E0001,Bellevue
2,E0001,NULL
0,E0002,Bellevue
表格操作
開啟鏡像支持數據表作業,例如新增、卸除和重新命名數據表。
新增資料表
當啟用鏡像功能時,會捕捉應用程式新增至登陸區域的任何數據表。 在每次反覆運算中開啟新數據表的鏡像掃描。
刪除資料表
開啟同步會追蹤資料夾名稱。 如果刪除數據表資料夾,開啟鏡像會卸除鏡像資料庫中的數據表。
如果重新建立資料夾,開啟鏡像功能會刪除數據表,並使用資料夾中的新數據重新建立該數據表,方法是追蹤資料夾的ETag來完成。
嘗試卸除數據表時,您可以嘗試刪除資料夾,但有可能開啟鏡像仍在使用資料夾中的數據,而導致發行者刪除失敗。
重新命名數據表
若要重新命名數據表,請卸除並重新建立具有初始和增量數據的資料夾。 數據必須重新填入重新命名的數據表。
概要
您可以在架構資料夾內指定資料表路徑。 架構登陸區域應該有 <schemaname>.schema
資料夾名稱。 可以有多個架構,而且架構中可以有多個數據表。
例如,如果您有要在登陸區域中建立的架構 (Schema1
、 Schema2
) 和數據表 (Table A
、 Table B
Table 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 天后,檔案會從這個資料夾移除。