Delen via


Een externe tabel converteren naar een beheerde Unity Catalog-tabel

Op deze pagina wordt beschreven hoe u een ALTER TABLE ... SET MANAGED externe tabel converteert naar een beheerde tabel in Unity Catalog in Azure Databricks.

overzicht van SET MANAGED

Gebruik de SET MANAGED functie om een externe tabel te converteren naar een beheerde Unity Catalog-tabel in Azure Databricks. Hoewel u (CTAS) ook kunt gebruiken voor conversie, raadt Databricks aan gebruik te maken CREATE TABLE AS SELECTSET MANAGED voor de volgende voordelen:

  • Minimaliseer de downtime van lezer en schrijver.
  • Gelijktijdige schrijfbewerkingen verwerken tijdens de conversie.
  • Tabelgeschiedenis behouden.
  • Dezelfde tabelconfiguraties behouden, inclusief dezelfde naam, instellingen, machtigingen en weergaven.
  • De mogelijkheid om een geconverteerde beheerde tabel terug te draaien naar een externe tabel.

Prerequisites

Als u de functie voor tabelconversie wilt gebruiken, moet u aan de volgende vereisten voldoen:

  • Alle lezers en schrijvers voor de externe tabellen moeten toegang op basis van naam gebruiken. Voorbeeld:

    SELECT * FROM catalog_name.schema_name.table_name;
    

    Padgebaseerde toegang wordt niet ondersteund en kan mislukken nadat de tabel is geconverteerd.

  • U moet Databricks Runtime 17.0 of hoger of serverloze berekeningen gebruiken om te gebruiken SET MANAGED of UNSET MANAGED.

  • Als u Unity Catalog-tabellen wilt converteren met Iceberg-leesbewerkingen (UniForm) die al zijn ingeschakeld, moet u Databricks Runtime 17.2 of hoger of serverloze berekeningen gebruiken om te gebruiken TRUNCATE UNIFORM HISTORY.

  • Azure Databricks-lezers en schrijvers moeten Databricks Runtime 15.4 LTS of hoger gebruiken. Als uw lezers of schrijvers 14.3 LTS of lager gebruiken, raadpleegt u alternatieve optie voor lezers en schrijvers in Databricks Runtime 14.3 LTS of lager.

  • De SET MANAGED opdracht mislukt met een DELTA_TRUNCATED_TRANSACTION_LOG fout als uw tabel minReaderVersion=2, minWriterVersion=7en tableFeatures={..., columnMapping}. U kunt controleren of uw tabel deze eigenschappen heeft met behulp van DESCRIBE DETAIL.

  • Externe clients (niet-Databricks) moeten leesbewerkingen ondersteunen voor beheerde tabellen in Unity Catalog. Zie Tabellen lezen met Delta-clients.

    • Gebruik het Access Insights-dashboard om te zien of lezers en schrijvers die toegang hebben tot uw tabellen Databricks Runtime of externe niet-Databricks zijn.

Important

Als u conflicten wilt voorkomen, annuleert u alle bestaande OPTIMIZE opdrachttaken (liquid clustering, compressie, ZORDER) die op de tabel worden uitgevoerd en plant u geen taken terwijl u uw externe tabellen converteert naar beheerde tabellen.

Converteren van extern naar beheerde tabel

Important

De SET MANAGED opdracht is beschikbaar in Databricks Runtime 17.0 of hoger en serverloze compute.

De TRUNCATE UNIFORM HISTORY opdracht is beschikbaar in Databricks Runtime 17.2 of hoger en serverloze berekeningen.

Voer een van de volgende opdrachten uit om de externe tabel van Unity Catalog te converteren naar een beheerde tabel van Unity Catalog.

  • Voor externe tabellen van Unity Catalog zonder Apache Iceberg-leesbewerkingen (UniForm) ingeschakeld:

    ALTER TABLE catalog.schema.my_external_table SET MANAGED;
    

    Na de conversie kunt u Iceberg-leesbewerkingen inschakelen voor uw beheerde tabel zonder problemen met compatibiliteit.

  • Voor externe Unity Catalog-tabellen waarbij Iceberg-lezen (UniForm) al is ingeschakeld:

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

    In dit geval moet u TRUNCATE UNIFORM HISTORY opnemen om optimale tabelprestaties en compatibiliteit te behouden. TRUNCATE UNIFORM HISTORY Beperkt alleen de UniForm Iceberg-geschiedenis en verwijdert geen Delta-geschiedenis. Deze opdracht resulteert in een korte lees- en schrijfdowntime voor Iceberg na de truncatie.

Als uw commando wordt onderbroken tijdens het kopiëren van gegevens, kunt u het opnieuw starten en doorgaan vanaf het punt waar u was gebleven.

Warning

Databricks raadt aan om niet meerdere SET MANAGED opdrachten tegelijk uit te voeren in dezelfde tabel, wat kan leiden tot een inconsistente tabelstatus.

Na de tabelconversie moet u het volgende doen:

  • Start streamingtaken (lezen of schrijven) opnieuw met behulp van de externe tabel.
  • Zorg ervoor dat uw lezers en schrijvers met de beheerde tabel werken.

