Freigeben über


Konvertieren einer Fremdtabelle in eine verwaltete Unity-Katalogtabelle

Von Bedeutung

Dieses Feature befindet sich in der öffentlichen Vorschau und ist derzeit nur für teilnehmende Kunden verfügbar. Um an der Vorschau teilzunehmen, wenden Sie sich an, indem Sie dieses Formular ausfüllen. Dieses Feature unterstützt nur das Konvertieren fremder Tabellen, die mit HMS und Glue Federation verbunden sind.

Auf dieser Seite wird beschrieben, wie Sie mit SET MANAGED eine Fremdtabelle in eine verwaltete Tabelle konvertieren.

Übersicht SET MANAGED

Verwenden Sie das SET MANAGED Feature, um eine Fremdtabelle in eine verwaltete Unity-Tabelle in Azure Databricks zu konvertieren. SET MANAGED bietet die folgenden Vorteile:

  • Tabellenverlauf beibehalten.
  • Beibehalten der gleichen Tabellenkonfigurationen, einschließlich desselben Namens, der Einstellungen, Berechtigungen und Ansichten.
  • Profitieren Sie von der Vorhersageoptimierung. Beim Konvertieren einer Tabelle in verwaltet, wird die prädiktive Optimierung auf INHERIT gesetzt, d. h., sie erbt die Einstellung von der Schema- oder Katalogebene. Standardmäßig ist dies derzeit deaktiviert. Sie können die prädiktive Optimierung für die konvertierte Tabelle aktivieren, indem Sie ALTER TABLE <table_name> ENABLE PREDICTIVE OPTIMIZATION ausführen, wodurch sie auf ENABLED statt auf INHERIT gesetzt wird.

Voraussetzungen

  • Datenformat: Das Datenformat der Fremdtabelle muss Delta Lake sein. Um eine einmalige Konvertierung für Parquet auszuführen, sehen Sie Convert to Delta Lake.
  • Tabellentyp: Der HMS-Tabellentyp muss eine externe HMS-Tabelle sein. Der Befehl schlägt fehl, wenn die Tabelle eine verwaltete HMS-Tabelle ist.
  • Laufzeit: Databricks Runtime 17.3 oder höher
  • Berechtigungen: OWNER oder MANAGE Berechtigungen für die Tabelle und CREATE Berechtigung für das EXTERNAL LOCATION

Syntax

Führen Sie den folgenden Befehl aus, um ihre Fremdtabelle im Unity-Katalog in eine verwaltete Unity-Katalogtabelle zu konvertieren:

ALTER TABLE source_table SET MANAGED {MOVE | COPY}

