Převod externí tabulky na spravovanou tabulku katalogu Unity

Tato stránka popisuje, jak převést externí tabulku na spravovanou tabulku Katalogu Unity v Azure Databricks pomocí příkazu ALTER TABLE ... SET MANAGED nebo Průzkumníka katalogu.

SET MANAGED Přehled

Slouží SET MANAGED k převodu externí tabulky na spravovanou tabulku katalogu Unity. I když pro převod můžete použít CREATE TABLE AS SELECT (CTAS), Databricks doporučuje SET MANAGED následující výhody:

  • Minimalizuje výpadky čtečky a zapisovače.
  • Zpracovává souběžné zápisy během převodu.
  • Uchovává historii tabulek.
  • Udržuje stejné konfigurace tabulek, včetně názvu, nastavení, oprávnění a zobrazení.
  • Podporuje vrácení převedené spravované tabulky na externí tabulku.

Prerequisites

  • Všichni čtenáři a zapisovačé externích tabulek musí používat přístup založený na názvu. Například:

    SELECT * FROM catalog_name.schema_name.table_name;
    

    Přístup založený na cestě není podporován a po převodu tabulky může selhat.

  • K použití SET MANAGED nebo UNSET MANAGEDbezserverového výpočetního prostředí musíte použít Databricks Runtime 17.0 nebo novější nebo bezserverové výpočetní prostředky.

  • Pokud chcete převést tabulky katalogu Unity s povolenými čteními Icebergu (UniForm), musíte použít Databricks Runtime 17.2 nebo vyšší nebo bezserverové výpočetní prostředky, abyste mohli použít TRUNCATE UNIFORM HISTORY.

  • Azure Databricks čtenáři a zapisovače musí používat Databricks Runtime 15.4 LTS nebo vyšší. Pokud vaši čtenáři nebo zapisovači používají verzi 14.3 LTS nebo starší, přečtěte si alternativní možnost pro čtenáře a zapisovače ve službě Databricks Runtime 14.3 LTS nebo starší.

  • Příkaz SET MANAGED selže s chybou DELTA_TRUNCATED_TRANSACTION_LOG, pokud tabulka obsahuje minReaderVersion=2, minWriterVersion=7, a tableFeatures={..., columnMapping}. Pomocí příkazu DESCRIBE DETAIL. můžete ověřit, jestli tabulka obsahuje tyto vlastnosti.

  • Externí klienti (mimo Databricks) musí podporovat čtení do spravovaných tabulek Katalogu Unity. Viz tabulky Accessu s klienty Delta.

    • Pomocí řídicího panelu Access Insights zjistíte, zda jsou čtenáři a zapisovači přistupující k vašim tabulkám na Databricks Runtime nebo externí bez Databricks.

Important

Chcete-li se vyhnout konfliktům, zrušte všechny existující OPTIMIZE úlohy příkazů (clustering liquid, komprimace, ZORDER) provozované v tabulce a neplánujte žádné úlohy při převodu externích tabulek na spravované tabulky.

Převod z externí na spravovanou tabulku

Important

Převod externích na spravované tabulky pomocí Průzkumníka katalogu je v beta verzi.

Průzkumník katalogu

Při převodu pomocí Průzkumníka katalogu se automaticky použije přístup založený na názvu. Najednou můžete převést jednu nebo více externích tabulek ve schématu.

  1. Přejděte do tabulky nebo schématu, které chcete převést v Průzkumníku katalogu.

  2. V části O této tabulce (stránka podrobností tabulky) nebo O tomto schématu (stránka podrobností schématu) klikněte na Tlačítko Prozkoumat optimalizace.

  3. V dialogovém okně Proč migrovat do spravovaných tabulek katalogu Unity? klikněte na Pokračovat.

    Dialogové okno Proč migrovat na tabulky spravované katalogem Unity s tlačítkem Pokračovat

  4. Vyberte externí tabulky, které chcete převést. Pokud jste dialogové okno otevřeli ze stránky podrobností tabulky, je tabulka předem vybraná. Na panelu hledání můžete najít další tabulky. Spravované tabulky se nedají vybrat.

    Obrazovka výběru tabulky zobrazující předem vybranou externí tabulku a nedostupnou spravovanou tabulku

  5. Klikněte na Vytvořit konverzní poznámkový blok.

  6. Volitelně můžete zadat název poznámkového bloku. Ve výchozím režimu se poznámkový blok uloží do vaší domovské složky. Kliknutím na Procházet ho uložíte do jiného umístění.

    Dialogové okno Vytvořit poznámkový blok pro převod zobrazující pole s názvem a možností Procházet

  7. V poznámkovém bloku si projděte osvědčené postupy a ověřte, že splňujete všechny požadavky.

  8. Spusťte buňku SET SPRAVOVANÉ dotazy .

