布隆過濾器的索引

一個布隆過濾器索引是一個空間數據結構,使數據選擇列上跳過,特別是對於包含任意的文本字段。

請注意

在磚運行時的13.2及以上,磚建議使用集群為三角洲表布局。看到使用液體集群為三角洲表

布隆過濾器索引如何工作的呢

布隆過濾器操作通過明確說明數據不是在文件,或者它是可能在文件,定義了一個假陽性概率(FPP)。

磚支持文件級的布魯姆過濾器;每個數據文件可以有一個布隆過濾器與之關聯的索引文件。在閱讀文件數據磚之前檢查索引文件和讀取文件隻有在該指數表明,文件可能匹配數據過濾。磚總是讀取數據文件如果索引不存在或者布隆過濾器不是為一個查詢列定義。

布隆過濾器的大小取決於元素數量的組創建了布隆過濾器和所需的FPP。FPP越低,每個元素使用的比特數越高,越精確,代價是更多的磁盤空間和慢下載。例如,一個FPP 10%需要5位/元素。

布隆過濾器指數是一個未壓縮的鑲花文件,其中包含單個行。存儲在索引_delta_index相對於數據文件和子目錄中使用相同的名稱作為數據文件的後綴index.v1.parquet。例如,數據文件的索引dbfs: / db1 / data.0001.parquet.snappy將命名為dbfs: / db1 / _delta_index / data.0001.parquet.snappy.index.v1.parquet

布魯姆過濾器支持列以下數據類型(輸入):字節,,int,,浮動,,日期,時間戳,字符串。null不是添加到布隆過濾器,所以任何零相關濾波器需要讀取的數據文件。磚支持以下數據源的過濾器:,,,=,equalsnullsafe。布魯姆過濾器是不支持在嵌套列。

配置和參考

布魯姆過濾器是默認啟用。禁用布魯姆過濾器,設置會話水平spark.databricks.io.skipping.bloomFilter.enabled配置

布隆過濾器索引的列表顯示

顯示列表的索引,運行:

火花(“< table-with-indexes >”)。模式foreach(= >println(s”$ {的名字}:元數據=$ {元數據}))

例如:

顯示索引”src=

示例筆記本:布隆過濾器索引

下麵的筆記本演示了定義一個布隆過濾器指數加速“海裏撈針”查詢。

布隆過濾器示例筆記本