动态文件修剪

动态文件修剪可以显著提高 Delta Lake 表上许多查询的性能。 包含筛选器语句或 WHERE 子句的查询的动态文件修剪触发器。 必须使用已启用 Photon 的计算才能在 MERGEUPDATEDELETE 语句中使用动态文件修剪。 不使用 Photon 时,只有 SELECT 语句利用动态文件修剪。

动态文件修剪对于非分区表或非分区列上的联接特别有效。 动态文件修剪的性能影响通常与数据聚类分析相关,因此请考虑使用 Z 排序来最大程度地提高优势。

有关动态文件修剪的背景和用例,请参阅 使用动态文件修剪在 Delta Lake 上实现更快的 SQL 查询

配置

动态文件修剪由以下 Apache Spark 配置选项控制:

  • spark.databricks.optimizer.dynamicFilePruning(默认值为 true):指示优化器向下推送筛选器的主标志。 设置为 false时,动态文件修剪不会生效。
  • spark.databricks.optimizer.deltaTableSizeThreshold(默认值为 10,000,000,000 bytes (10 GB)):表示连接探测侧触发动态文件修剪所需的 Delta 表的最小大小(以字节为单位)。 如果探测侧不是很大,那么向下推筛选器可能不值得,我们可以简单地扫描整个表。 可以通过运行 DESCRIBE DETAIL table_name 命令并查看 sizeInBytes 列来查找 Delta 表的大小。
  • spark.databricks.optimizer.deltaTableFilesThreshold(默认值为 10):表示触发动态文件修剪所需的联接探测端 Delta 表的文件数。 当探测端表包含的文件少于阈值时,不会触发动态文件修剪。 如果表只有几个文件,则启用动态文件修剪可能并不值得。 可以通过运行 DESCRIBE DETAIL table_name 命令并查看 numFiles 列来查找 Delta 表的大小。