Po spuštění buňky se typ tabulky zobrazí jako SPRAVOVANÝ místo EXTERNÍ v Průzkumníku katalogu. Aktualizujte stránku, pokud se stav neaktualizuje okamžitě.

SQL

V závislosti na tom, jestli má vaše externí tabulka povolené čtení Apache Icebergu (UniForm), spusťte jeden z následujících příkazů. Zkontrolujte, jestli jsou povolená čtení Icebergu (UniForm), abyste ověřili, jestli je v tabulce povolené čtení Apache Iceberg (UniForm).

  • U externích tabulek katalogu Unity bez aktivované funkce Apache Iceberg pro čtení (UniForm):

    ALTER TABLE catalog.schema.my_external_table SET MANAGED;
    

    Po převodu můžete povolit čtení Icebergu ve spravované tabulce bez obav z kompatibility.

  • U externích tabulek katalogu Unity, které již mají povolené čtení pomocí Apache Iceberg (UniForm):

    ALTER TABLE catalog.schema.my_external_table SET MANAGED TRUNCATE UNIFORM HISTORY;
    

    Zahrňte TRUNCATE UNIFORM HISTORY pro zachování optimálního výkonu a kompatibility tabulek. TRUNCATE UNIFORM HISTORY zkrátí pouze historii UniForm Icebergu a neodstraní historii Delta. Výsledkem tohoto příkazu je krátký výpadek čtení a zápisu pro Iceberg po zkrácení.

Pokud se příkaz při kopírování dat přeruší, restartujte ho a pokračuje tam, kde skončil.

Warning

Databricks doporučuje vyhnout se souběžnému spouštění více SET MANAGED příkazů ve stejné tabulce, což může vést k nekonzistentnímu stavu tabulky.

Po převodu tabulky musíte:

  • Restartujte jakékoli úlohy streamování (čtení nebo zápis) využívající externí tabulku, abyste se vyhnuli čtení z předchozího umístění nebo zápisu do něj. Zastavte aktuální úlohu a spusťte novou úlohu se stejnou konfigurací.
  • Ověřte, že čtenáři a autoři pracují se spravovanou tabulkou.

Prediktivní optimalizace se po převodu automaticky povolí, pokud ji ručně nezablokujete. Viz Ověření, jestli je povolená prediktivní optimalizace.

S povolenou prediktivní optimalizací Azure Databricks automaticky odstraní data v externím umístění katalogu Unity po 14 dnech. Pokud je prediktivní optimalizace zakázaná, spusťte VACUUM (vyžaduje Databricks Runtime 17.0 nebo vyšší nebo bezserverové výpočetní prostředky) v nově převedené spravované tabulce po 14 dnech.

VACUUM my_converted_table

Note

V některých případech se data v externím umístění katalogu Unity nemusí po 14 dnech odstranit ani s povolenou prediktivní optimalizací , například pokud se spravovaná tabulka často nepoužívá nebo je velmi malá. V těchto případech spusťte VACUUM ručně po 14 dnech, abyste odebrali předchozí data.

Azure Databricks odstraní pouze data v externím umístění. Protokol transakcí Delta a odkaz na tabulku v katalogu Unity se uchovávají.

Ověření převodu

Průzkumník katalogu

Aktualizujte stránku. Na kartě Podrobnosti v části O této tabulce se typ tabulky zobrazí jako Spravovaný.

SQL

Spuštěním následujícího příkazu potvrďte, že vaše externí tabulka byla převedena na spravovanou tabulku:

DESCRIBE EXTENDED catalog_name.schema_name.table_name

Tabulka Type se zobrazí jako MANAGED.

Alternativní možnost pro čtenáře a zapisovače v Databricks Runtime 14.3 LTS nebo níže

Databricks doporučuje upgradovat všechny čtenáře a zapisovače na Databricks Runtime 15.4 LTS nebo vyšší, aby využil výhod SET MANAGED, včetně možnosti zachovat historii tabulek.

Stále můžete použít SET MANAGED, pokud máte čtenáře nebo zapisovače v Databricks Runtime 14.3 nebo nižším. Po převodu na spravovanou tabulku však nemůžete provádět časové cestování k historickým verzím podle časového razítka – pouze podle verze. Pokud se vrátíte k externí tabulce ve 14denním okně, bude znovu povolena časová cesta k historickým potvrzením provedeným před převodem.

Ve všech případech nefunguje vrácení zpět externí tabulky katalogu Unity do určitého časového bodu, pokud byly mezi konverzí a vrácením uskutečněny jakékoliv úpravy v rámci spravované tabulky katalogu Unity.

Zápis do tabulky po převodu pomocí Databricks Runtime 15.4 LTS nebo níže vyžaduje vyřazení inCommitTimestamp funkce:

ALTER TABLE <table_name> DROP FEATURE inCommitTimestamp;

Řešení potíží se selháními převodu

Tato část popisuje běžné problémy při převodu externích tabulek do spravovaných tabulek Katalogu Unity a jejich řešení.

Jednotnost verze Databricks Runtime

Vyhněte se spuštění nebo opakování převodu stejné tabulky pomocí různých verzí Databricks Runtime. Metadata se dají serializovat různě v různých verzích, což způsobuje VERSIONED_CLONE_INTERNAL_ERROR.EXISTING_FILE_VALIDATION_FAILED selhání. Pokud převod selže, vždy zkuste znovu použít stejnou verzi Databricks Runtime.

Vypnutí clusteru během převodu

Pokud se váš cluster během převodu vypne, příkaz může selhat s DELTA_ALTER_TABLE_SET_MANAGED_INTERNAL_ERROR. Opakujte příkaz a obnovte převod.

Poškozená externí tabulka

Pokud je externí tabulka již poškozena (například neplatný stav tabulky), může převod selhat s chybami jako DELTA_TRUNCATED_TRANSACTION_LOG, DELTA_TXN_LOG_FAILED_INTEGRITY nebo DELTA_STATE_RECOVER_ERRORS. Před pokusem o převod ověřte, zda můžete spustit základní operace v externí tabulce, například DESCRIBE DETAIL.

Chyba ověření souboru

Příkaz SET MANAGED ověří, že se všechny soubory v nejnovějším snímku tabulky zkopírují do nového umístění spravované tabulky. Pokud nějaké soubory chybí, příkaz selže s chybou DELTA_ALTER_TABLE_SET_MANAGED_FAILED.FILE_VALIDATION_FAILED .

Řešení tohoto problému:

  1. Zkontrolujte protokoly ovladače Spark a zjistěte, které soubory se nedají migrovat.
  2. Ověřte, že tyto soubory existují ve zdrojovém umístění externí tabulky a jsou přístupné.
  3. Zkuste ALTER TABLE ... SET MANAGED příkaz zopakovat.

Pokud problém přetrvává, obraťte se na podporu Databricks.

Vrácení zpět k externí tabulce

Important

Příkaz UNSET MANAGED vyžaduje Databricks Runtime 17.0 nebo vyšší nebo bezserverové výpočetní prostředky.

Po převodu externí tabulky na spravovanou tabulku ji můžete do 14 dnů vrátit zpět.

Po vrácení zpět se metadata tabulky aktualizují tak, aby odkazovala zpět na původní externí umístění. Všechny zápisy provedené do spravovaného umístění po převodu se zachovají. Potvrzení provedená do spravovaného umístění mezi převodem a vrácením změn zůstanou přístupná podle verze, ale ne podle časového razítka.