Voorspellende optimalisatie wordt automatisch ingeschakeld, behalve als u deze handmatig hebt uitgeschakeld. Zie Controleren of voorspellende optimalisatie is ingeschakeld.

Als voorspellende optimalisatie is ingeschakeld, verwijdert Azure Databricks de gegevens automatisch na 14 dagen op de externe locatie van uw Unity Catalog. Als voorspellende optimalisatie is uitgeschakeld, kunt u uitvoeren VACUUM (hiervoor is Databricks Runtime 17.0 of hoger of serverloze rekenkracht vereist) op de zojuist geconverteerde beheerde tabel nadat 14 dagen zijn verstreken.

VACUUM my_converted_table

Note

In sommige gevallen worden de gegevens in de externe locatie van uw Unity Catalog mogelijk niet na 14 dagen verwijderd, zelfs niet als voorspellende optimalisatie is ingeschakeld. Als uw beheerde tabel in Unity Catalog bijvoorbeeld niet vaak wordt gebruikt of erg klein is, kan het automatisch verwijderen niet optreden. In dergelijke gevallen, na 14 dagen, handmatig uitvoeren VACUUM (vereist Databricks Runtime 17.0 of hoger of serverloze berekening) op de zojuist geconverteerde beheerde tabel om de oude gegevens te verwijderen.

Azure Databricks verwijdert alleen de gegevens op de externe locatie. Het Delta-transactielogboek en de verwijzing naar de tabel in Unity Catalog worden bewaard.

Conversie controleren

U kunt controleren of uw externe tabel is geconverteerd naar een beheerde tabel:

DESCRIBE EXTENDED catalog_name.schema_name.table_name

Controleer de uitvoer van deze opdracht om te bevestigen dat de tabel is geconverteerd. De tabel Type moet worden weergegeven als MANAGED.

Als u de tabelgegevens in Catalog Explorer bekijkt, vernieuwt u de pagina. Op het tabblad Details , onder Over deze tabel, moet het tabeltype worden weergegeven als MANAGED.

Alternatieve optie voor lezers en schrijvers in Databricks Runtime 14.3 LTS of lager

Databricks raadt u aan om alle lezers en schrijvers te upgraden naar Databricks Runtime 15.4 LTS of hoger om te profiteren van de SET MANAGED opdracht, inclusief de mogelijkheid om de tabelgeschiedenis te behouden.

U kunt de SET MANAGED opdracht nog steeds gebruiken als u lezers of schrijvers hebt met Databricks Runtime 14.3 of lager. Echter, na conversie naar een beheerde tabel, kunt u niet meer teruggaan naar historische doorvoeringen op basis van tijdstempel. U kunt dit alleen per versie doen. Als u binnen een termijn van 14 dagen teruggaat naar een externe tabel, wordt de mogelijkheid om naar historische commits die zijn gemaakt voor de conversie terug te gaan opnieuw ingeschakeld.

In alle gevallen (ongeacht de Databricks Runtime-versie), werkt het terugdraaien naar UC extern door tijdstempel niet voor commits die zijn gemaakt in uw geconverteerde UC Managed Table, tussen het moment dat u klaar was met converteren en voordat u probeerde terug te draaien.

Voor het schrijven naar een tabel na conversie met Databricks Runtime 15.4 LTS of lager moet de inCommitTimestamp functie worden verwijderd:

ALTER TABLE <table_name> DROP FEATURE inCommitTimestamp;

Problemen met het oplossen van conversiestoringen

In deze sectie worden veelvoorkomende problemen beschreven bij het converteren van externe tabellen naar beheerde tabellen in Unity Catalog en hoe u deze kunt oplossen.

Consistentie van Databricks Runtime-versie

Vermijd het uitvoeren of opnieuw proberen van de conversie van dezelfde tabel met behulp van verschillende Databricks Runtime-versies. Metagegevens kunnen verschillend worden geserialiseerd in verschillende versies, wat een VERSIONED_CLONE_INTERNAL_ERROR.EXISTING_FILE_VALIDATION_FAILED fout veroorzaakt. Als de conversie mislukt, probeert u altijd dezelfde Databricks Runtime-versie te gebruiken.

Cluster afsluiten tijdens conversie

Als uw cluster wordt afgesloten tijdens de conversie, kan de opdracht mislukken met DELTA_ALTER_TABLE_SET_MANAGED_INTERNAL_ERROR. Voer de opdracht opnieuw uit om de conversie te hervatten.

Beschadigde externe tabel

Als de externe tabel al is beschadigd (bijvoorbeeld een ongeldige tabelstatus), kan de conversie mislukken met fouten zoals DELTA_TRUNCATED_TRANSACTION_LOG, DELTA_TXN_LOG_FAILED_INTEGRITYof DELTA_STATE_RECOVER_ERRORS. Voordat u een conversie uitvoert, moet u ervoor zorgen dat u basisbewerkingen kunt uitvoeren in de externe tabel, zoals DESCRIBE DETAIL.

Terugdraaien naar een externe tabel

Important