Die Parameter

  • source_table

    Eine vorhandene Fremdtabelle im Unity-Katalog. Fremdtabellen enthalten Daten und Metadaten, die von einem externen Katalog verwaltet werden. Vor der Konvertierung, wenn Sie die Quelltabelle im externen Katalog löschen, wird die Fremdtabelle auch im Unity-Katalog gelöscht. Nachdem die Tabelle in "verwaltet" konvertiert wurde, wirkt sich das Ablegen der Quelltabelle im externen Katalog nicht auf die verwaltete Tabelle des Unity-Katalogs aus.

  • MOVE

    Konvertiert die Tabelle in eine verwaltete Tabelle und deaktiviert den Zugriff auf die Quelltabelle des externen Katalogs.

    • Der Zugriff über den externen Katalog oder pfadbasierten Zugriff schlägt fehl, nachdem die Tabelle konvertiert wurde. Alle Leser und Autoren in der Tabelle müssen den Unity Catalog-Namespace für den Zugriff verwenden.

    • Alle Leser und Autoren müssen namenbasierten Zugriff verwenden. Beispiel:

      SELECT * FROM catalog_name.schema_name.table_name;
      
    • Der pfadbasierte Zugriff wird nicht unterstützt und schlägt fehl, nachdem die Tabelle konvertiert wurde. Beispiel:

      SELECT * FROM delta.`protocol://path/to/table`;
      
    • Externe Clients, die nicht Azure Databricks verwenden, müssen Lesevorgänge in verwalteten Tabellen des Unity-Katalogs unterstützen. Siehe Kompatibilitätsmodus.

    • Verwenden Sie das Access Insights-Dashboard, um zu sehen, ob Leser und Autoren, die auf Ihre Tabellen zugreifen, Databricks-Runtime oder externe Nicht-Azure Databricks-Clients sind.

    • Azure Databricks-Leser und -Autoren müssen Databricks Runtime 15.4 LTS oder höher verwenden. Wenn Ihre Leser oder Autoren Databricks Runtime 14.3 LTS oder darunter verwenden, sehen Sie Alternative Option für Leser und Autoren auf Databricks Runtime 14.3 LTS oder darunter.

    • Ausfallzeiten können auftreten, wenn Leser oder Autoren während der Konvertierung auf die Tabelle zugreifen. Weitere Informationen finden Sie unter Konvertieren einer externen Tabelle in eine verwaltete Unity-Katalogtabelle.

    • Wenn der Befehl unterbrochen wird, bleibt die Tabelle möglicherweise als externe Tabelle übrig, da die Konvertierung in eine verwaltete Tabelle unvollständig ist. Führen Sie SET MANAGED erneut auf der externen Tabelle aus, um den Vorgang abzuschließen.

    • Die Vorhersageoptimierung wird auf INHERIT gesetzt, es sei denn, Sie haben sie manuell konfiguriert. Um zu überprüfen, ob die Vorhersageoptimierung aktiviert ist, lesen Sie Check whether predictive optimization is enabled.

    • Rollback: Führen Sie den Befehl aus, UNSET MANAGED um das Rollback der Tabellenmigration rückgängig zu machen und wieder auf die Quelltabelle im externen Katalog zuzugreifen. Die Tabelle wird nach dem Ausführen des Befehls zu einer externen Tabelle. Wenn Sie die Tabelle in eine Fremdtabelle umwandeln möchten, löschen Sie die Tabelle, und sie wird in der nächsten Katalogsynchronisierung als Fremdtabelle neu verknüpft.

      ALTER TABLE catalog.schema.my_managed_table UNSET MANAGED
      

      Warnung

      Sie müssen UNSET MANAGED unbedingt ausführen, bevor Sie die Tabelle löschen. Wenn Sie die Tabelle löschen, ohne zuerst UNSET MANAGED auszuführen, kann Ihr System in einen schlechten Zustand geraten und zu Datenverlust oder Inkonsistenzen führen.

    • Wenn Sie ein Rollback ausführen, sind Commits, die Sie an dem externen Speicherort zwischen Konvertierung und Rollback vorgenommen haben, zeitverwendbar nach Version, aber nicht nach Zeitstempel. Sieben Tage nach dem Rollback werden Die Daten am verwalteten Speicherort gelöscht. Für Leser und Autoren in Databricks Runtime 15.4 LTS oder höher ist der Tabellenverlauf für Commits, die nach der Konvertierung, aber vor dem Rollback vorgenommen wurden, nach Versionen zeitreisefähig, jedoch nicht nach Zeitstempel.

    • Nach der Tabellenkonvertierung müssen Sie:

      • Starten Sie alle Streamingaufträge (lesen oder schreiben) mithilfe der Fremdtabelle neu.
      • Stellen Sie sicher, dass Ihre Leser und Autoren mit der verwalteten Tabelle arbeiten.
  • COPY

    Konvertiert die Tabelle in verwaltet, ohne den Zugriff auf die Quelltabelle im externen Katalog zu ändern oder zu deaktivieren.

    • Während der Konvertierung in eine verwaltete Tabelle werden Daten aus der Quelltabelle in den für die Fremdtabelle definierten verwalteten Speicherort kopiert, wodurch zwei separate Kopien erstellt werden: die neue verwaltete Tabelle und die Quelltabelle im externen Katalog.
    • Im Gegensatz zu MOVE, wo Lese- und Schreibvorgänge fehlschlagen, sind Sie bei der Verwendung von COPY dafür verantwortlich, Lese- und Schreibvorgänge ordnungsgemäß für die Quelltabelle im externen Katalog zu deaktivieren und sicherzustellen, dass Workloads in den neuen Katalog migriert wurden.
    • Rollback: Zum Zurücksetzen der Tabellenmigration müssen Sie den UNSET MANAGED Befehl nicht ausführen, da die Quelltabelle nicht im externen Katalog unterbrochen wurde. Legen Sie die Tabelle ab, und sie wird in der nächsten Katalogsynchronisierung als fremd verknüpft.

