Sdílet prostřednictvím


Převod externí tabulky na spravovanou tabulku katalogu Unity

Tato stránka popisuje použití příkazu k převodu ALTER TABLE ... SET MANAGED externí tabulky na spravovanou tabulku Katalogu Unity v Azure Databricks.

SET MANAGED přehled

SET MANAGED Pomocí této funkce můžete v Azure Databricks převést externí tabulku na spravovanou tabulku Katalogu Unity. SET MANAGED nabízí následující výhody:

  • Minimalizace výpadků čtenáře a zapisovače
  • Zpracování souběžných zápisů během převodu
  • Zachování historie tabulek
  • Zachování stejné konfigurace tabulek, včetně stejného názvu, nastavení, oprávnění a zobrazení
  • Možnost vrátit převedenou spravovanou tabulku na externí tabulku.

Prerequisites

Pokud chcete použít funkci převodu tabulky, musíte splňovat následující požadavky:

  • 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.

  • Pro použití SET MANAGEDUNSET MANAGEDnebo bezserverové výpočetní prostředky musíte použít Databricks Runtime 17.0 nebo vyšší nebo bezserverové výpočetní prostředky.

  • Chcete-li převést tabulky katalogu Unity s povoleným čtením Iceberg (UniForm), musíte použít Databricks Runtime 17.2 nebo vyšší, nebo použít bezserverové výpočetní prostředky a nasadit TRUNCATE UNIFORM HISTORY.

  • Čtenáři a zapisovače Azure Databricks 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í funkce DESCRIBE DETAIL. můžete zkontrolovat, jestli tabulka obsahuje tyto vlastnosti.

  • Externí klienti (mimo Databricks) musí podporovat čtení do spravovaných tabulek Katalogu Unity. Viz Čtení tabulek 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říkaz SET MANAGED je k dispozici ve službě Databricks Runtime 17.0 nebo novější a bezserverové výpočetní prostředky.

Příkaz TRUNCATE UNIFORM HISTORY je k dispozici ve službě Databricks Runtime 17.2 nebo novější a bezserverové výpočetní prostředky.

Spuštěním jednoho z následujících příkazů převeďte externí tabulku Katalogu Unity na spravovanou tabulku Katalogu Unity.

  • 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.

  • Pro externí tabulky katalogu Unity s již povoleným načítáním Icebergu (UniForm):

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

    V takovém případě zahrňte TRUNCATE UNIFORM HISTORY pro zajištění optimálního výkonu a kompatibility tabulek. TRUNCATE UNIFORM HISTORY zkrátí pouze historii Icebergu UniForm a neodebere 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ší, můžete ho restartovat a bude pokračovat tam, kde jste skončili.

Warning

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

Po převodu tabulky musíte:

  • Restartujte všechny úlohy streamování (čtení nebo zápis) pomocí externí tabulky.
  • Ujistěte se, že čtenáři a autoři pracují se spravovanou tabulkou.

Prediktivní optimalizace je automaticky povolená, s výjimkou případů, kdy jste ji ručně zakázali. Podívejte se, jestli je povolená prediktivní optimalizace.

Díky povolené prediktivní optimalizaci Azure Databricks automaticky odstraní data v externím umístění katalogu Unity po 14 dnech. Pokud je prediktivní optimalizace zakázaná, můžete spustit VACUUM (vyžaduje databricks Runtime 17.0 nebo vyšší nebo bezserverové výpočetní prostředky) v nově převedené spravované tabulce po uplynutí 14 dnů.

VACUUM my_converted_table

Note

V některých případech nemusí být data v externím umístění katalogu Unity odstraněna po 14 dnech ani s povolenou prediktivní optimalizací. Pokud se například spravovaná tabulka katalogu Unity často nepoužívá nebo je velmi malá, nemusí k automatickému odstranění dojít. V těchto případech po 14 dnech ručně spusťte VACUUM (vyžaduje Databricks Runtime 17.0 nebo vyšší nebo bezserverové výpočetní prostředky) v nově převedené spravované tabulce, aby se odebrala stará data.

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

Kontrola převodu

Můžete potvrdit, že externí tabulka byla převedena na spravovanou tabulku:

DESCRIBE EXTENDED catalog_name.schema_name.table_name

Zkontrolujte výstup tohoto příkazu a ověřte, že byla tabulka převedena. Tabulka Type by se měla zobrazit jako MANAGED.

Pokud si prohlížíte informace o tabulce v Průzkumníku katalogu, aktualizujte stránku. Na kartě Podrobnosti v části O této tabulce, typ tabulky by se měl zobrazit jako .

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šší, abyste mohli využít výhod SET MANAGED příkazu, včetně možnosti zachovat historii tabulek.