De UNSET MANAGED opdracht is beschikbaar in Databricks Runtime 17.0 of hoger en serverloze compute.

Nadat u een externe tabel naar een beheerde tabel hebt geconverteerd, kunt u binnen 14 dagen terugdraaien.

Als u terugdraait, kunnen commits die naar de externe locatie zijn gedaan tussen conversie en terugdraaien, tijdreizen op basis van versies, maar niet op basis van tijdstempels. Zeven dagen na terugdraaien worden gegevens op de beheerde locatie verwijderd.

Voer de volgende opdracht uit om terug te keren naar een externe tabel:

ALTER TABLE catalog.schema.my_managed_table UNSET MANAGED

Als de terugdraaiopdracht wordt onderbroken, kunt u deze opnieuw uitvoeren om het opnieuw te proberen, vergelijkbaar met de SET BEHEERDE opdracht.

Terugdraaien controleren

U kunt bevestigen dat uw conversie is teruggedraaid:

DESCRIBE EXTENDED catalog_name.schema_name.table_name

Controleer de uitvoer van deze opdracht om te controleren of de tabel is teruggedraaid. De tabel Type moet worden weergegeven als EXTERNAL.

Als u de tabelgegevens in Catalog Explorer bekijkt, vernieuwt u de pagina. Op het tabblad Details , onder Over deze tabel, moet het tabeltype worden weergegeven als EXTERNAL.

U moet uw streamingtaken ook opnieuw starten nadat u bent teruggezet naar een externe tabel, vergelijkbaar met conversie.

Downtime en tijd voor het kopiëren van gegevens

Downtime kan optreden wanneer lezers of schrijvers tijdens de conversie toegang hebben tot de tabel. In vergelijking met de opdracht DEEP CLONE minimaliseert of elimineert de SET MANAGED opdracht echter downtime voor lezers en schrijvers. Lezers van Databricks Runtime 16.1 of hoger ervaren geen downtime. Lezers en schrijvers worden niet beïnvloed tijdens de eerste stap, wanneer de tabelgegevens en het deltalogboek worden gekopieerd.

Tijdens de tweede stap worden schrijfbewerkingen naar de externe locatie van de Unity Catalog geblokkeerd en worden commits naar de externe locatie tijdens de eerste gegevenskopie overgebracht. Deze tweede stap voor het kopiëren van gegevens leidt tot downtime voor schrijvers en lezers in Databricks Runtime 15.4 LTS of lager.

Hierna worden lezers en schrijvers verplaatst naar de beheerde locatie van Unity Catalog en wordt de nieuwe beheerde tabellocatie geregistreerd in Unity Catalog. Lezers met Databricks Runtime 16.1 of hoger ervaren een equivalent van geen downtime.

Geschatte uitvaltijd is:

Tabelgrootte Aanbevolen clustergrootte Tijd voor het kopiëren van gegevens Downtime voor lezer en schrijver
100 GB of minder 32-core / DBSQL klein ~6 min of minder ~1-2 min of minder
1 terabyte 64-core / DBSQL-medium ~30 min. ~1-2min
10 TB 256-core / DBSQL x-large ~1,5 uur ~1-5min

Bij de schattingen wordt uitgegaan van een doorvoersnelheid van 0,5-2 GB/CPU-kern/minuut.

Note

Downtime kan variëren. De prestaties van de conversie zijn afhankelijk van factoren zoals de bestandsgrootte, het aantal bestanden en het aantal doorvoeringen.

Bekende beperkingen

Het converteren van externe naar beheerde tabellen heeft de volgende beperkingen:

  • Streamingclients: u moet alle streamingtaken na de conversie opnieuw starten.

  • Beperkingen voor tabelgeschiedenis na terugdraaien: Voor lezers/schrijvers in Databricks Runtime 15.4 LTS of hoger is de tabelgeschiedenis voor doorvoeringen die na de conversie zijn gemaakt, maar voordat de terugdraaibewerking is uitgevoerd, toegankelijk per versie maar niet met een tijdstempel.

  • Beperkingen voor Delta Delen: de SET MANAGED opdracht is niet volledig compatibel met Delta Sharing. Hoewel open Delta Sharing functioneert zoals verwacht, werkt de deling van Databricks naar Databricks de beheerde locatie van de ontvangertabel niet automatisch bij. De ontvanger blijft van de oude locatie lezen totdat de tabel opnieuw wordt gedeeld. De tabel opnieuw delen:

    ALTER SHARE <share_name> REMOVE TABLE <table_name>;
    ALTER SHARE <share_name> ADD TABLE <table_name> AS <table_share_name> WITH HISTORY;
    
  • Meerdere cloudregio's: als de standaard beheerde locatie van uw Unity Catalog-metastore, catalogus of schema zich in een andere cloudregio bevindt dan de opslaglocatie van de externe tabel die wordt geconverteerd, kunt u extra kosten voor gegevensoverdracht tussen regio's in rekening brengen. De cloudprovider legt deze kosten buiten Databricks-beheer op.

    Als u de locaties van uw schema, catalogus en metastore wilt controleren, kunt u de volgende opdrachten gebruiken:

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