Sedm dní po vrácení zpět Azure Databricks automaticky odstraní data ve spravovaném umístění.

Pokud se chcete vrátit k externí tabulce, spusťte následující příkaz:

ALTER TABLE catalog.schema.my_managed_table UNSET MANAGED;

Pokud je příkaz vrácení zpět přerušen, spusťte ho znovu a zkuste to znovu.

Po vrácení zpět musíte také, stejně jako při převodu, restartovat úlohy streamování.

Ověření obnovení

Spuštěním následujícího příkazu potvrďte, že se převod vrátil zpět:

DESCRIBE EXTENDED catalog_name.schema_name.table_name

Tabulka Type se zobrazí jako EXTERNAL.

Pokud si tabulku prohlížíte v Průzkumníku katalogu, aktualizujte stránku. Na kartě Podrobnosti v části O této tabulce se typ tabulky zobrazí jako EXTERNAL.

Časy výpadku a kopírování dat

Příkaz SET MANAGED minimalizuje nebo eliminuje výpadky v porovnání s alternativními přístupy, jako je DEEP CLONE. Proces převodu používá dvoustupňový přístup:

  1. Počáteční kopírování dat (bez výpadku): Data tabulky a protokol transakcí Delta se zkopírují z externího umístění do spravovaného umístění. Čtenáři a zapisovači nadále fungují normálně bez dopadu na probíhající operace.
  2. Přepnutí do spravovaného umístění (krátký výpadek): Potvrzení provedená do externího umístění během prvního kroku se přesunou do spravovaného umístění a metadata tabulky se aktualizují, aby se zaregistrovalo nové spravované umístění. Během tohoto kroku se dočasně zablokují všechny zápisy do externího umístění, což vede k výpadku zapisovače. Čtenáři na Databricks Runtime 16.1 nebo vyšší nezažívají žádné výpadky; u čtenářů na Databricks Runtime 15.4 může docházet k výpadkům.

Odhadovaný výpadek:

Velikost tabulky Doporučená velikost clusteru Čas kopírování dat Výpadek čtečky a zapisovače
100 GB nebo méně 32jádrový / X-Large SQL sklad ~6 min nebo méně ~1–2 min nebo méně
1 TB 64jádrový / dvojnásobně velký SQL warehouse ~30 min. ~1–2 min
10 terabajtů 256jádrový / 4X-Large SQL datový sklad ~1,5 hod. ~1–5 min

Odhady předpokládají propustnost 0,5–2 GB/jádro procesoru/minutu.

Note

Výpadek se může lišit v závislosti na faktorech, jako je velikost souboru, počet souborů a počet potvrzení.

Známá omezení

  • Klienti streamování: Po převodu je nutné restartovat všechny úlohy streamování.

  • Omezení historie tabulky po vrácení zpět: Historie tabulky pro commity provedené po převodu, ale před vrácením zpět umožňuje cestování v čase podle verze, ale ne podle časového razítka.

  • Omezení sdílení Delta: Příkaz SET MANAGED není plně kompatibilní se sdílením Delta. Open Delta Sharing funguje podle očekávání, ale sdílení Databricks na Databricks neaktualizuje automaticky spravované umístění tabulky příjemců. Příjemce bude dál číst ze starého umístění, dokud se tabulka znovu nesdílí. Pokud chcete tabulku sdílet znovu:

    ALTER SHARE <share_name> REMOVE TABLE <table_name>;
    ALTER SHARE <share_name> ADD TABLE <table_name> AS <table_share_name> WITH HISTORY;
    
  • Několik cloudových oblastí: Pokud je výchozí spravované umístění metastoru, katalogu nebo schématu katalogu Unity v jiné cloudové oblasti než umístění úložiště externí tabulky, může se vám stát, že se vám účtují další náklady na přenos dat mezi oblastmi. Poskytovatel cloudu tyto poplatky ukládá mimo kontrolu Databricks.

    Ověření umístění schématu, katalogu a metastoru:

    DESC SCHEMA EXTENDED <catalog_name>.<schema_name>;
    
    DESC CATALOG EXTENDED <catalog_name>;
    
    SELECT * FROM system.information_schema.metastores;