Freigeben über


CONVERT TO DELTA

Gilt für: durch Häkchen mit „Ja“ markiert Databricks SQL durch Häkchen mit „Ja“ markiert Databricks Runtime

Konvertiert eine vorhandene Parquet-Tabelle in eine Delta-Tabelle. Dieser Befehl listet alle Dateien im Verzeichnis auf, erstellt ein Delta Lake-Transaktionsprotokoll, in dem diese Dateien nachverfolgt werden, und leitet das Datenschema automatisch ab, indem die Fußzeilen aller Parquet-Dateien gelesen werden. Beim Konvertierungsprozess werden Statistiken erfasst, um die Abfrageleistung für die konvertierte Delta-Tabelle zu verbessern. Wenn Sie einen Tabellennamen angeben, wird auch der Metastore aktualisiert, um widerzuspiegeln, dass die Tabelle jetzt eine Delta-Tabelle ist.

Dieser Befehl unterstützt das Konvertieren von Iceberg-Tabellen, deren zugrunde liegendes Dateiformat Parquet ist. In diesem Fall generiert der Konverter ein Delta Lake-Transaktionsprotokoll basierend auf dem nativen Dateimanifest, dem Schema und den Partitionierungsinformationen der Iceberg-Tabelle.

Syntax

CONVERT TO DELTA table_name [ NO STATISTICS ] [ PARTITIONED BY clause ]

Parameter

  • table_name

    Entweder ein optional qualifizierter Tabellenbezeichner oder ein Pfad zu einem parquet- oder iceberg-Dateiverzeichnis. Der Name darf keine temporale Spezifikation enthalten. Für Iceberg-Tabellen können Sie nur Pfade verwenden, da das Konvertieren verwalteter Iceberg-Tabellen nicht unterstützt wird.

  • NO STATISTICS

    Damit können Sie die Statistikerfassung während des Konvertierungsprozesses umgehen und die Konvertierung schneller abschließen. Nachdem die Tabelle in Delta Lake konvertiert wurde, können Sie OPTIMIZE ZORDER BY verwenden, um das Datenlayout neu zu organisieren und Statistiken zu generieren.

  • PARTITIONED BY

    Partitioniert die erstellte Tabelle anhand der angegebenen Spalten. Wenn table_name ein Pfad ist, ist PARTITIONED BY für partitionierte Daten erforderlich. Wenn table_name ein qualifizierter Tabellenbezeichner ist, ist die PARTITIONED BY-Klausel optional und die Partitionsspezifikation wird aus dem Metastore geladen. Bei beiden Ansätzen bricht der Konvertierungsprozess ab und löst eine Ausnahme aus, wenn die Verzeichnisstruktur nicht der bereitgestellten oder geladenen PARTITIONED BY-Spezifikation entspricht.

    Hinweis

    In Databricks Runtime 11,1 und darunter ist PARTITIONED BY ein erforderliches Argument für alle partitionierten Daten.

Beispiele

Hinweis

Sie müssen keine Partitionsinformationen für Iceberg-Tabellen oder Tabellen bereitstellen, die für den Metastore registriert sind.

CONVERT TO DELTA database_name.table_name; -- only for Parquet tables

CONVERT TO DELTA parquet.`abfss://container-name@storage-account-name.dfs.core.windows.net/path/to/table`
  PARTITIONED BY (date DATE); -- if the table is partitioned

CONVERT TO DELTA iceberg.`abfss://container-name@storage-account-name.dfs.core.windows.net/path/to/table`; -- uses Iceberg manifest for metadata

Einschränkungen

Jede Datei, die von Delta Lake nicht nachverfolgt wird, ist unsichtbar und kann gelöscht werden, wenn Sie VACUUM ausführen. Sie sollten das Aktualisieren oder Anfügen von Datendateien während des Konvertierungsprozesses vermeiden. Stellen Sie nach der Konvertierung der Tabelle sicher, dass alle Schreibvorgänge über Delta Lake ausgeführt werden.

Es ist möglich, dass mehrere externe Tabellen das gleiche zugrunde liegende Parquet-Verzeichnis verwenden. Wenn Sie in diesem Fall CONVERT für eine der externen Tabellen ausführen, können Sie nicht auf die anderen externen Tabellen zugreifen, weil das zugrunde liegende Verzeichnis von Parquet in Delta Lake konvertiert wurde. Damit Sie diese externen Tabellen wieder abfragen oder in sie schreiben können, müssen Sie auch für sie CONVERT ausführen.

CONVERT überträgt die Kataloginformationen (z. B. Schema- und Tabelleneigenschaften) in das Delta Lake-Transaktionsprotokoll. Wenn das zugrunde liegende Verzeichnis bereits in Delta Lake konvertiert wurde und sich seine Metadaten von den Katalogmetadaten unterscheiden, wird eine convertMetastoreMetadataMismatchException ausgelöst.

Wenn Sie bei der Verwendung von Databricks Runtime die vorhandenen Metadaten im Delta Lake-Transaktionsprotokoll mit CONVERT überschreiben möchten, legen Sie die SQL-Konfiguration spark.databricks.delta.convert.metadataCheck.enabled auf „false“ fest.