Bloom-szűrőindexek

A Bloom-szűrőindexek olyan területhatékonyános adatszerkezetek, amelyek lehetővé teszik az adatok kihagyését a kiválasztott oszlopokon, különösen a tetszőleges szöveget tartalmazó mezőknél. A Bloom-szűrő úgy működik, hogy vagy közli, hogy az adatok véglegesen nem a fájlban vannak, vagy valószínűleg a fájlban vannak, meghatározott hamis pozitív valószínűséggel (FPP).

Azure Databricks a fájlszintű Bloom-szűrőket; minden adatfájlhoz egyetlen Bloom-szűrőindexfájl társítva lehet. Fájlolvasás előtt a Azure Databricks ellenőrzi az indexfájlt, és a rendszer csak akkor olvassa be a fájlt, ha az index azt jelzi, hogy a fájl megfelelhet egy adatszűrőnek. Azure Databricks mindig beolvassa az adatfájlt, ha egy index nem létezik, vagy ha nincs Bloom-szűrő definiálva egy lekérdezett oszlophoz.

A Bloom-szűrők mérete a készlet azon elemeinek számától függ, amelyekhez a Bloom-szűrő létre lett hozva, valamint a szükséges FPP-től. Minél alacsonyabb az FPP, annál nagyobb az elemenkénti felhasznált bitek száma, és annál pontosabb lesz, több lemezterület és lassabb letöltések árán. Például egy 10%-os FPP elemenként 5 bitet igényel.

A Bloom-szűrőindex egy tömörítetlen Parquet-fájl, amely egyetlen sort tartalmaz. Az indexek az adatfájlhoz viszonyítva az alkönyvtárban vannak tárolva, és ugyanazt a nevet használják, mint az adatfájl a _delta_indexindex.v1.parquet utótaggal. Az adatfájl indexének neve például dbfs:/db1/data.0001.parquet.snappydbfs:/db1/_delta_index/data.0001.parquet.snappy.index.v1.parquet .

A Bloom-szűrők a következő (bemeneti) adattípusokkal támogatják az oszlopokat: byte , , , , , , short és intlongfloatdoubledatetimestampstring . A Null értékeket a rendszer nem ad hozzá a Bloom-szűrőhez, így a null értékű szűrők használatához az adatfájlt kell be olvasni. Azure Databricks a következő adatforrásszűrőket támogatja: and , , , és orinequalsequalsnullsafe . A Bloom-szűrők beágyazott oszlopok esetén nem támogatottak.

Konfiguráció

A Bloom-szűrők alapértelmezés szerint engedélyezve vannak. A Bloom-szűrők letiltásához állítsa a spark.databricks.io.skipping.bloomFilter.enabled munkamenetszint-konfigurációt a false következőre: .

Bloom-szűrőindex létrehozása

Egy Bloom-szűrőindex létrehozásához egy táblán az összes oszlophoz vagy az új vagy átírt adatok oszlopainak egy részéhez használja a CREATE BLOOMFILTER INDEX DDL-utasítást. Az alábbi utasítás például egy Bloom-szűrőindexet hoz létre az oszlopon az FPP és az oszlop különböző sha0.150,000,000 elemeivel.

CREATE BLOOMFILTER INDEX
ON TABLE bloom_test
FOR COLUMNS(sha OPTIONS (fpp=0.1, numItems=50000000))

Bloom-szűrőindex elvetése

Egy tábla összes Bloom-szűrőjének vagy egy tábla egy oszlopkészletének eldobása a DROP BLOOMFILTER INDEX DDL-utasítással. Például:

DROP BLOOMFILTER INDEX ON TABLE bloom_test FOR COLUMNS(sha);

Bloom-szűrőindexek listájának megjelenítése

Az indexek listájának megjelenítéséhez futtassa a következőt:

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

Például:

Show indexes

Jegyzetfüzet

A következő jegyzetfüzet bemutatja, hogyan gyorsítja fel a Bloom-szűrőindexek definiálása a "tűt egy haystackben" lekérdezések felgyorsítására.

Bloom-szűrőbemutató notebook

Jegyzetfüzet beszerzése