LoginSignup
0
0

More than 1 year has passed since last update.

DatabricksのBloomフィルターインデックス

Last updated at Posted at 2022-10-03

Bloom filter indexes | Databricks on AWS [2022/9/8時点]の翻訳です。

本書は抄訳であり内容の正確性を保証するものではありません。正確な内容に関しては原文を参照ください。

Bloomフィルターインデックスは、特に任意のテキストを含むフィールドなど、特定のカラムのデータスキッピングを可能にする空間効率性の高いデータ構造です。

Bloomフィルターインデックスの動作原理

Bloomフィルターは、定義された偽陽性の確率(FPP)を用いて、確実にファイルにデータが無い、あるいは、おそらくファイルにあるということを宣言することでオペレーションを行います。

DatabricksではファイルレベルのBloomフィルター、それぞれのデータファイルには、関連づけられた単一のBloomフィルターインデックスファイルが割り当てられます。ファイルを読み込む前に、Databricksはインデックスファイルをチェックし、インデックスによってファイルがデータフィルターにマッチするかもしれないということが示された場合にのみファイルが読み込まれます。インデックスが存在しない、あるいはクエリーされたカラムにBloomフィルターが定義されていない場合、Databricksは常にデータファイルを読み込みます。

Bloomフィルターのサイズは、Bloomフィルターを作成したセット内のエレメント数と必要となるFPPに依存します。FPPが低いほど、エレメントごとに使用されるビットの数は高くなり精度は高まりますが、ディスク容量を多く消費し、ダウンロードが遅くなります。例えば、FPP10%にはエレメントあたり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フィルターは、以下の(入力)データタイプのカラムをサポートします:byteshortintlongfloatdoubledatetimestampstring。NullはBloomフィルターに追加されませんので、Nullに関係するフィルターの場合は常にデータファイルを読み込みます。Databricksでは、以下のデータソースのフィルターをサポートしています:andorinequalsequalsnullsafe。Bloomフィルターはネストされたカラムではサポートされません

設定とリファレンス

Bloomフィルターはデフォルトで有効化されています。Bloomフィルターを無効化するには、セッションレベルで設定spark.databricks.io.skipping.bloomFilter.enabledfalseに設定します。

Bloom filter indexの一覧表示

インデックスの一覧を表示するには、以下を実行します。

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

サンプル:

ノートブック

以下のノートブックでは、Bloomフィルターインデックスを定義することで、どのように「藁の中から針を探す」クエリーをスピードアップしているのかをデモンストレーションしています。

Bloom filterデモノートブック

Databricks 無料トライアル

Databricks 無料トライアル

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0