什么是 Delta Lake?
Delta Lake 是经过优化的存储层,为 Databricks 上湖屋中的表提供了基础。 Delta Lake 是开源软件,它使用基于文件的事务日志扩展了 Parquet 数据文件,可以处理 ACID 事务和可缩放的元数据。 Delta Lake 与 Apache Spark API 完全兼容,并且其设计能够与结构化流式处理紧密集成,让你可以轻松地将单个数据副本用于批处理和流式处理操作,并提供大规模增量处理。
Delta Lake 是 Azure Databricks 上所有操作的默认格式。 除非另行指定,否则 Azure Databricks 上的所有表都是 Delta 表。 Databricks 是 Delta Lake 协议的原始开发商,它将持续为开源项目做出积极贡献。 Databricks 平台中的许多优化和产品都建立在 Apache Spark 和 Delta Lake 提供的保证基础之上。 有关 Azure Databricks 优化的信息,请参阅有关 Azure Databricks 的优化建议。
有关 Delta Lake SQL 命令的参考信息,请参阅 Delta Lake 语句。
Delta Lake 事务日志具有定义完善的开放协议,任何系统都可以使用该协议来读取日志。 请参阅 Delta 事务日志协议。
Delta Lake 入门
默认情况下,Azure Databricks 上的所有表都是 Delta 表。 无论你使用的是 Apache Spark 数据帧还是 SQL,只需使用默认设置将数据保存到湖屋,就能获得 Delta Lake 的所有优势。
有关创建表、读取、写入和更新数据等基本 Delta Lake 操作的示例,请参阅教程:Delta Lake。
Databricks 提供了许多有关 Delta Lake 最佳做法的建议。
转换数据并将其引入 Delta Lake
Azure Databricks 提供了许多产品用于加速和简化将数据载入湖屋的过程。
- 增量实时表:
- COPY INTO
- 自动加载程序
- “添加数据”UI
- 以增量方式将 Parquet 或 Iceberg 数据转换到 Delta Lake
- 一次性将 Parquet 或 Iceberg 数据转换到 Delta Lake
- 第三方合作伙伴
有关引入选项的完整列表,请参阅将数据引入 Databricks 湖屋。
更新和修改 Delta Lake 表
Delta Lake 的原子事务为更新数据和元数据提供了许多选项。 Databricks 建议不要直接与 Delta Lake 文件目录中的数据和事务日志文件交互,以免损坏表。
- Delta Lake 支持使用合并操作来实现更新插入。 请参阅使用合并以更新插入的方式插入到 Delta Lake 表中。
- Delta Lake 为基于筛选器和分区的选择性覆盖提供了大量选项。 请参阅使用 Delta Lake 选择性地覆盖数据。
- 你可以手动或自动更新表架构,而而无需重写数据。 请参阅更新 Delta Lake 表架构。
- 启用列映射以重命名或删除列而不重写数据。 请参阅使用 Delta Lake 列映射重命名和删除列。
Delta Lake 上的增量和流式处理工作负载
Delta Lake 已针对 Azure Databricks 上的结构化流式处理进行优化。 增量实时表通过简化的基础结构部署、增强的缩放和托管的数据依赖项扩展了本机功能。
查询表的旧版本
每次写入到 Delta 表都会创建一个新的表版本。 可以使用事务日志来查看对表的修改以及查询旧的表版本。 请参阅使用 Delta Lake 表历史记录。
Delta Lake 架构增强
Delta Lake 在写入时会验证架构,确保写入到表中的所有数据都符合你设置的要求。
使用 Delta Lake 管理文件和为数据编制索引
Azure Databricks 为 Delta Lake 设置了许多默认参数,这些参数会影响数据文件的大小和历史记录中保留的表版本数量。 Delta Lake 结合使用元数据分析和物理数据布局来减少为了执行任何查询而要扫描的文件数量。
配置和查看 Delta Lake 设置
Azure Databricks 将 Delta Lake 表的所有数据和元数据存储在云对象存储中。 许多配置可以在表级别或者在 Spark 会话中设置。 可以查看 Delta 表的详细信息以了解配置了哪些选项。
使用 Delta Lake 和增量实时表的数据管道
Azure Databricks 鼓励用户在清理和扩充数据时利用奖牌式体系结构通过一系列表处理数据。 Delta Live Tables 通过优化的执行和自动化的基础结构部署和缩放来简化 ETL 工作负荷。
Delta Lake 的功能兼容性
并非所有 Databricks Runtime 版本都包含所有 Delta Lake 功能。 有关 Delta Lake 版本控制的信息,请参阅 Azure Databricks 如何管理 Delta Lake 功能兼容性?。
Delta Lake API 文档
对于 Delta 表的大多数读取和写入操作,可使用 Spark SQL 或 Apache Spark DataFrame API。
有关特定于 Delta Lake 的 SQL 语句,请参阅 Delta Lake 语句。
Azure Databricks 可确保与 Databricks Runtime 中的 Delta Lake API 的二进制兼容性。 若要查看每个 Databricks Runtime 版本中打包的 Delta Lake API 版本,请参阅 Databricks Runtime 发行说明中相关文章的“系统环境”部分。 有关适用于 Python、Scala 和 Java 的 Delta Lake API 文档,请参阅 OSS Delta Lake 文档。