Sdílet prostřednictvím


Zjišťování oddílů pro externí tabulky

Tento článek popisuje výchozí strategii zjišťování oddílů pro externí tabulky Katalogu Unity a volitelné nastavení pro povolení protokolu metadat oddílů, který zajišťuje konzistenci zjišťování oddílů s metastorem Hive.

Databricks doporučuje povolit protokolování metadat oddílů pro lepší rychlost čtení a výkon dotazů pro externí tabulky Katalogu Unity s oddíly.

Jaká je výchozí strategie zjišťování oddílů pro Katalog Unity?

Ve výchozím nastavení katalog Unity rekurzivně vypíše všechny adresáře v umístění tabulky, aby se automaticky zjistily oddíly. U velkých tabulek s mnoha adresáři oddílů to může zvýšit latenci pro mnoho operací tabulek.

Použití protokolování metadat oddílů

Důležité

Tato funkce je ve verzi Public Preview.

Ve službě Databricks Runtime 13.3 LTS a vyšší můžete volitelně povolit protokolování metadat oddílů, což je strategie zjišťování oddílů pro externí tabulky zaregistrované v katalogu Unity. Toto chování je konzistentní se strategií zjišťování oddílů používanou v metastoru Hive. Toto chování ovlivňuje pouze externí tabulky katalogu Unity, které mají oddíly a používají Parquet, ORC, CSV nebo JSON. Databricks doporučuje povolit nové chování pro lepší rychlost čtení a výkon dotazů pro tyto tabulky.

Důležité

Tabulky s povoleným protokolováním metadat oddílů ukazují změnu chování při zjišťování oddílů. Místo automatické kontroly umístění tabulky pro oddíly respektuje Katalog Unity pouze oddíly zaregistrované v metadatech oddílu. Viz Ruční přidání, odstranění nebo oprava metadat oddílů.

Toto chování se stane výchozím nastavením v budoucí verzi Databricks Runtime. Tabulky s povolenou funkcí lze číst nebo zapisovat pouze pomocí Databricks Runtime 13.3 LTS a vyšší.

Poznámka:

Pokud chcete ověřit, že nepoužívá nové chování protokolu oddílů, musíte se pokusit dotazovat na tabulku s modulem Databricks Runtime 12.2 LTS nebo nižším.

Povolení protokolování metadat oddílů

Pokud chcete povolit protokolování metadat oddílů v tabulce, musíte pro aktuální SparkSession povolit soubor Sparku a pak vytvořit externí tabulku. Toto nastavení se vyžaduje jenom v SparkSession, která vytvoří tabulku. Jakmile vytvoříte tabulku s povoleným protokolováním metadat oddílů, toto nastavení se zachová jako součást metadat tabulky a použije tuto funkci ve všech dalších úlohách.

Následující syntaxe ukazuje použití SQL k nastavení souboru Spark conf v poznámkovém bloku. Při konfiguraci výpočetních prostředků můžete také nastavit konfigurace Sparku.

SET spark.databricks.nonDelta.partitionLog.enabled = true;

Důležité

Tabulky můžete číst a zapisovat pouze s povoleným protokolováním metadat oddílů v Databricks Runtime 13.3 LTS a vyšší. Pokud máte úlohy spuštěné v Databricks Runtime 12.2 LTS nebo nižší, které musí pracovat s tabulkami, nepoužívejte toto nastavení.

Externí tabulky neodstraňuje podkladové datové soubory, když je vyhodíte. Databricks doporučuje k upgradu tabulek použít protokolování metadat oddílů pomocí CREATE OR REPLACE syntaxe, jako v následujícím příkladu:

CREATE OR REPLACE TABLE <catalog>.<schema>.<table-name>
USING <format>
PARTITIONED BY (<partition-column-list>)
LOCATION 'abfss://<bucket-path>/<table-directory>';

Katalog Unity vynucuje pravidla pro překrývání cest pro tabulky a svazky. Novou tabulku katalogu Unity nelze zaregistrovat v kolekci datových souborů, pokud již v daném umístění existuje tabulka.

Práce s tabulkami s metadaty oddílů

Databricks doporučuje používat názvy tabulek ve všech čteních a zápisech do všech tabulek registrovaných v katalogu Unity. U tabulek s metadaty oddílů to zaručuje, že nové oddíly přidané do registru tabulek do katalogu Unity a že dotazy na tabulku čtou všechny registrované oddíly.

