Sdílet prostřednictvím


Převod cizí tabulky na spravovanou tabulku katalogu Unity

Důležité

Tato funkce je ve verzi Public Preview a je dostupná jenom pro zúčastněné zákazníky. Pokud se chcete zúčastnit náhledu, přihlaste se vyplněním tohoto formuláře. Tato funkce podporuje jenom převod cizích tabulek federovaných pomocí HMS a Glue Federation.

Tato stránka popisuje, jak použít SET MANAGED k převodu cizí tabulky na spravovanou tabulku.

SET MANAGED přehled

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

  • Zachování historie tabulek
  • Zachování stejné konfigurace tabulek, včetně stejného názvu, nastavení, oprávnění a zobrazení
  • Výhody prediktivní optimalizace Při převodu tabulky na spravovanou je prediktivní optimalizace nastavena na INHERIT, což znamená, že dědí nastavení ze schématu nebo úrovně katalogu. Ve výchozím nastavení je tato možnost momentálně zakázaná. Prediktivní optimalizaci u převedené tabulky můžete povolit spuštěním příkazu ALTER TABLE <table_name> ENABLE PREDICTIVE OPTIMIZATION, který ji nastaví na ENABLED místo INHERIT.

Požadavky

  • Formát dat cizí tabulky musí být Delta Lake. Pokud chcete provést jednorázový převod pro Parquet, přečtěte si téma Převod na Delta Lake.
  • Typ tabulky: Typ tabulky HMS musí být externí tabulka HMS. Příkaz selže, pokud je tabulka spravovaná tabulka HMS.
  • Runtime: Databricks Runtime 17.3 nebo vyšší
  • Oprávnění: OWNER nebo MANAGE oprávnění k tabulce a CREATE oprávnění pro EXTERNAL LOCATION

Syntaxe

Pokud chcete převést cizí tabulku Unity Catalog tak, aby byla spravovaná službou Unity Catalog, spusťte následující příkaz:

ALTER TABLE source_table SET MANAGED {MOVE | COPY}

Parametry

  • source_table

    Existující cizí tabulka v katalogu Unity. Cizí tabulky obsahují data a metadata spravovaná externím katalogem. Před převedením, pokud dojde k smazání zdrojové tabulky v externím katalogu, je cizí tabulka také zrušena v katalogu Unity. Po převodu tabulky na spravovanou, vyřazení zdrojové tabulky v externím katalogu nemá vliv na spravovanou tabulku katalogu Unity.

  • MOVE

    Převede tabulku na spravovanou a zakáže přístup ke zdrojové tabulce v externím katalogu.

    • Přístup prostřednictvím externího katalogu nebo přístupu na základě cesty se po převodu tabulky nezdaří. Všichni čtenáři a zapisovačé do tabulky musí pro přístup použít obor názvů katalogu Unity.

    • Všichni čtenáři a autoři 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 selže. Například:

      SELECT * FROM delta.`protocol://path/to/table`;
      
    • Externí klienti (ne Azure Databricks) musí podporovat čtení ze spravovaných tabulek Unity Catalog. Viz Režim kompatibility.

    • Pomocí nástěnky Access Insights zjistíte, jestli čtenáři a zapisovači přistupující k vašim tabulkám jsou Databricks Runtime nebo externí klienti nepatřící do Azure Databricks.

    • Čtenáři a zapisovače Azure Databricks musí používat Databricks Runtime 15.4 LTS nebo vyšší. Pokud čtenáři nebo autoři používají Databricks Runtime 14.3 LTS nebo nižší, přečtěte si Alternativní řešení pro čtenáře a autory v Databricks Runtime 14.3 LTS nebo nižší.

    • K výpadku může dojít, když čtenáři nebo zapisovači při převodu přistupují k tabulce. Další informace najdete v tématu Převod externí tabulky na spravovanou tabulku katalogu Unity.

    • Pokud dojde k přerušení příkazu, tabulka může být ponechána jako externí tabulka, protože převod na spravovaný byl neúplný. Pokud chcete příkaz dokončit, spusťte SET MANAGED příkaz znovu v externí tabulce.

    • Prediktivní optimalizace je nastavena na INHERIT, pokud ji nenakonfigurujete ručně. Pokud chcete zkontrolovat, jestli je povolená prediktivní optimalizace, přečtěte si téma Kontrola, jestli je povolená prediktivní optimalizace.

    • Vrácení zpět: Pokud chcete vrátit migraci tabulky a znovu získat přístup ke zdrojové tabulce v externím katalogu, spusťte UNSET MANAGED příkaz. Po spuštění příkazu se tabulka stane externí tabulkou. Pokud chcete tabulku vrátit do cizí tabulky, přetáhněte ji a v další synchronizaci katalogu ji znovu federujete jako cizí.

      ALTER TABLE catalog.schema.my_managed_table UNSET MANAGED
      

      Výstraha

      Před vyřazením tabulky je nutné spustit UNSET MANAGED . Odstranění tabulky bez předchozího spuštění UNSET MANAGED může zanechat systém ve špatném stavu a vést ke ztrátě dat nebo nekonzistencím.

    • Pokud se vrátíte zpět, commity, které jste provedli v externím umístění mezi převodem a vrácením zpět, lze cestovat v čase podle verze, ale ne podle časového razítka. Sedm dní po vrácení zpět se odstraní data ve spravovaném umístění. Pro čtenáře a zapisovače v Databricks Runtime 15.4 LTS nebo vyšší, historie tabulek commitů provedených po převodu, ale před vrácením zpět, umožňuje přecházet mezi verzemi, nikoli však podle časového razítka.

    • Po převodu tabulky musíte:

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

    Převede tabulku na spravovanou beze změny nebo zakázání přístupu ke zdrojové tabulce v externím katalogu.

    • Během převodu na spravovanou se data ze zdrojové tabulky zkopírují do spravovaného umístění úložiště definovaného pro cizí tabulku a vytvoří se dvě samostatné kopie: nová spravovaná tabulka a zdrojová tabulka v externím katalogu.
    • Na rozdíl od MOVE, kde čtení a zápisy selhávají, při použití COPY zodpovídáte za správné zakázání čtení a zápisů do zdrojové tabulky v externím katalogu a za zajištění migrace úloh do nového katalogu.
    • Vrácení zpět: Pokud chcete vrátit migraci tabulky zpět, není nutné spustit UNSET MANAGED příkaz, protože zdrojová tabulka nebyla v externím katalogu narušena. Smažte tabulku a při příští synchronizaci katalogu bude znovu federována jako externí.

