Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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ů.
Doporučené alternativy
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: