Delta Lake是DataBricks公司推出的一种数据湖方案,Delta是这套方案中的一个核心组件。在该方案中,围绕数据从流入数据湖、数据组织管理、数据查询到流出数据湖,Delta推出了一系列功能特性,方便用户使用Delta配合其他上下游工具,搭建一个快捷、易用、安全的数据湖。

背景信息

一般构建数据湖的方式是,用户选取一个大数据存储引擎,如云上的Aliyun OSS等对象存储产品,或者云下的HDFS等,将产生的各种类型的数据存储在该存储引擎之中。在数据使用时,使用Spark、Presto等能够对接多种数据格式的分析引擎来分析数据。这套方案至少存在以下几个问题:

  • 数据导入可能会失败,失败后清理脏数据和恢复作业都异常麻烦。
  • 由于没有ETL(Extract Transform Load)过程,缺少必要的数据质量控制。
  • 没有事务保证,读和写之间不能很好隔离,流式和批式读写无法协同存在。
Delta很好的解决了这几个问题。本质上说,Delta提供一个大数据存储层之上的一个数据管理层,这个管理层可以理解为数据库中的元数据管理,只不过这些元数据随着数据一起存放,并且对用户可见(如下图所示)。Delta基于元数据的管理引入了ACID,这样数据导入失败产生的脏数据和数据导入时的读写隔离问题就得到了解决。由于元数据存储了数据的字段信息,因此Delta还提供了在数据导入的时候对数据进行校验的功能,数据质量能够得到保证。最后,事务的功能使得批式读写和流式读写能够互相隔离。
说明 ACID指数据库事务正确执行的四个基本要素的缩写。包含:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。
图 1. 数据仓库与数据湖
delta_data

对比数据仓库(Data Warehouse)、数据湖(Data Lake)和Delta Lake就可以发现,Delta Lake实际上是介于数据仓库和数据湖之间的一个产品。它既不像数据仓库那样把所有的数据管理都把握在自己手里,也不像传统数据湖那样对数据不加任何控制和管理,而是结合了两者的优点。Delta Lake的这种方案,在当今数据来源多样、数据需求多样的大数据时代,可以说非常具有吸引力。Data Warehouse、Data Lake和Delta Lake对比如下:

对比项 Data Warehouse Data Lake Delta Lake
架构 计算存储一体/分离 计算存储分离 计算存储分离
存储管理 严格、非通用 原生格式 通用格式、轻量级
场景 报表、分析 报表、分析、数据科学 报表、分析、数据科学
灵活性 较高
数据质量/可靠性 很高 较高
事务性 支持 不支持 支持
性能 较高
扩展性 依赖于具体实现
面向人员 管理人员 管理人员、数据科学家 管理人员、数据科学家
成本

Delta应用场景

Delta特别适合作为云上数据湖的数据管理解决方案。如果用户的使用场景只是部分的契合这个场景,也非常适合使用Delta,例如:

  • 实时查询:数据可以实时从上游流入Delta,查询侧可以立即查询这些数据。同时,由于有ACID的支持,数据的流入和查询有很好的隔离性,不会产生脏读问题。
  • 删除/更新,GDPR(General Data Protection Regulation):一般的数据湖不支持数据的删除/更新。如果要这么做,需要把原始数据清理掉,把更新后的数据写入存储。而delta提供了数据的删除/更新支持。
  • 数据实时同步,CDC(Change Data Capture):用户可以使用Delta提供的merge功能,启动一个流作业,实时将上游的数据更新merge到Delta Lake。
  • 数据质量控制:借助于Delta提供的Schema校验功能,用户可以方便地在数据导入时剔除异常数据,或者对异常数据做进一步处理。
  • 数据演化:用户的数据Schema并不是一成不变的。Delta提供了方便的API使得用户可以轻易地改变数据的Schema。
  • 实时机器学习:在机器学习场景中,用户往往花费大量的时间用于处理数据,进行数据清洗、转换、提取特征等等。同时,用户还不得不同时面对历史数据和实时产生的数据。用户不得不重复的启动一轮又一轮的作业,或者构建一套Lambda架构的数据处理方案。Delta的存在简化了这些工作流程。整条数据处理过程是一条完整的、可靠的实时流,数据的清洗、转换、特征化等操作都是作为流上的一个节点动作,用户也不用去对历史和实时数据分别处理。

EMR-Delta

EMR-Delta丰富了开源Delta的特性,如对SQL的支持、Optimize支持、优化的并发冲突控制等等。下面的表列出了Delta Lake的基本特性,并将 EMR-Delta与开源Delta(0.5.0)做了对比。

特性 EMR-Delta 开源Delta
SQL
  • ALTER
  • CONVERT
  • CREATE
  • CTAS
  • DELETE
  • DESC HISTORY
  • INSERT
  • MERGE
  • OPTIMIZE
  • UPDATE
  • VACUUM
  • 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
  • batch read/write
  • streaming read/write
  • delete
  • update
  • merge
  • convert
  • history
  • vacuum
Hive connector 支持 支持
Presto connector 支持 支持
Parquet 支持 支持
ORC 不支持 不支持
文本格式 不支持 不支持
Data Skipping 暂不支持 不支持
zOrder 暂不支持 不支持
Native DeltaLog 支持 不支持