什么是 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 的优化建议。
分区
参考链接:
- https://learn.microsoft.com/zh-cn/azure/databricks/tables/partitions#do-small-tables-need-to-be-partitioned
是否需要对小型表进行分区?
https://learn.microsoft.com/zh-cn/azure/databricks/tables/partitions#do-small-tables-need-to-be-partitioned
Databricks 建议不要对数据量少于 1 TB 的表进行分区。
表中每个分区的最小大小是多少?
Databricks 建议所有分区至少包含 1 GB 数据。 包含少量较大分区的表的性能往往优于包含大量较小分区的表。
Delta Lake 和 Parquet 是否共享分区策略?
Delta Lake 使用 Parquet 作为存储数据的主要格式,一些指定了分区的 Delta 表展示了类似于使用 Apache Spark 存储的 Parquet 表的组织方式。 Apache Spark 在以 Parquet 格式保存数据时使用 Hive 样式分区。 Hive 样式分区不属于 Delta Lake 协议,工作负载不应依赖此分区策略来与 Delta 表交互。
许多 Delta Lake 功能都打破了有关可能已从 Parquet、Hive 甚至更早的 Delta Lake 协议版本传输回的数据布局的假设。 应始终使用官方支持的客户端和 API 与 Delta Lake 中存储的数据进行交互。
最佳实践
参考链接:
- https://learn.microsoft.com/zh-cn/azure/databricks/delta/best-practices
Apache Spark 上的 Delta Lake 与 Parquet 之间的区别
https://learn.microsoft.com/zh-cn/azure/databricks/delta/best-practices#differences-between-delta-lake-and-parquet-on-apache-spark