注释
使用已启用 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 筛选器支持具有以下输入数据类型的列:byte
、short
、int
、long
、float
、double
、date
、timestamp
和 string
。 Null 不会添加到 Bloom 筛选器,因此任何与 null 相关的筛选器都需要读取数据文件。 Azure Databricks 支持以下数据源筛选器:and
、or
、in
、equals
和 equalsnullsafe
。 嵌套列不支持 Bloom 筛选器。
配置和参考
使用以下语法启用 Bloom 筛选器:
CREATE BLOOMFILTER INDEX
ON TABLE table_name
FOR COLUMNS(column_name OPTIONS (fpp=0.1, numItems=5000))
有关语法详细信息,请参阅 CREATE BLOOM FILTER INDEX 和 DROP 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}"))
例如: