Microsoft Fabric 中的 Delta 資料表可從 OneLake 中儲存的資料,服務 Spark、SQL 分析端點、Power BI Direct Lake、Warehouse 及其他 Fabric 體驗。 最佳跨工作負載效能取決於兩個因素:
- 建立和維護表格的工作量。
- 吞噬桌面的引擎。
Lakehouse 資料表通常由 Spark、Fabric pipeline 複製活動 或 Dataflow Gen2 管理。 Spark 是最常見的寫入工具,並提供最廣泛的配置與維護控制選項。 倉庫與資料庫鏡像會自動管理它們的實體佈局。 鏡像目錄會保留來源系統中管理的版面配置。 消費者需求大致相容,但 Power BI Direct Lake 有額外的儲存需求以達到最佳效能。
只要需求相容,就使用同一張共用資料表。 關於需要另建另一張資料表的例外,請參見 「何時建立另一張資料表」。
了解版面所有權
首先,先確認是哪個工作負載負責實體資料表的配置。 下表中的控制項是與跨負載工作表佈局與維護相關的關鍵控制,並非各引擎功能的詳盡清單。
| 資料存放區 | 寫入器或擷取方法 | 版面與維護權責歸屬 | 按鍵控制 |
|---|---|---|---|
| Lakehouse | Spark | 由使用者管理 |
檔案大小: 自適應目標檔案大小 與 檔案層級壓縮目標。 寫入與維護: 刪除向量、 自動壓縮、 優化寫入, OPTIMIZE以及 VACUUM。 資料組織: 液態聚類、 分割、 Z 階與 V 階。 |
| Lakehouse | Fabric 管線複製活動或 Dataflow Gen2 | 服務負責寫入資料;湖倉所有者負責維護資料表 | 目的地專屬的寫入設定。 可透過 Spark、 Lakehouse 維護或 管線維護活動,分別執行相容維護。 |
| 倉儲 | Fabric Data Warehouse、Fabric 管線複製活動或資料流程 Gen2 | 倉庫管理 | 資料叢集 與 倉庫層級的 V-Order 設定。 |
| 鏡像物品 | 鏡像服務 | 這取決於 鏡像類型 | 資料庫鏡像使用系統管理的 V 級 Delta 佈局,且沒有直接的佈局控制。 鏡像目錄保留原始檔案的排版,支援時可在原始碼系統中進行優化。 |
跨工作負載指引
下表總結了生產者與消費者建議的做法。
| Producer | Consumer | 建議方法 |
|---|---|---|
| Lakehouse:Spark 作家 | Spark | 使用 Fabric Spark 2.0 或更新版本的預設值並啟用自動壓縮功能。 當已測量的述詞可受益於更佳的檔案略過時,請考慮使用液態叢集。 |
| Lakehouse:Spark 作家 | SQL 分析端點 | 使用與 Spark 建議相同的配置。 不要只為了 SQL 分析端點效能而設定固定目標檔案大小、任意列限制或 V-Order 。 |
| Lakehouse:Spark 作家 | Power BI Direct Lake | 使用與 Spark 建議相同的配置,並額外啟用 V-Order,或使用 readHeavyForPBI 資源設定檔。 |
| Lakehouse:Fabric 管線或 Dataflow Gen2 編譯器 | Spark、SQL 分析端點,或 Power BI Direct Lake | 監控產生的檔案佈局,並另行排程相容的湖屋維護作業。 某些目的地模式,如 Dataflow Gen2 增量更新,會施加維護限制。 |
| 倉儲 | Fabric Data Warehouse 或 Spark | 使用由系統管理的版面配置。 Fabric Data Warehouse 自動管理壓縮整理和其他維護作業。 利用 資料聚類 來改善具有重複選擇性謂詞的工作負載的檔案跳躍率。 |
| 倉儲 | Power BI Direct Lake | 保留 預設的倉庫V-Order設定。 當資料 聚類 有助於共享查詢模式時,請使用。 |
| Mirroring | Spark、SQL 分析端點,或 Power BI Direct Lake | 對於資料庫鏡像,請使用由系統管理的 V-Ordered Delta 配置。 對於鏡射目錄,若支援,請在來源系統中最佳化其底層檔案。 請參閱什麼是 Fabric 中的鏡像? |
優化 Lakehouse 表格
Lakehouse Delta 資料表無論是 Spark、Pipeline 複製活動 或 Dataflow Gen2 撰寫,都需要明確的維護策略。 Spark 是本節的主要範例,因為它提供了 Fabric 中最廣泛的佈局與維護控制。
這很重要
資料表維護對於跨引擎的最佳寫入與讀取效能至關重要。 即使是僅附加的工作負載,起初無需維護就表現良好,也可能累積過多的小檔案,影響 Spark、SQL 分析端點、Direct Lake 及外部資料讀取器。 有關自動與手動壓實方法,請參見 壓縮三角表 。
使用 Spark 執行時的預設值
當 Spark 寫入資料表時,請使用 Fabric Spark 執行階段 2.0 或更新版本的預設設定:
- 保持啟用 自適應目標檔案大小 。 它會自動為每個資料表選擇一個 128 MB 到 1 GB 的目標。
- 保持檔案 層級壓縮目標 啟用,以避免重寫先前符合適應目標的檔案。
- 保持刪除向量啟用。
- 不要隨意設定每個檔案的最大列數。 資料列的寬度各不相同,因此對於較窄的資料表,資料列數上限可能會產生過多的小型檔案。
在 Fabric Spark 執行階段 1.3 中,自適應目標檔案大小、檔案層級壓縮目標和刪除向量可作為選擇啟用的設定使用。
當管線複製活動或 Dataflow Gen2 寫入該資料表時,請檢查產生的檔案布局,並另行安排維護作業。 不要以為這些寫程式會套用 Spark 執行時的預設值。
- Fabric 管線可以在寫入後協調執行 Lakehouse 維護作業。
這很重要
使用增量重新整理的 Dataflow Gen2 Lakehouse 目的地不支援 OPTIMIZE 或 REORG TABLE。 請遵守 Dataflow Gen2 的增量刷新限制。
防止並壓縮小型檔案
對於 Spark 撰寫的資料表,請使用 自動壓縮。 此功能在寫入後評估資料表碎片,僅在需要時執行壓縮。 這樣一來,在執行維護前就無需另外進行資料表健康檢查。
請參考以下指引來處理例外及輔助功能:
| Scenario | 建議方法 |
|---|---|
| Spark 撰寫的表格 | 啟用 自動壓實 作為預設維護策略。 |
| 串流式或微批次寫入 | 啟用 自動壓縮 並 優化寫入 ,以減少小檔案累積。 |
| 具有嚴格寫入延遲要求的工作負載 | 將 OPTIMIZE 另行排程,而不要執行同步自動壓實。 |
| 現有表格,包含累積的小檔案 | 先執行一次 OPTIMIZE,然後啟用 自動壓實功能,以便持續進行維護。 |
| 經常更新、刪除或合併的資料表 | 保持 刪除向量 和 自動壓實 為啟用狀態。 |
OPTIMIZE 會壓縮檔案,並在檔案中超過 5% 的記錄被刪除向量參考時,自動清除該檔案的刪除向量。 只有在您必須實際清除低於該門檻的記錄,或需要滿足特定的合規要求時,才使用 REORG TABLE ... APPLY (PURGE)。
Note
自動壓縮 只有在分割區同時達到其小檔案觸發條件時,才會清除 刪除向量 。 如果工作負載在未產生小檔案的情況下進行更新或刪除,請定期執行 OPTIMIZE 以清除符合資格的刪除向量。 當你必須強行進行身體清洗時使用 REORG TABLE ... APPLY (PURGE) 。
使用獨立的排程執行 VACUUM,以在保留期過後移除未參考的檔案。
VACUUM 雖然回收儲存空間,但不會改善主動檔案的配置。
Warning
在未評估時間回溯需求以及並行讀取者或寫入者之前,不要縮短 VACUUM 保留期間。 過早移除檔案可能會導致所需的表格版本無法取得。
整理用於略過檔案的資料
當重複的篩選或處理模式可因改善略過檔案而獲益時,請使用液態分群。 液態叢集資料表需要 OPTIMIZE或自動壓縮 來整理新寫入的資料。
避免預設分割。 當有特定需求足以合理化這些操作上的取捨時,請使用它;例如,隔離會跨彼此不重疊的分割區更新、刪除或合併資料的並行寫入作業。 欲了解更多資訊,請參閱「何時使用分割」。
對於現有的分割資料表,當選擇性謂詞經常在分割區內依相同欄位進行篩選時,請考慮使用 Z-Order。
優化倉庫管理的資料表
Fabric Data Warehouse 無論擷取方式如何,都能管理實體 Delta 表格的佈局。
利用 Warehouse 提供的策略控制來調整資料版面:
- 當查詢重複使用選擇性謂詞於同一欄位時,對大型資料表應用 資料聚類 。
- 請持續啟用 V-Order ,以支援讀取導向及混合工作負載。 V-Order預設是啟用的。
- 考慮 關閉 V-Order 以處理寫入密集型倉庫工作負載。
Warning
停用 V-Order 是倉庫層級的不可逆操作。 在停用前先測試完整的讀寫工作負載。
欲了解完整的倉庫指引,請參閱Fabric Data Warehouse中的績效指引。
優化鏡像資料
你能否改善實體版面配置,取決於 Fabric 是否複製資料或參考原始檔案:
- 資料庫鏡像:Fabric 將來源資料複製到 OneLake 的 Delta 表格,並管理 V-Ordered 檔案的佈局與維護。 你無法直接在鏡像目的地上設定目標檔案大小、刪除向量清理、液態叢集、分割區設定或 V-Order。
- 鏡像目錄:Fabric 會同步中繼資料,並使用 OneLake 捷徑就地參照來源資料。 Fabric 不會重寫或維護這些檔案。 當支援功能允許時,改善原始碼系統的實體佈局與清理。 這些變更可以透過快捷鍵看到,無需在 Fabric 中建立另一個副本。
針對資料庫鏡像資料:
- 使用選擇性謂詞,避免在 Spark 和 SQL 查詢中加入不必要的欄位。
- 設計 Power BI 語意模型與 DAX 指標,以有效利用 Direct Lake 的使用。
鏡像目錄:
- 使用原始碼平台支援的資料表維護與版面配置功能。
- 評估查詢捷徑的 Fabric 使用者的原始檔案與列群組分布。
- 對於 Direct Lake,當來源配置無法滿足效能需求時,考慮建立額外的維度建模、 V 排序 的服務層。
關於鏡像概念、類型及支援來源,請參見《什麼是 Fabric 中的鏡像?》以及元資料鏡像如何運作。
應用針對消費者的優化
Spark 和 SQL 分析端點在相同的自適應湖屋佈局下表現良好。 使用自適應目標檔案大小,避免產生過多小型檔案,並在已測得的述詞可受益於改進的檔案略過時,套用液態叢集。 不要只為了 Spark 或 SQL 分析端點效能而啟用 V-Order 。 有關引擎的具體細節,請參閱 SQL 分析端點效能考量。
Power BI Direct Lake
Direct Lake 使用相同的底層 Delta 表,但新增了與轉碼與 增量框架相關的建議:
- 檔案與列組配置:避免小 列組 及列組分布不均。 此配置會產生更多 VertiPaq 欄位段,並增加轉碼開銷。
-
V-Order:請遵循 跨工作負載指引中的提供者特定建議。 對於主要透過 Direct Lake 使用的 Spark 撰寫的資料表,請啟用 V-Order 或使用
readHeavyForPBI資源設定檔。 - 更新模式:盡可能偏好附加式更新 模式 ,以保留現有 Parquet 檔案並支援增量框架。
Note
Direct Lake 通常在 100 萬至 1600 萬行的行組中表現最佳。 在變更受支援的產生器設定之前,請先評估資料列群組分佈與 Direct Lake 效能。
對於 Spark 撰寫的資料表, spark.sql.parquet.native.writer.maxRowGroupRowCount 當 原生執行引擎 寫入 Parquet 檔案時,會設定每列群組的最大列數。 預設值為 0,不施加最大值。 若分析顯示列群組大小影響 Direct Lake 效能,請先設定測試過的限制,再撰寫或重寫表格。 例如:
spark.conf.set("spark.sql.parquet.native.writer.maxRowGroupRowCount", 8_000_000)
不要只為了達到特定的列數而設定限制。 列寬、壓縮、檔案分布與容量平行性也會影響效能。 使用 Delta Analyzer 來評估產生的版面配置。
關於框架、轉碼、列群組、更新模式及 Delta 分析器的詳細指引,請參見 「了解 Direct Lake 查詢效能」。
將指引套用到獎章層
銅、銀、金代表資料用途與精煉。 它們不判定版面配置是由使用者管理還是由系統管理,也不要求為每個取用者分別建立獨立副本。
| 層 | 主要目標 | 跨工作負載指引 |
|---|---|---|
| 銅牌(著陸) | 保持原始碼的忠實度與擷取吞吐量 | 在使用 auto compaction 維護由 Spark 寫入的資料表時,優先考量寫入吞吐量。 除非你刻意為該用途設計模型和資料形狀,否則避免在原始青銅資料表上使用 Power BI Direct Lake 語意模型。 |
| 銀(精選) | 提供經過驗證且符合標準的資料以供重複使用 | 在相容的 Fabric 使用者間重複使用該表格。 對於由 Spark 寫入的 Lakehouse 資料表,僅在 Direct Lake 為主要取用者時才啟用 V-Order。 |
| 黃金(服務) | 提供可直接用於業務的維度、事實資料、彙總與分析模型 | 偏好此層用於 Direct Lake 語意模型。 可在相容消費者間重複使用表格,並套用本文所述的生產者專屬控制措施。 |
解決佈局與維護問題
使用以生產者為意識的修復措施。 當目的模式支援這些操作時,對湖屋資料表套用 Spark 維護指令。 將訊號視為指標而非通用閾值,並根據資料表的寫入模式與使用者效能進行驗證。
| 狀況 | 訊號 | 湖倉資料表 | 倉庫表 |
|---|---|---|---|
| 過多的小檔案 | 檔案數量增加速度超過活動資料表大小,且檔案數量仍低於自適應目標值。 | 使用 Spark 時,先 OPTIMIZE 對現有待辦事項執行一次性處理,然後啟用 自動壓縮。 對於管線複製活動或 Dataflow Gen2 寫入作業,請另行排程受支援的 Lakehouse 維護。 |
沒有行動。 倉庫壓實是自動化的。 |
| 舊版超大檔案 | 檔案數量遠高於目前的自適應目標,且檔案數量過少,限制了掃描平行性。 | 透過覆寫 CREATE OR REPLACE TABLE AS SELECT 或啟用 自適應目標檔案大小 來重寫資料表。 |
沒有行動。 Warehouse 會自動管理檔案大小。 |
| 刪除向量累積 |
DESCRIBE HISTORY 指標 顯示刪除向量的新增或更新速度快於壓縮移除,可能導致 讀取負擔增加。 |
保持自動 壓縮 開啟。 若刪除向量持續累積而未觸發小檔案壓縮,則排程 OPTIMIZE。 僅在有明確的清除需求時才使用 REORG TABLE ... APPLY (PURGE)。 |
沒有行動。 清理工作由系統管理。 |
| 檔案跳過不良 | 選擇性述詞掃描資料表中的大部分資料,或 分群品質評估 顯示組織情況不佳。 | 使用 Spark 時,可以設定 液體叢集 或使用 Z-Order 來處理現有的分割資料表。 | 配置 倉庫資料叢集。 |
| Direct Lake 轉碼額外負荷 | Delta Analyzer 會顯示檔案過多、列群組較小,或更新後出現廣泛的重轉碼。 | 壓縮小型檔案、檢視 列組,並將 V-Order 套用到 Spark 撰寫的資料表。 可選擇性地設定 液體叢集 以提升 Parquet 檔案中的壓縮品質。 | 保持啟用V-Order並評估資料分群。 |
| 未被參照的檔案儲存空間增長 | 在資料變更作業後,OneLake 儲存體的增長速度快於使用中資料表大小的增長速度。 | 依照留任率要求運作 VACUUM 。 |
沒有行動。 清理工作由系統管理。 |
對於鏡像資料,請遵循 最佳化鏡像資料 中針對生產端的特定補救措施。 資料庫鏡像由系統管理;對於鏡像目錄,請在來源平台上執行受支援的維護作業。
針對 Lakehouse 資料表,Spark 支援的檢查選項包括:
- 執行
DESCRIBE DETAIL以檢查檔案數量、總大小及評估的delta.targetFileSize.adaptive屬性。 - 跑
DESCRIBE HISTORY去檢視寫入模式和維護歷史。 - 當你需要詳細的 Direct Lake 列群組和更新模式分析時,可以使用 Delta Analyzer 。
檢查平均檔案大小
用 DESCRIBE DETAIL 來計算平均檔案大小,作為表格佈局的初步指標:
details = spark.sql("DESCRIBE DETAIL schema_name.table_name").first()
table_size_gb = details["sizeInBytes"] / (1024**3)
num_files = details["numFiles"]
avg_file_size_mb = (
details["sizeInBytes"] / num_files / (1024**2)
if num_files
else 0
)
print(f"Table size: {table_size_gb:.2f} GB")
print(f"Number of files: {num_files}")
print(f"Average file size: {avg_file_size_mb:.2f} MB")
平均值可以隱藏分割區或最近與先前壓縮檔之間的偏斜。 若平均值顯示可能有佈局問題,請檢查個別 Parquet 檔案或使用 Delta 分析 儀評估分布,再調整維護設定。
何時建立另一張資料表
不要因為多個 Fabric 引擎會消耗資料就另建一個實體資料表。
當它有獨立用途時,建立另一個表格,例如:
- 一種改變資料顆粒或業務意義的轉換或彙整。
- 不同的安全性、保存或資料品質要求。
- 共享資料表無法滿足的延遲或刷新需求。
- 一種針對消費者的配置,其衡量效益超過儲存、處理、血統及治理成本。