ブルーム フィルターのインデックス
Note
Photon 対応コンピューティングと Databricks Runtime 12.2 以上を使用する場合は、予測 I/O が、ブルーム フィルターよりも読み取りパフォーマンスが優れています。 「予測 I/O とは」を参照してください。
Databricks Runtime 13.3 以上での Databricks では、Delta テーブル レイアウトにクラスタリングを使用することを推奨しています。 「Delta テーブルに Liquid Clustering クラスタリングを使用する」を参照してください。
Databricks では、それらの機能をサポートしていないコンピューティングを使用する場合にのみ、ブルーム フィルターを使用することをお勧めします。
ブルーム フィルターのインデックスは、選択した列 (特に任意のテキストを含むフィールド) でデータをスキップできるようにする、スペース効率の高いデータ構造です。
ブルーム フィルターのインデックスのしくみ
Azure Databricks のブルーム フィルターのインデックスは、各データ ファイルのデータ スキップ インデックスで構成されています。 ブルーム フィルターのインデックスを使用して、列の値がファイル内に明らかに存在 "しない" か、ファイル内に存在 "する可能性がある" かを判断できます。 Azure Databricks は、ファイルを読み取る前にインデックス ファイルをチェックします。そして、ファイルがデータ フィルターと一致する可能性があることをインデックスが示している場合にのみ、ファイルが読み取られます。
ブルーム フィルターでは、入力データ型が byte
、short
、int
、long
、float
、double
、date
、timestamp
、string
の列がサポートされます。 null 値はブルーム フィルターに追加されないので、null 値関連のフィルターではデータ ファイルを読み取る必要があります。 Azure Databricks では、and
、or
、in
、equals
、equalsnullsafe
の各データ ソース フィルターがサポートされています。 入れ子になった列では、ブルーム フィルターは "サポートされていません"。
構成と参照
ブルーム フィルターを有効にするには、次の構文を使用します。
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」を参照してください。
ブルーム フィルター操作を無効にするには、セッション レベル spark.databricks.io.skipping.bloomFilter.enabled
の構成を false
に設定します。
ブルーム フィルターのインデックスの一覧を表示する
インデックスの一覧を表示するには、次を実行します。
spark.table("<table-with-indexes>").schema.foreach(field => println(s"${field.name}: metadata=${field.metadata}"))
次に例を示します。