开始
加载和管理数据
处理数据
政府
参考资料及资源
2023年4月21日更新
给我们反馈
一个布隆过滤器索引是一种节省空间的数据结构,支持在所选列上跳过数据,特别是对于包含任意文本的字段。
布隆过滤器通过声明数据是确定的来操作不是在文件,或者它是可能在文件,具有定义的误报概率(FPP)。
Databricks支持文件级Bloom过滤器;每个数据文件可以有一个单独的布鲁姆过滤器索引文件与之关联。在读取文件之前,Databricks检查索引文件并读取文件只有在索引指示文件可能匹配数据筛选器。如果索引不存在,或者没有为查询的列定义Bloom过滤器,Databricks总是读取数据文件。
布隆过滤器的大小取决于为其创建了布隆过滤器的集合中的元素数量和所需的FPP。FPP越低,每个元素使用的位数就越高,它就越准确,但代价是更多的磁盘空间和更慢的下载速度。例如,10%的FPP需要每个元素5位。
布隆过滤器索引是包含单行的未压缩Parquet文件。索引存储在_delta_index子目录相对于数据文件,并使用与带后缀的数据文件相同的名称index.v1.parquet。例如,数据文件的索引dbfs: / db1 / data.0001.parquet.snappy将被命名为dbfs: / db1 / _delta_index / data.0001.parquet.snappy.index.v1.parquet。
_delta_index
index.v1.parquet
dbfs: / db1 / data.0001.parquet.snappy
dbfs: / db1 / _delta_index / data.0001.parquet.snappy.index.v1.parquet
Bloom过滤器支持以下(输入)数据类型的列:字节,短,int,长,浮动,双,日期,时间戳,字符串。空值不会被添加到Bloom过滤器中,因此任何与空值相关的过滤器都需要读取数据文件。Databricks支持以下数据源过滤器:和,或,在,=,equalsnullsafe。布隆过滤器是不支持在嵌套列上。
字节
短
int
长
浮动
双
日期
时间戳
字符串
和
或
在
=
equalsnullsafe
布隆过滤器是默认启用的。要禁用Bloom过滤器,请设置会话级别spark.databricks.io.skipping.bloomFilter.enabled配置假。
spark.databricks.io.skipping.bloomFilter.enabled
假
创建bloom过滤器索引
Drop bloom过滤器指数
要显示索引列表,使用命令:
火花。表格(“< table-with-indexes >”).模式。foreach(场=>println(s”$ {场。名字}:元数据=$ {场。元数据}"))
例如:
下面的笔记本演示了如何定义一个Bloom过滤器索引来加速“大海捞针”的查询。
在新选项卡中打开笔记本