动态文件修剪
动态文件修剪可以显著提高 Delta Lake 表上许多查询的性能。 包含筛选器语句或 WHERE
子句的查询的动态文件修剪触发器。 必须使用已启用 Photon 的计算才能在 MERGE
、UPDATE
和 DELETE
语句中使用动态文件修剪。 不使用 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 表的大小。