CONVERT TO DELTA
Gäller för: Databricks SQL
Databricks Runtime
Konverterar en befintlig Parquet-table till en Delta-table på plats. Det här kommandot visar alla filer i katalogen, skapar en Delta Lake-transaktionslogg som spårar dessa filer och automatiskt härleder data schema genom att läsa sidfötterna för alla Parquet-filer. Konverteringsprocessen samlar in statistik för att förbättra frågeprestanda på den konverterade Delta-table. Om du anger ett table namn uppdateras metaarkivet också för att återspegla att table nu är en Delta-table.
Det här kommandot stöder konvertering av Iceberg-tables vars underliggande filformat är Parquet. I det här fallet genererar konverteraren Delta Lake-transaktionsloggen baserat på Iceberg tableinbyggda filmanifest, schema och partitioneringsinformation.
Syntax
CONVERT TO DELTA table_name [ NO STATISTICS ] [ PARTITIONED BY clause ]
Parameters
-
Antingen en valfritt kvalificerad table identifier eller en sökväg till en
parquet
ellericeberg
filkatalog. Namnet får inte innehålla en temporal specifikation eller alternativspecifikation. För Iceberg tableskan du bara använda sökvägar eftersom konvertering av hanterade isberg tables inte stöds. INGEN STATISTIK
Kringgå statistikinsamlingen under konverteringsprocessen och slutför konverteringen snabbare. När table har konverterats till Delta Lake kan du använda
OPTIMIZE ZORDER BY
för att ordna om datalayouten och generate statistik.-
Partition den skapade table av den angivna columns. När
table_name
är en sökvägPARTITIONED BY
krävs för partitionerade data. Närtable_name
är en kvalificerad tableidentifierärPARTITIONED BY
-satsen valfri och partition-specifikationerna läses in från metaarkivet. I båda metoderna avbryter konverteringsprocessen och utlöser ett undantag om katalogstrukturen inte överensstämmer med den angivna eller inlästaPARTITIONED BY
specifikationen.Kommentar
I Databricks Runtime 11.1 och nedan
PARTITIONED BY
är ett obligatoriskt argument för alla partitionerade data.
Exempel
Kommentar
Du behöver inte ange partitioneringsinformation för Iceberg-tables eller tables som är registrerade i metaarkivet.
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
Varningar
Alla filer som inte spåras av Delta Lake är osynliga och kan tas bort när du kör VACUUM
. Du bör undvika att uppdatera eller lägga till datafiler under konverteringsprocessen. När table har konverterats kontrollerar du att alla skrivningar går genom Delta Lake.
Det är möjligt att flera externa tables delar samma underliggande Parquet-katalog. Om du i det här fallet kör CONVERT
på en av de externa tableskommer du inte att kunna komma åt den andra externa tables eftersom deras underliggande katalog har konverterats från Parquet till Delta Lake. För att göra förfrågningar mot eller skriva till dessa externa tables igen måste du köra CONVERT
på dem också.
CONVERT
fyller i catalog information, till exempel schema och table egenskaper, i Delta Lake-transaktionsloggen. Om den underliggande katalogen redan har konverterats till Delta Lake och dess metadata skiljer sig från catalog metadata genereras en convertMetastoreMetadataMismatchException
.
När du använder Databricks Runtime set SQL-konfigurationen spark.databricks.delta.convert.metadataCheck.enabled
falskt om du vill att CONVERT
ska skriva över befintliga metadata i Delta Lake-transaktionsloggen.