Delta Lake 是什么?

湖中水坝的航拍照片

作者

Matthew Kosinski

Staff Editor

IBM Think

Delta Lake 是什么?

作为一种开源数据存储格式,Delta Lake 结合了 Apache Parquet 数据文件与可靠的数据日志。Delta Lake 格式为数据湖带来了关键数据管理功能,例如 ACID 事务和数据版本控制,使其成为许多数据湖库的基础。

Delta Lake 最先由 Databricks 于 2016 年开发,它是一种开放的表格格式,是用于表格数据的一种开源框架,可在现有文件格式的基础上构建元数据层。具体来说,Delta Lake 使用 Parquet 表进行数据存储。其他开放表格格式包括 Apache Iceberg 和 Apache Hudi。

利用元数据层,Delta Lake 和其他开放表可优化搜索查询并支持许多标准表格式无法实现的高级数据操作。组织经常使用 Delta Lake 来提高其数据湖的可靠性和直观性。

Delta Lake 的创建是湖仓一体架构发展的关键一步,该架构将数据湖的灵活存储与数据仓库的高性能结合在一起。

小球在轨道上滚动的三维设计

最新的 AI 新闻 + 洞察分析

在每周的 Think 时事通讯中,发现专家精选的有关 AI、云等的洞察分析和新闻。 

Delta Lake 和数据湖有哪些区别?

Delta Lake 和数据湖经常被放在一起讨论,因此,了解这两种技术之间的区别很重要。

数据湖是一种低成本数据存储环境,旨在处理任何数据类型和格式的大型数据集。大多数数据湖使用云对象存储平台,例如 Amazon Simple Storage Service (S3)、Microsoft Azure Blob Storage 或 IBM® Cloud Object Storage。

Delta Lake 是一种表格数据存储格式,组织可以在数据湖或其他数据存储中使用。

Delta Lake 不是一种数据湖,也不是数据湖的替代品。更确切地说,我们可以将数据湖视为“位置”,而将 Delta Lake 视为“方式”:

  • 数据存储在哪里?在数据湖中。
  • 数据是如何存储的?作为 Delta Lake 表。

Delta Lake 格式有助于更轻松地管理数据湖且效率更高。

数据湖有很多优点,但它们通常缺乏内置的数据质量控制,并且直接查询数据湖可能很困难。组织必须经常从数据湖中获取数据,进行清理并加载到单独的数据仓库数据市场中,然后才能使用。

通过引入元数据层,Delta Lake 为组织提供了一种强制模式、跟踪和回滚更改并支持 ACID 事务的方法。

用户可以直接在数据湖上运行结构化查询语言 (SQL) 查询、分析工作负载和其他活动,从而简化商业智能 (BI)、数据智能 (DI)、人工智能 (AI) 和机器学习 (ML)。

AI Academy

数据管理是生成式 AI 的秘诀吗?

深入了解为什么高质量数据对于成功使用生成式 AI 至关重要。

Delta Lake 的工作原理

Delta Lake 有 2 个核心组件:包含数据的数据文件以及包含这些数据文件的关联元数据的事务日志。

  • Delta Lake 中的数据文件称为“Delta Lake 表”或“Delta 表”,使用列式 Parquet 文件格式。

  • 事务日志将最近的活动存储在 JSON 日志文件中,并将较旧的元数据归档在 Parquet 文件中。日志与数据文件一起存储在数据湖中。

事务日志记录有关数据文件的信息(例如列名称以及最小值和最大值)和对文件所做的更改(更改内容、时间、方式以及更改者)。

日志是 Delta Lake 与标准 Parquet 文件不同的原因。事务日志本质上充当管理层和数据湖中所有活动的一组指令,支持 ACID 事务、时空旅行和架构演变等功能。

常规 Parquet 文件是不可篡改的,这意味着它们在创建后无法更改,只能被重写。Delta Lake 的事务日志将物理操作(直接对数据执行的操作)与逻辑操作(对元数据执行的操作)分开,从而使 Parquet 文件在功能上(如果不是字面意思)可改变。

例如,用户不能从 Parquet 表中删除单个列,除非重写整个文件。在 Delta Lake 中,用户可以通过更改表的元数据以将该列标记为已删除,从而有效地删除该列。列会保留在文件中,但所有后续查询、更新和写入都会看到元数据,并将列视为不存在。

Delta Lake 的关键功能

ACID 事务

"ACID" 代表“原子性、一致性、隔离性和持久性”,这些是可靠数据事务的关键属性。

  • 原子性意味着对数据的所有更改都像单个操作一样执行。

  • 一致性意味着数据在事务开始和结束时处于一致的状态。

  • 隔离性意味着事务的中间状态对其他事务不可见。

  • 持久性意味着对数据所做的更改会持续存在,并且无法撤消。

标准数据湖无法支持 ACID 事务。如果没有 ACID 保证,数据湖很容易出现事务失败、部分写入和其他可能损坏数据的问题。

Delta Lake 的事务日志可以按照 ACID 原则记录事务信息,使得数据湖对于流数据管道、商业智能、分析和其他用例更加可靠。

模式执行和模式演进

管理员可以在事务日志中设置架构要求,这些要求适用于摄取的所有数据。不符合模式要求的数据将被拒绝。

管理员还可以使用事务日志更改现有文件的模式,例如添加新列或更改列类型。这一过程被称为“模式演化”。

查询优化

虽然事务日志不是传统索引,但它可以帮助查询更快、更高效地检索数据。

例如,用户正在搜索一列中的某个值。使用事务日志中的元数据,用户的查询可以跳过不可能存在目标值的任何文件。如果最小值高于或最大值低于目标值,则查询将跳过该文件。