Konvertierung überprüfen

Sie können bestätigen, dass Ihre externe Tabelle in eine verwaltete Tabelle konvertiert wurde:

DESCRIBE EXTENDED catalog_name.schema_name.table_name

Wenn die Tabelle konvertiert wurde, wird Type unter col_name als MANAGED unter data_type angezeigt.

Bekannte Einschränkungen

Das Konvertieren von Fremdtabellen in verwaltete Tabellen hat die folgenden Einschränkungen:

  • Streamingclients: Sie müssen alle Streamingaufträge nach der Konvertierung neu starten.

  • Mehrere Cloudregionen: Wenn sich der standardmäßig verwaltete Speicherort Ihres Unity-Katalogmetastores, -Katalogs oder -Schemas in einer anderen Cloudregion befindet als der Speicherort der zu konvertierenden Fremdtabelle, können Sie zusätzliche regionsübergreifende Datenübertragungskosten verursachen. Der Cloudanbieter erzwingt diese Gebühren außerhalb der Kontrolle von Azure Databricks. Verwenden Sie die folgenden Befehle, um die Speicherorte Ihres Schemas, Katalogs und Metastores zu überprüfen:

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

Häufig gestellte Fragen

Kann ich Tabellen erstellen und Tabellen in einem fremdkatalog konvertieren?

Ja, Sie können externe oder verwaltete Tabellen in einem fremden Katalog erstellen. Das Verhalten hängt von der Schemakonfiguration ab:

  • Für Glue- oder eHMS-Schemas oder für Schemas mit einem verwalteten Speicherort im Unity-Katalog: Wenn Sie ausführen CREATE TABLE foreign_catalog.schema.table, erstellt dies eine verwaltete oder externe Tabelle im Unity-Katalog. Die Tabelle wird nicht mit dem externen Katalog verschoben oder synchronisiert.
  • Für Schemas aus internen Hive-Metaspeicherverbindungen: Wenn Sie versuchen, eine Tabelle in einem fremdschema zu erstellen, erstellt sie weiterhin eine Fremdtabelle und erstellt auch eine Tabelle in hive_metastore.
  • Bei legacy-Arbeitsbereich-Hive-Metaspeicher: Da es ein Lese- und Schreibverbund ist, erstellt er auch eine Tabelle im internen Hive-Metaspeicher, wenn Sie eine Tabelle im fremden Katalog erstellen.

Was geschieht, wenn meine Fremdtabellen von DBFS unterstützt werden?

Beim Konvertieren einer DBFS-gesicherten Tabelle speichern wir die aktuelle Zuordnung des DBFS-Pfads zum Cloud-Pfad als Cloud-Pfad-Standort der externen Tabelle.

Kann ich auf Schema- oder Katalogebene konvertieren?

Sie können Ihre Tabellen in Ihren Schemas durchlaufen, um einzeln zu konvertieren, oder das Discoverx Labs-Projekt verwenden, um ganze Schemas oder Kataloge gleichzeitig zu konvertieren:

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