Bloom 篩選索引

Bloom 篩選索引是一種有空間效率的資料結構,可讓您略過所選資料行的資料,特別是針對包含任意文字的欄位。

Bloom 篩選索引的運作方式

Bloom 篩選準則的運作方式是指出資料明確 不在檔案中 ,或 可能是位於檔案中 ,並定義誤判機率 (FPP) 。

Azure Databricks 支援檔案層級的 Bloom 篩選;每個資料檔案都可以有一個與它相關聯的單一 Bloom 篩選索引檔案。 讀取檔案之前,Azure Databricks 會檢查索引檔案, 而且只有在 索引指出檔案可能符合資料篩選準則時,才會讀取該檔案。 如果索引不存在,或未針對查詢的資料行定義 Bloom 篩選,Azure Databricks 一律會讀取資料檔案。

Bloom 篩選的大小取決於已建立 Bloom 篩選準則的集合中的數位元素,以及所需的 FPP。 FPP 越低,每個元素使用的位數目愈高,且其精確度就越精確,代價是磁碟空間越多且下載速度較慢。 例如,FPP 的 10% 需要每個元素 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

Bloom 篩選準則支援下列 (輸入) 資料類型的資料行:、、、、 doubletimestampdatelongfloat 和 。 stringintshortbyte Null 不會新增至 Bloom 篩選,因此任何 Null 相關篩選都需要讀取資料檔案。 Azure Databricks 支援下列資料來源篩選: andorinequalsequalsnullsafe 。 巢狀資料行 不支援 開開篩選。

組態和參考

預設會啟用 Bloom 篩選準則。 若要停用 Bloom 篩選,請將工作階段層級 spark.databricks.io.skipping.bloomFilter.enabled 設定設為 false

顯示 Bloom 篩選索引的清單

若要顯示索引清單,請執行:

spark.table("<table-with-indexes>").schema.foreach(field => println(s"${field.name}: metadata=${field.metadata}"))

例如:

顯示索引

Notebook

下列筆記本示範如何定義 Bloom 篩選索引,以加速「擷取堆疊」查詢中的指標。

Bloom 篩選示範筆記本

取得筆記本