Bloeifilterindexen

Een bloeifilterindex is een ruimte-efficiënte gegevensstructuur waarmee gegevens kunnen worden overslagen op gekozen kolommen, met name voor velden die willekeurige tekst bevatten. Het filter Bloom werkt door te stellen dat de gegevens zich definitief niet in het bestand of waarschijnlijk in het bestand, met een gedefinieerde fout-positieve waarschijnlijkheid (FPP) .

Azure Databricks ondersteuning voor filters op bestandsniveau Van de bloemen; Aan elk gegevensbestand kan één bloomfilterindexbestand zijn gekoppeld. Voordat u een bestand Azure Databricks controleert u het indexbestand en wordt het bestand alleen gelezen als de index aangeeft dat het bestand mogelijk met een gegevensfilter overeen komt. Azure Databricks leest het gegevensbestand altijd als er geen index bestaat of als er geen bloomfilter is gedefinieerd voor een querykolom.

De grootte van een Bloom-filter is afhankelijk van het aantal elementen in de set waarvoor het filter Bloom is gemaakt en de vereiste FPP. Hoe lager de FPP, hoe hoger het aantal gebruikte bits per element en hoe nauwkeuriger het wordt, ten koste van meer schijfruimte en langzamere downloads. Een FPP van 10% vereist bijvoorbeeld 5 bits per element.

Een Bloom-filterindex is een niet-gecomprimeerd Parquet-bestand dat één rij bevat. Indexen worden opgeslagen in de subdirectory ten opzichte van het gegevensbestand en gebruiken dezelfde naam als het _delta_index gegevensbestand met het achtervoegsel index.v1.parquet . De index voor het gegevensbestand dbfs:/db1/data.0001.parquet.snappy zou bijvoorbeeld de naam dbfs:/db1/_delta_index/data.0001.parquet.snappy.index.v1.parquet hebben.

Bloemfilters ondersteunen kolommen met de volgende (invoer)gegevenstypen: byte , , , , , , , , short en intlongfloatdoubledatetimestampstring . Null-waarden worden niet toegevoegd aan het filter Bloom, dus voor een null-filter moet het gegevensbestand worden gelezen. Azure Databricks ondersteunt de volgende gegevensbronfilters: and , , , en orinequalsequalsnullsafe . Bloemfilters worden niet ondersteund voor geneste kolommen.

Configuratie

Bloemfilters zijn standaard ingeschakeld. Als u Deactiveren filters wilt uitschakelen, stelt u de configuratie op spark.databricks.io.skipping.bloomFilter.enabled sessieniveau in op false .

Een bloeifilterindex maken

Gebruik de DDL-instructie om een bloomfilterindex te maken voor een tabel voor alle kolommen of een subset kolommen voor nieuwe of herschreven CREATE BLOOMFILTER INDEX gegevens. Met de volgende instructie maakt u bijvoorbeeld een filterindex van de kolom Met FPP en sha afzonderlijke items in de 0.150,000,000 kolom.

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

Een bloeifilterindex laten vallen

Als u alle bloomfilters uit een tabel wilt verwijderen of voor een set kolommen in een tabel, gebruikt u de DROP BLOOMFILTER INDEX DDL-instructie. Bijvoorbeeld:

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

De lijst met bloeifilterindexen weergeven

Voer het volgende uit om de lijst met indexen weer te geven:

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

Bijvoorbeeld:

Indexen tonen

Notebook

In het volgende notebook wordt gedemonstreerd hoe het definiëren van een Bloom-filterindex de 'naald in eenstack'-query's versnelt.

Demonotenotenote over het Filter van de bloemen

Notebook downloaden