Použití vzorů založených na cestě pro čtení nebo zápisy může vést k ignorování nebo nezaregistrování oddílů do metastoru katalogu Unity. Viz Omezení.

Výpis oddílů

Pomocí následujícího příkazu zobrazíte všechny oddíly zaregistrované v katalogu Unity jako metadata oddílů:

SHOW PARTITIONS <table-name>

Pokud chcete zkontrolovat, jestli je v katalogu Unity zaregistrovaný jeden oddíl, použijte následující příkaz:

SHOW PARTITIONS <table-name>
PARTITION (<partition-column-name> = <partition-column-value>)

Ruční přidání, odstranění nebo oprava metadat oddílů

Katalog Unity vyžaduje, aby všechny oddíly pro externí tabulky byly obsaženy v adresáři registrovaném pomocí LOCATION klauzule během registrace tabulky.

S povolenými metadaty oddílů je automatické zjišťování oddílů v umístění tabulky zakázané. Pokud externí systémy zapisují data do umístění tabulky nebo k přidání nebo přepsání záznamů v tabulce používají zápisy založené na cestě, musíte metadata oddílů opravit ručně.

Azure Databricks používá dělení ve stylu Hive k ukládání tabulek založených na Parquet, ORC, CSV a JSON. Oddíly ve stylu Hive obsahují páry klíč-hodnota propojené znaménkem rovná se v adresáři oddílů, například year=2021/month=01/.

Pokud vaše tabulka používá dělení ve stylu Hive, můžete MSCK REPAIR v katalogu Unity synchronizovat metadata oddílů s oddíly, které existují v umístění tabulky. Následující příklady syntaxe ukazují běžné operace:

-- Add and remove parition metadata to match directories in table location
MSCK REPAIR TABLE <table_name> SYNC PARTITIONS;

-- Add partitions in the table location that are not registered as partition metadata
MSCK REPAIR TABLE <table_name> ADD PARTITIONS;

-- Drop partitions registered as partition metadata that are not in the table location
MSCK REPAIR TABLE <table_name> DROP PARTITIONS;

Viz OPRAVA TABULKY.

Ruční zadání cest pro jiné typy oddílů

Pokud vaše tabulka nepoužívá dělení ve stylu Hive, musíte při přidávání oddílů ručně zadat umístění oddílů. Ruční zadávání oddílů může také snížit latenci v porovnání se MSCK REPAIR syntaxí, zejména u tabulek s velkým počtem oddílů. Následující příklad syntaxe ukazuje přidání oddílu:

ALTER TABLE <table-name>
ADD PARTITION (<partition-column-name> = <partition-column-value>)
LOCATION 'abfss://<bucket-path>/<table-directory>/<partition-directory>';

Pomocí ALTER TABLE syntaxe můžete také vypustit, přejmenovat, obnovit a nastavit umístění pro oddíly. Viz ALTER TABLE ... ODDÍL.

Zakázání nových metadat oddílů

Spark conf, který určuje, jestli nové tabulky používají metadata oddílů je ve výchozím nastavení zakázané. Toto chování můžete také explicitně zakázat. Následující syntaxe používá SQL k zakázání souboru Spark Conf:

SET spark.databricks.nonDelta.partitionLog.enabled = false;

To řídí, zda tabulky vytvořené ve SparkSession používají metadata oddílů. Chcete-li zakázat metadata oddílů v tabulce, která používá chování, je nutné odstranit a znovu vytvořit tabulku ve SparkSession, která nemá povolenou konfiguraci Sparku.

Poznámka:

I když nemůžete číst nebo zapisovat do tabulek s metadaty oddílů povolenými v Databricks Runtime 12.2 LTS nebo nižší, můžete spouštět DROP nebo CREATE OR REPLACE TABLE provádět příkazy s těmito tabulkami, pokud máte dostatečná oprávnění v katalogu Unity.

Omezení

Jsou to následující omezení:

  • Do tabulek s metadaty oddílů s povolenými metadaty oddílů nemůžete číst ani zapisovat pomocí Databricks Runtime 12.2 LTS nebo níže.
  • Čtení tabulky pomocí cesty k adresáři vrátí všechny oddíly včetně všech ručně přidaných nebo vyřazených oddílů.
  • Pokud vložíte nebo přepíšete záznamy v tabulce pomocí cesty místo názvu tabulky, metadata oddílu se nezaznamenávají.
  • Formát souboru Avro není podporován.