Bloom 筛选器索引

注释

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

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

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}"))

例如:

显示索引