ML 函式庫是用無法翻成 SQL 的命令式程式碼寫的,卻需要大量讀取資料,因此最直白的整合方式就是向中繼資料層問出資料表目前由哪些 Parquet 檔案組成,再交給函式庫。論文主張再往前一步:讓 DataFrame API 變成宣告式的,把轉換操作延遲求值,於是客戶端函式庫捕捉到的是一份關聯運算子計畫,而不是立刻執行。這份計畫可以被最佳化並下推到儲存層,讓 ML 的資料準備階段也享有和 SQL 相同的快取、資料跳過與佈局紅利。由於 DataFrame 是 Spark 分析生態系共通的資料型別,只要最佳化這一條路徑,MLlib、GraphFrames、SparkR 與眾多社群函式庫就一起加速。
05
把資料品質與治理放進中繼資料層
一旦有一層負責仲裁資料表存取,它就是強制正確性與政策最自然的位置,而不必信任每一個寫入端。Delta Lake 實作了 schema enforcement,要求上傳資料必須符合資料表 schema,另有 constraints API 讓資料表擁有者限制可寫入的值,客戶端函式庫會自動拒絕違規記錄或把它們隔離到特定位置。同一層也能當治理的收束點:在把讀取雲端物件儲存原始檔案的憑證交出去之前,先檢查客戶端是否有權存取該資料表,並可靠地記錄每一次存取。這正面打擊了 data lake 淪為 data swamp 的老問題——品質與治理被推到下游,然後永遠沒人解決。
06
開放格式作為治理與去鎖定的論證
除了效能與成本,論文還提出一套法規與組織面的理由來支持可直接存取的開放格式。日益嚴格的資料管理要求,意味著組織可能得在很短時間內搜尋舊資料集、刪除特定資料或更換處理基礎設施,而統一在開放格式上,等於保證這些事都不必卡在廠商身上。同樣的性質也讓 Lakehouse 很適合 data mesh 這類分散式團隊結構:每個資料集都能從物件儲存直接取用,消費端不必被安置到生產端的運算資源上。作者判讀軟體產業的長期方向就是走向開放資料格式,並預期企業資料會跟上。
07
被否決的替代路線
論文檢視並駁回了兩條通往相同目標的路。第一條是乾脆廢掉 data lake,把所有資料放進運算與儲存已分離的資料倉儲;作者稱之為 straw man,而它遲遲沒有被採用本身就是證據——它仍然難以處理影片、音訊與文字,也仍然不給 ML 快速的直接存取。第二條是在倉儲前面架一層大規模平行的服務層,像 Hive LLAP 那樣;作者判斷它營運更貴、更難管理,效能大概還不如直接存取物件儲存,而且會同時劣化物件儲存最吸引人的三個性質:低成本、對彈性工作負載的高頻寬、以及極高的可用性,最後還只是把「該選什麼高效讀取格式」的問題換個地方擺著。
基礎資料表格式必須保持可被直接 I/O 讀取,但系統對自己額外維護的檔案握有完全控制權。在 Delta Lake 與 Delta Engine 中,每個資料檔案的欄位 min 與 max 統計值就存放在儲存交易日誌的同一批 Parquet 檔案裡,查詢可以據此跳過那些值域根本不可能符合述詞的整個資料檔案。這種資料跳過的效益,取決於基礎資料在被過濾欄位上叢集得多好,這也是它必須和佈局最佳化搭配的原因。當時還在實作 Bloom filter 型的索引,作者並指出,沿著「對原始資料檔案建索引」那條研究線的各種結構,都可以放在同一個位置。
04
在固定格式內做資料佈局最佳化
即使格式凍結,系統仍然能決定記錄如何分布到各個檔案。最重要的槓桿是記錄排序,也就是決定哪些記錄被叢集在一起、因此可以一起便宜地讀出。Delta Lake 支援依單一維度排序,也支援 Z-order 與 Hilbert 這類空間填充曲線,藉此一次取得多個維度上的局部性,而不是只有排序鍵的第一個欄位。論文還勾勒了未來格式可以開放的其他佈局自由度,例如在每個資料檔案內以不同順序擺放欄位,或對不同的記錄群組採用不同的壓縮策略。
05
三種最佳化如何互相搭配
這些技術是針對分析型工作負載的傾斜存取模式設計的:大多數查詢集中打在一小塊熱資料上。這塊熱資料由快取以倉儲級的結構提供,因此它的效能完全不必受制於開放格式。冷資料仍留在物件儲存上,那裡的主要成本就是每個查詢讀了多少資料。此時用佈局把會被一起存取的記錄叢集起來,再用 zone map 決定要碰哪些檔案的哪些位元組範圍,就能讓引擎像專有的封閉式倉儲一樣把 I/O 壓到最低——即使它讀的是標準開放檔案。
06
宣告式 DataFrame 的執行路徑
在論文的示意流程中,使用者寫的是普通的 DataFrame 程式:載入 users 資料表、過濾出 buyer、投影出幾個欄位、把 null 補成 0,然後把結果交給模型的 fit 呼叫。這些都不會立即執行:Spark 的延遲求值把整段資料載入運算捕捉成一份查詢計畫,交給 Delta Lake 的客戶端函式庫。查詢規劃器會把選擇與投影下推進每一次讀取所對應的 data source plugin 類別,於是 Delta Lake 的 data source 可以套用快取、資料跳過與感知佈局的讀取,而不是先全掃再過濾。同時它也會查詢中繼資料層,決定目前這個資料表版本包含哪些分割與檔案。
07
存取控制與 ML 生命週期整合
由於客戶端最終是直接讀取雲端儲存上的原始物件,中繼資料層就成了施加政策的位置:它先驗證客戶端對該資料表的權限,才發出能讀取其檔案的憑證,並把這次存取寫進稽核日誌。在寫入端,schema enforcement 與 constraints API 會拒絕或隔離違反宣告 schema 或值域限制的記錄。對資料科學而言,Delta Lake 與 MLflow 的實驗追蹤服務整合,讓資料科學家能記錄某次實驗用的是哪個資料表版本,日後精確重建同一份資料——這正是臨時拼湊的檔案式管線給不了的可重現性。
“We define a Lakehouse as a data management system based on low-cost and directly-accessible storage that also provides traditional analytical DBMS management and performance features such as ACID transactions, data versioning, auditing, indexing, caching, and query optimization.”
“Regardless of the exact design, however, the core challenge is that the data storage format becomes part of the system's public API to allow fast direct access, unlike in a traditional DBMS.”
“According to a survey by Dimensional Research and Fivetran, 86% of analysts use out-of-date data and 62% report waiting on engineering resources numerous times per month [47].”