备注
使用已启用 Photon 的计算和 Databricks Runtime 12.2 或更高版本时,预测性 I/O 在读取性能方面要优于 Bloom 筛选器。 请参阅什么是预测性 I/O?
在 Databricks Runtime 13.3 及更高版本中,Databricks 建议对 Delta 表布局使用聚类分析。 请参阅对 Delta 表使用 liquid 聚类分析。
只有在使用不支持这些功能的计算时,Databricks 才建议使用 Bloom 筛选器。
Bloom 筛选器索引是一种节省空间的数据结构,可跳过选定列中的数据(特别对于包含任意文本的字段)。
Azure Databricks Bloom 筛选器索引由每个数据文件的数据跳过索引组成。 Bloom 筛选器索引可用于确定列值是否确实不在文件中,或者有可能在文件中。 读取文件前,Azure Databricks 会检查索引文件,并且仅在索引指示该文件可能与数据筛选器匹配时才会读取该文件。
Bloom 筛选器支持具有以下输入数据类型的列:byte
、short
、int
、long
、float
、double
、date
、timestamp
和 string
。 不会向 Bloom 筛选器添加 NULL 值,因此所有与 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
。
若要显示索引列表,请运行:
spark.table("<table-with-indexes>").schema.foreach(field => println(s"${field.name}: metadata=${field.metadata}"))
例如: