CONVERT TO DELTA
Gilt für: Databricks SQL 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
-
Entweder ein optional qualifizierter Tabellenbezeichner oder ein Pfad zu einem
parquet
- odericeberg
-Dateiverzeichnis. Der Name darf keine zeitliche Spezifikation oder Optionsspezifikation 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.-
Partitioniert die erstellte Tabelle anhand der angegebenen Spalten. Wenn
table_name
ein Pfad ist, istPARTITIONED BY
für partitionierte Daten erforderlich. Wenntable_name
ein qualifizierter Tabellenbezeichner ist, ist diePARTITIONED 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 geladenenPARTITIONED 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.