Bloom 篩選索引
注意
使用已啟用 Photon 的計算和 Databricks Runtime 12.2 或更新版本時,預測性 I/O 優於布魯姆篩選條件,以取得讀取效能。 請參閱 什麼是預測性 I/O?。
在 Databricks Runtime 13.3 和更新版本中,Databricks 建議針對 Delta 數據表配置使用叢集。 請參閱針對差異資料表使用液態叢集 \(英文\)。
Databricks 只有在使用不支持這些功能的計算時,才建議使用 Bloom 篩選。
Bloom 篩選索引是一種具有空間效率的數據結構,可讓所選數據行上的數據略過,特別是針對包含任意文字的欄位。
Bloom 篩選索引的運作方式
Azure Databricks Bloom 篩選索引是由每個數據檔略過索引的數據所組成。 Bloom 篩選索引可用來判斷數據行值明確 不在檔案中 ,或是可能位於 檔案中 。 讀取 Azure Databricks 檔案之前會檢查索引檔案,而且只有在索引指出檔案可能符合數據篩選條件時,才會讀取檔案。
Bloom 篩選支援具有下列輸入資料類型的數據行:byte
、、、short
、long
float
double
int
、date
timestamp
、 和 。string
Null 不會新增至 Bloom 篩選,因此任何 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
。
顯示 Bloom 篩選索引清單
若要顯示索引清單,請執行:
spark.table("<table-with-indexes>").schema.foreach(field => println(s"${field.name}: metadata=${field.metadata}"))
例如: