開始
加載和管理數據
處理數據
政府
參考和資源
2023年3月30日更新
給我們反饋
一個布隆過濾器索引是一種節省空間的數據結構,它支持在所選列上跳過數據,特別是對於包含任意文本的字段。
Bloom過濾器通過聲明數據是確定的來操作不是在文件,或者說它就是文件可能在文件,具有定義的假陽性概率(FPP)。
Databricks支持文件級Bloom過濾器;每個數據文件都可以有一個與之關聯的Bloom過濾器索引文件。在讀取文件之前,Databricks會檢查索引文件是否已讀取隻有在索引指示文件可能匹配數據篩選器。如果索引不存在,或者沒有為查詢的列定義Bloom過濾器,Databricks總是讀取數據文件。
Bloom過濾器的大小取決於已創建Bloom過濾器的集合中元素的數量和所需的FPP。FPP越低,每個元素使用的比特數就越高,它就越準確,代價是更多的磁盤空間和更慢的下載速度。例如,10%的FPP需要每個元素5位。
Bloom過濾器索引是一個未壓縮的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過濾器。若要禁用Bloom篩選器,請設置會話級別spark.databricks.io.skipping.bloomFilter.enabled配置假.
spark.databricks.io.skipping.bloomFilter.enabled
假
創建bloom過濾器索引
滴花濾鏡指數
要顯示索引列表,執行:
火花.表格(“< table-with-indexes >”).模式.foreach(場= >println(s”$ {場.名字}:元數據=$ {場.元數據}"))
例如:
下麵的筆記本演示如何定義Bloom過濾器索引加速“大海撈針”查詢。
在新標簽頁打開筆記本