事务日志还存储文件路径。查询可以使用这些文件路径直接访问相关文件,而不是扫描整个数据湖。

Delta Lake 可以使用 Z-ordering 等技术将类似的数据更紧密地存储在磁盘上,从而更容易跳过不相关的文件并找到相关的文件。

数据运营

普通的 Parquet 文件是不可变的,但用户可以通过元数据层操作 Delta 表。Delta Lake 支持各种运营,包括添加或删除列、更新条目和合并文件。

数据版本控制

由于事务日志记录了 Delta 表中发生的一切,因此,它可以有效地维护每个表的版本历史记录。用户可以查询过去的版本,甚至可以进行时间旅行,即回滚更改以恢复以前的表版本。

连接器

Delta Lake 拥有丰富的连接器生态系统。该格式可与各种计算引擎一起使用,例如 Apache Spark、Apache Hive、Apache Flink 或 Trino。Delta Lake 还具有适用于 Python、Java、Scala 和其他语言的应用程序编程接口 (API),使开发人员能够以编程方式管理和查询 Delta 表。

访问和管理控制

虽然 Delta Lake 本身不强制实施安全控制,但它可以与数据安全数据治理工具集成。然后,这些工具可以使用事务日志中的元数据来审核活动、跟踪更改并实施 基于角色的访问控制 (RBAC) 策略。

支持批处理和流式处理数据

Delta Lake 可以接受流式处理和批处理数据,数据可按流或批的形式从 Delta 表发送到连接的服务。

最新动态

Delta Lake 4.0 是 Delta Lake 计划的下一个主要版本,计划添加更多功能,例如:

  • 协调提交,简化同时从多个引擎写入多个表的过程。

  • 一种新的“变体”数据类型,用于存储传统上难以用表格格式存储的半结构化数据。

  • 类型扩展,使用户能够更改列的数据类型。

Delta Lake 与其他开放表格式的对比

Delta Lake 与 Apache Iceberg

Apache Iceberg 是一种用于海量分析表的高性能开源格式。与 Delta Lake 一样,Iceberg 在现有表格式之上构建元数据层,以支持 ACID 事务以及数据湖中的其他操作。

Iceberg 可以将数据存储在 Parquet、ORC 或 Avro 文件中,而 Delta Lake 只使用 Parquet。Iceberg 还使用三层元数据层,而不是单个事务日志,例如 Delta Lake。

Iceberg 与许多不同的查询引擎原生集成,这是数据湖中基于 SQL 分析的常见选择。

Delta Lake 与 Apache Hudi

与 Delta Lake 和 Iceberg 一样,Hudi 在数据层之上维护元数据层。Hudi 可以使用 Parquet、HFile 和 ORC 文件格式,其元数据层采用“时间线”的形式,记录数据层中发生的所有情况。

Hudi 专为会频繁处理小批量数据的增量数据处理而设计。这种对增量处理的关注使 Hudi 成为实时分析和变更数据捕获 (CDC) 的常见选择。

Delta Lake 在湖仓一体中的作用

Delta Lake 格式的开发为创建数据湖仓一体铺平了道路。

长期以来,组织主要在数据仓库中管理数据。虽然对分析和商业智能很有用,但数据仓库需要严格的架构。它们不能很好地处理非结构化或半结构化数据;随着组织加大对 AI 和 ML 的投资,这些数据已变得越来越普遍,也越来越重要。

2010 年代初数据湖的兴起为企业提供了一种将来自各种数据源的多样化数据聚合到一个位置的方法。

然而,数据湖也有其自身的问题。它们往往缺乏质量控制,不支持 ACID 事务,也不便于进行直接查询。

为了使数据可用,组织通常需要构建单独的提取、转换、加载 (ETL) 数据管道,将数据从湖移动到仓库。

Delta Lake 于 2016 年问世,为数据湖添加了 ACID 事务、模式实施和时间旅行功能,使其在直接查询和分析方面更加可靠。

Delta Lake 于 2019 年开源,在湖仓一体架构的形成过程中发挥了关键作用,该架构将数据湖的灵活性与数据仓库的高性能结合在一起。

许多组织通过在现有数据湖的基础上构建 Delta Lake 存储空间,并将其与 Spark 或 Hive 等数据处理引擎整合来创建湖仓一体。

湖仓一体有助于支持数据整合并简化数据架构,因为使用此架构,将不必维护可能导致数据孤岛的独立数据湖和数据仓库。

反过来,这些简化的架构有助于确保数据科学家、数据工程师和其他用户可以在需要时访问他们需要的数据。AI 和 ML 的工作负载是 Delta Lake 驱动的湖仓一体的常见用例。

数据湖本身对于这些工作负载已经很有用,因为它们可以存储大量结构化、非结构化和半结构化数据。

通过添加 ACID 事务和模式执行等功能,Delta Lake 以标准数据湖无法企及的方式帮助确保训练数据的可靠性和数据质量。

相关解决方案
IBM watsonx.data

利用混合、开放的湖仓一体,无论数据位于何处,都能为 AI 和分析所用。

了解 watsonx.data
数据湖解决方案

利用湖仓一体架构因应当今的数据挑战。可以在几分钟内连接数据,快速获得可靠的洞察分析,并降低数据仓库成本。

深入了解 IBM 数据湖解决方案
数据和分析咨询服务

通过 IBM Consulting 发掘企业数据的价值,建立以洞察分析为导向的组织,实现业务优势。

了解分析服务
采取下一步行动

设计数据战略,消除数据孤岛、降低复杂性并提高数据质量,以获得卓越的客户和员工体验。

深入了解数据管理解决方案 了解 watsonx.data