前言
最近部門有提供機會考 Databricks 的 Data Engineer Professional 證照,Databricks 的計算框架是 Spark,而資料儲存層是用 Delta lake,Delta lake 只在 AWS Support 做 case 時有碰到 2、3 個,坦白說不甚了解,所以就趁著準備證照時來寫寫 Delta lake 的文章吧!一起 Delta lake 101 學起來。
什麼是 Delta lake
Delta lake 是一套開放原始碼的資料儲存框架,它定義了與操作方式無關的 資料湖架構 ,讓我們能在其之上用現行熱門的分散式計算引擎、雲端環境或本地環境來操作資料湖中的資料,目前已支持分散式計算引擎有 Spark, PrestoDB, Flink, Trino, Hive, Snowflake, Google BigQuery, Athena, Redshift, Databricks 和 Azure Fabric,而支持的程式語言是 Scala, Java, Rust 和 Python,若使用 UniForm (Delta Universal Format) 的話,就可以透過 Iceberg 或 Hudi client 讀取 Delta table。
Delta lake 特點
支持 ACID
Delta lake 會用以檔案為基準的 transaction log 來擴充 parquet 檔案,這讓它可以做到 ACID,以前通常只有 RDB 對 ACID 的支持程度較好,因為 Delta lake 跟 Spark API 完全相容,等於是在用 batch 或 streaming 處理大量數據的時候也能達成 transaction,非常強大。
因為支持 ACID,它也就能幫我們解決:
- Streamlined Data Append:在即使有並行寫入的情況下,Delta lake 也能讓簡化資料累積且更有效率了。
- Simplified Data Modification:Delta lake 讓資料修改變得簡單了,也能確保資料一致性。
- Data Integrity Through Job Failures:Delta lake 能在任務失敗時避免資料不一致,讓資料完整。
- Support for Real-time Operations:Delta lake 能在 streaming 操作時做為強大的資料源或接收源。
- Efficient Historical Data Version Management:Delta lake 支持歷史資料存取,也被稱為 Time travel,其成本效益基於你的具體使用方案為何。
DML 操作:Upsets 和 Merge
也因為 Delta lake 支持資料更新和刪除,所以也就很難得看到能支持 Upsert 和 Merge 的大數據開放原始碼專案。
Liquid Clustering
Liquid Clustering 彈性地讓我們重新定義 clustering key 但不用重寫資料,允許數據佈局隨著時間的推移與分析需求一起發展,Liquid Clustering 是用來取代 table 分區和 Z-ordering,能簡化數據佈局決策和優化查詢效率,也支持 streaming table 和 materialized view。
以下幾種場景特別適合 Liquid Clustering:
- table 通常會使用較特殊、唯一或不常見的欄位進行篩選。
- 在資料分配時會發生嚴重資料傾斜的 table 。
- 資料成長快速且需要維運和 tuning 的 table。
- 有並行寫入需求的 table。
- 訪問模式經常改變的 table。
- 使用某 key 做分區時會發生某些分區資料特別多或特別少的 table。
Time Travel
Time Travel 允許我們能從 Delta table 快照中查詢到舊的資料,不用這麼怕在做 ETL 時搞砸資料了,然後它也在 table 資料快速改變的情境中提供快照隔離,用的時候也很簡單,只要在 SQL 後面加上 AS OF
時間或版本就行了。
SELECT * FROM default.people10m TIMESTAMP AS OF '2018-10-18T22:15:12.013Z'
SELECT * FROM delta.`/tmp/delta/people10m` VERSION AS OF 123
Deletion Vector
Deletion Vectors 是一種儲存優化功能,以往刪除一筆資料時,整個 parquet 檔案會需要重寫,當 Deletion Vector 啟用時,它會在被刪除的資料列上做標記,讓我們在刪除資料時不會這麼頻繁的重寫 parquet 檔案。
101 結論
在初探 Delta lake 這個儲存框架時,真的是挺驚訝在大數據處理中竟然可以支援以往 RDB 才能做到的操作,最後得來秀一下 Delta lake 官方網站中張炫炮的圖,可以說在大數據處理下什麼屁都可以用 Delta lake 來儲存資料了🤣

下篇就來實際操作一下吧!