Delta Lake是DataBricks公司推出的一種數據湖方案。Delta Lake以數據為中心,圍繞數據流走向(數據從流入數據湖、數據組織管理和數據查詢到流出數據湖)推出了一系列功能特性,協助您搭配第三方上下游工具,搭建快捷、易用和安全的數據湖。

背景信息

通常的數據湖方案是選取大數據存儲引擎構建數據湖(例如,阿里云對象存儲OSS產品或云下HDFS),然后將產生的各種類型數據存儲在該存儲引擎中。在使用數據時,通過Spark或Presto對接數據分析引擎并進行數據解析。但該套方案存在如下問題:
  • 數據導入可能會失敗,失敗后清理臟數據和恢復作業困難。
  • 方案中沒有ETL(Extract Transform Load)過程,缺少必要的數據質量監管。
  • 方案中沒有事務將讀和寫隔離,致使流式和批式讀寫無法相互隔離。
Delta數據湖方案如下:
  • 在大數據存儲層之上提供了數據管理層,該數據管理層等同于數據庫中的元數據管理,其元數據隨著數據一起存放并對用戶可見(例如圖 1所示)。
  • Delta基于元數據管理引入了ACID,解決了因數據導入失敗而產生臟數據和數據導入時的讀寫隔離問題。
  • 元數據存儲了數據的字段信息,Delta提供了數據導入時數據校驗功能,保證數據質量。
  • 事務功能使得批式讀寫和流式讀寫能夠互相隔離。
說明 ACID指數據庫事務正確執行的四個基本要素的縮寫。包含:原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)和持久性(Durability)。
圖 1. 數據倉庫與數據湖
delta_data
Data Warehouse、Data Lake和Delta Lake對比如下所示。
對比項 Data Warehouse Data Lake Delta Lake
架構 計算存儲一體或分離 計算存儲分離 計算存儲分離
存儲管理 嚴格、非通用 原生格式 通用格式、輕量級
場景 報表、分析 報表、分析、數據科學 報表、分析、數據科學
靈活性 較高
數據質量和可靠性 很高 較高
事務性 支持 不支持 支持
性能 較高
擴展性 依賴于具體實現
面向人員 管理人員 管理人員、數據科學家 管理人員、數據科學家
成本

適用場景

Delta適用于云上數據湖數據管理解決方案。如果您存在以下場景,可以使用Delta:
  • 實時查詢:數據實時從上游流入Delta,查詢側即可查詢該數據,例如,在CDC場景下,Spark Streaming實時消費binlog時,使用Delta merge功能,實時將上游的數據通過merge更新到Delta Lake,然后可以使用Hive、Spark或Presto實時查詢。同時,由于支持ACID,保證了數據的流入和查詢的隔離性,不會產生臟讀數據。
  • 刪除或更新,GDPR(General Data Protection Regulation):通常數據湖方案不支持數據的刪除或更新。如果需要刪除或更新數據,則需要把原始數據清理掉,然后把更新后的數據寫入存儲。而Delta支持數據的刪除或更新。
  • 數據實時同步,CDC(Change Data Capture):使用Delta merge功能,啟動流作業,實時將上游的數據通過merge更新到Delta Lake。
  • 數據質量控制:借助于Delta Schema校驗功能,在數據導入時剔除異常數據,或者對異常數據做進一步處理。
  • 數據演化:數據的Schema并非固定不變,Delta支持通過API 方式改變數據的Schema。
  • 實時機器學習:在機器學習場景中,通常需要花費大量的時間用于處理數據,例如數據清洗、轉換、提取特征等等。同時,您還需要對歷史和實時數據分別處理。而Delta簡化了工作流程,整條數據處理過程是一條完整的、可靠的實時流,其數據的清洗、轉換、特征化等操作都是流上的節點動作,無需對歷史和實時數據分別處理。

與開源Delta Lake對比

EMR-Delta Lake豐富了開源Delta Lake的特性,例如對SQL和Optimize的支持等。下表列出了Delta Lake的基本特性,并對比EMR-Delta Lake與開源Delta Lake(0.6.1)。

特性 EMR-Delta 開源Delta
SQL
  • ALTER
  • CONVERT
  • CREATE
  • CTAS
  • DELETE
  • DESC HISTORY
  • INSERT
  • MERGE
  • OPTIMIZE
  • UPDATE
  • VACUUM
  • SAVEPOINT
  • ROLLBACK
  • CREATE
    說明 建表示例:CREATE TABLE <tbl> USING delta LOCATION <delta_table_path>
    • 僅支持基于已有的Delta目錄建表。
    • 建表時請不要指定Schema。
  • CONVERT
  • DESC HISTORY
  • VACUUM
API
  • batch read/write
  • streaming read/write
  • optimize
  • delete
  • update
  • merge
  • convert
  • history
  • vacuum
  • savepoint
  • rollback
  • batch read/write
  • streaming read/write
  • delete
  • update
  • merge
  • convert
  • history
  • vacuum
Hive connector 支持 支持
Presto connector 支持 支持
Parquet 支持 支持
ORC 不支持 不支持
文本格式 不支持 不支持
Data Skipping 支持 不支持
ZOrder 支持 不支持
Native DeltaLog 支持 不支持