Sdílet prostřednictvím


Bloomovy filtry indexů

Index filtru Bloom je prostorově efektivní datová struktura, která umožňuje přeskočení dat na vybraných sloupcích. Je zvlášť efektivní pro sloupce s mnoha jedinečnými hodnotami, jako je volný text nebo ID.

Omezení indexů filtru Bloom

Important

Azure Databricks nedoporučuje používat indexy filtru Bloom pro většinu úloh.

I když indexy filtru Bloom podporují vynechání dat u sloupců s vysokou kardinalitou jedinečných hodnot, často zavádějí problémy, jako jsou například:

  • Indexují pouze soubory zapsané po vytvoření indexu. Indexy se nevztahují na existující soubory.
  • Je obtížné ladit a často přidávat režijní náklady bez významného přínosu pro výkon.
  • Nejlépe fungují s vysoce selektivními filtry rovnosti v jednom sloupci. Poskytují pro širší filtry jen málo výhod.
  • Indexy filtru Bloom fungují jenom na explicitně definovaných sloupcích. Pokud se vaše dotazy začnou filtrovat podle sloupců, které se nepřekrývají se sloupci indexu Bloomova filtru, musíte ručně odstranit a znovu vytvořit index, což zvyšuje provozní zátěž. Nový index je potřeba znovu sestavit úplně od začátku s novými daty.

I když se indexy filtru Bloom snaží přeskočit čtení souborů, Azure Databricks stále musí prohledávat indexový soubor pro každý datový soubor. Uspořádání podle Z-řádu a kapalinové shlukování jsou efektivnější, protože umožňují stroji vyhnout se nutnosti zpracovávat většinu souborů.

Azure Databricks místo indexů filtru Bloom doporučuje používat následující funkce:

  • Prediktivní I/O – Při výpočetních operacích s podporou Photon v prostředí Databricks Runtime 12.2 a novějším provádí prediktivní I/O přeskakování souborů pomocí pokročilých heuristik na všech sloupcích. Zcela zužuje indexy Bloomova filtru, které přidávají režii při zápisu pouze, když je Photon povolen.
  • Liquid Clustering V Databricks Runtime 13.3 a novější zlepšuje Liquid Clustering přeskočení dat prostřednictvím uspořádání dat na základě často filtrovaných sloupců. Funguje s hrubou členitostí než indexy filtru Bloom a umožňuje Službě Azure Databricks přeskočit celé skupiny souborů během plánování dotazů.

Important

Vyhněte se kombinování indexů filtru Bloom s prediktivními vstupně-výstupními operacemi. Pokud jsou oba povolené, mají indexy filtru Bloom přednost a zakazují prediktivní vstupně-výstupní operace, které poskytují rychlejší a spolehlivější výkon.

Jak fungují indexy filtru Bloom

Indexy filtru Azure Databricks Bloom se skládají z indexu přeskakování dat pro každý datový soubor. Index filtru Bloom lze použít k určení, že hodnota sloupce je rozhodně není v souboru nebo že je pravděpodobně v souboru. Před čtením souboru Azure Databricks zkontroluje indexový soubor a soubor se přečte jenom v případě, že index indikuje, že soubor může odpovídat filtru dat.

Indexy filtru Bloom podporují sloupce s následujícími vstupními datovými typy: byte, short, int, long, float, double, date, timestampa string. Hodnoty Null nejsou přidány do indexu filtru Bloom, takže jakýkoli související filtr s hodnotou null vyžaduje čtení datového souboru. Azure Databricks podporuje následující filtry zdrojů dat: and, or, in, equalsa equalsnullsafe. Indexy filtru Bloom nejsou podporovány ve vnořených sloupcích.

Konfigurace a referenční informace

K povolení filtru Bloom použijte následující syntaxi:

CREATE BLOOMFILTER INDEX
ON TABLE table_name
FOR COLUMNS(column_name OPTIONS (fpp=0.1, numItems=5000))

Pro podrobnosti o syntaxi viz CREATE BLOOM FILTER INDEX a DROP BLOOM FILTER INDEX.

Chcete-li zakázat operace filtru Bloom, nastavte konfiguraci na úrovni relace spark.databricks.io.skipping.bloomFilter.enabled na false.

Zobrazení seznamu indexů filtru Bloom

Pokud chcete zobrazit seznam indexů, spusťte:

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

Například:

Zobrazit indexy