动态文件修剪

动态文件修剪可以显著提高对 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 表的大小。