Bloom 筛选器索引

注释

使用已启用 Photon 的计算和 Databricks Runtime 12.2 或更高版本时,预测性 I/O 在读取性能方面要优于 Bloom 筛选器。 请参阅 什么是预测输入/输出(I/O)?

在 Databricks Runtime 13.3 及更高版本中,Databricks 建议对 Delta 表布局使用聚类分析。 请参阅 对表使用液体聚类分析

Databricks 仅在使用不支持这些功能的计算时建议使用 Bloom 筛选器。

Bloom 筛选器索引是一种空间高效的数据结构,可用于跳过所选列的数据,尤其是对于包含任意文本的字段。

Bloom 筛选器索引的工作原理

Azure Databricks Bloom 筛选器索引由每个数据文件的数据跳过索引组成。 Bloom 筛选器索引可用于确定列值是否确实不在文件中,或者有可能在文件中。 在读取文件 Azure Databricks 之前,将检查索引文件,并且仅当索引指示该文件可能与数据筛选器匹配时,该文件才会读取。

Bloom 筛选器支持具有以下输入数据类型的列:byteshortintlongfloatdoubledatetimestampstring。 Null 不会添加到 Bloom 筛选器,因此任何与 null 相关的筛选器都需要读取数据文件。 Azure Databricks 支持以下数据源筛选器:andorinequalsequalsnullsafe。 嵌套列不支持 Bloom 筛选器。

配置和参考

使用以下语法启用 Bloom 筛选器:

CREATE BLOOMFILTER INDEX
ON TABLE table_name
FOR COLUMNS(column_name OPTIONS (fpp=0.1, numItems=5000))

有关语法详细信息,请参阅 CREATE BLOOM FILTER INDEXDROP BLOOM FILTER INDEX

若要禁用 Bloom 筛选器操作,请将会话级别 spark.databricks.io.skipping.bloomFilter.enabled 配置设置为 false

显示 Bloom 筛选器索引的列表

若要显示索引列表,请运行:

spark.table("<table-with-indexes>").schema.foreach(field => println(s"${field.name}: metadata=${field.metadata}"))

例如:

显示索引