Příkaz SET MANAGED můžete stále použít, pokud máte čtenáře nebo zapisovače s prostředím Databricks Runtime 14.3 nebo nižším. Po převodu na spravovanou tabulku však není možné cestovat zpět časem k historii commitů na základě časového razítka. Můžete to udělat jenom podle verze. Pokud se vrátíte k externí tabulce během 14denního období, bude opět možné cestovat v čase k historickým potvrzením provedeným před převodem.

Ve všech případech (bez ohledu na verzi DBR) nefunguje vrácení dat do externího úložiště UC pomocí časového razítka pro žádné transakce provedené v tabulce řízené UC, mezi dokončením převodu a pokusem o vrácení změn.

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í.

Konzistence verzí DBR

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 jsou DELTA_TRUNCATED_TRANSACTION_LOG, DELTA_TXN_LOG_FAILED_INTEGRITY nebo DELTA_STATE_RECOVER_ERRORS. Před pokusem o převod se ujistěte, že můžete spouštět základní operace v externí tabulce, například DESCRIBE DETAIL.

Vrácení zpět k externí tabulce

Important

Příkaz UNSET MANAGED je k dispozici ve službě Databricks Runtime 17.0 nebo novější a bezserverové výpočetní prostředky.

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

Pokud se vrátíte zpět, záznamy provedené do externího umístění mezi převodem a vrácením zpět je možné cestovat časem podle verze, ale ne podle časového razítka. Za sedm dní po vrácení zpět budou odstraněna data uložená 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 se příkaz vrácení zpět přeruší, můžete ho znovu spustit a zkusit to znovu, podobně jako u SET příkazu MANAGED.

Kontrola vrácení zpět

Můžete potvrdit, že byla vaše konverze vrácena zpět:

DESCRIBE EXTENDED catalog_name.schema_name.table_name

Zkontrolujte výstup tohoto příkazu a ověřte, že se tabulka vrátila zpět. Tabulka Type by se měla zobrazit jako EXTERNAL.

Pokud si prohlížíte informace o tabulce v Průzkumníku katalogu, aktualizujte stránku. Na kartě Podrobnosti v části O této tabulce, typ tabulky by se měl zobrazit jako .

Po vrácení do externí tabulky, podobně jako při převodu, musíte restartovat úlohy streamování.

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

K výpadku může dojít, když čtenáři nebo zapisovači při převodu přistupují k tabulce. V porovnání s příkazem DEEP CLONE příkaz SET MANAGED eliminuje nebo minimalizuje výpadky pro čtenáře a zapisovatele. Čtenáři s Databricks Runtime 16.1 nebo novější nemají žádné výpadky. Čtenáři a autoři nejsou ovlivněni během prvního kroku, kdy se zkopírují data tabulky a rozdílový protokol.

Během druhého kroku se zablokují zápisy do externího umístění katalogu Unity a potvrzené změny v externím umístění během první kopie dat budou přesunuty. Tento druhý krok kopírování dat způsobí přerušení služby pro uživatele zapisující data a čtenáře ve verzích Databricks Runtime 15.4 LTS nebo nižších.

Potom se čtenáři a autoři přesunou do spravovaného umístění katalogu Unity a nové umístění spravované tabulky se zaregistruje v katalogu Unity. Uživatelé s Databricks Runtime 16.1 nebo novějším nezažijí žádný výpadek.

Odhadovaný výpadek je:

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ý / DBSQL malý ~6 min nebo méně ~1-2 min nebo méně
1 TB 64jádrový / DBSQL medium ~30 min. ~1-2min
10 terabajtů 256-jádrový / DBSQL x-large ~1,5 hod. ~1-5min

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

Note

Doba trvání výpadku se může lišit. Výkon převodu závisí na faktorech, jako je velikost souboru, počet souborů a počet potvrzení.

Známá omezení

Převod externích na spravované tabulky má následující omezení:

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

  • Omezení historie tabulek po vrácení změn: Pro uživatele a zapisovatele v Databricks Runtime 15.4 LTS nebo novější, historie tabulek pro potvrzení provedená po převodu, ale před vrácením změn bude dostupná pro časové cestování podle verze, ale nikoli podle časového razítka.

  • Omezení Delta Sharing: Příkaz není plně kompatibilní s Delta Sharing. I když otevřené sdílení Delta funguje podle očekávání, sdílení Databricks do Databricks automaticky neaktualizuje 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;
    
  • Více 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, která se převádí, můžete mít další náklady na přenos dat mezi oblastmi. Poskytovatel cloudu tyto poplatky ukládá mimo kontrolu Databricks.

    Pokud chcete zkontrolovat umístění schématu, katalogu a metastoru, můžete použít následující příkazy:

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