Kontrola převodu

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

DESCRIBE EXTENDED catalog_name.schema_name.table_name

Pokud byla tabulka převedena, Type pod col_name se zobrazí jako MANAGED pod data_type.

Známá omezení

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

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

  • 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ě cizí 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 Azure Databricks. Pokud chcete zkontrolovat umístění schématu, katalogu a metastoru, použijte následující příkazy:

    -- Check schema location
    DESCRIBE SCHEMA EXTENDED catalog_name.schema_name;
    
    -- Check catalog location
    DESCRIBE CATALOG EXTENDED catalog_name;
    
    -- Check metastore location
    DESCRIBE METASTORE;
    

časté otázky

Můžu vytvářet tabulky i převádět tabulky v cizím katalogu?

Ano, externí nebo spravované tabulky můžete vytvořit v cizím katalogu. Chování závisí na konfiguraci schématu:

  • Pro schémata Glue nebo eHMS, nebo pro schémata se spravovaným umístěním v katalogu Unity: Pokud spustíte CREATE TABLE foreign_catalog.schema.table, vytvoří se spravovaná nebo externí tabulka v katalogu Unity. Tabulka není odeslána ani synchronizována s externím katalogem.
  • Pro schémata z interních připojení do metastore Hive: Pokud se pokusíte vytvořit tabulku v cizím schématu, dojde k vytvoření cizí tabulky a zároveň se vytvoří tabulka v hive_metastore.
  • Pro starší verzi metastoru Hive: Protože se jedná o federaci čtení a zápisu, pokud vytvoříte tabulku v cizím katalogu, vytvoří také tabulku v interním metastoru Hive.

Co když jsou moje cizí tabulky založené na DBFS?

Při převodu tabulky, která je podporována DBFS, ukládáme aktuální mapování cesty DBFS na cloudovou cestu jako umístění externí cloudové cesty tabulky.

Můžu převést na úrovni schématu nebo katalogu?

Můžete iterovat přes tabulky ve svých schématech a převádět je jednotlivě, nebo využít projekt discoverx labs k převodu celých schémat nebo katalogů najednou.

df = (dx.from_tables("prod.*.*")
.with_sql("ALTER TABLE {full_table_name} SET MANAGED;")
.apply())