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。 不会向 Bloom 筛选器添加 NULL 值,因此所有与 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}"))

例如:

显示索引