KONVERTERA TILL DELTA
Gäller för: Databricks Databricks Runtime
Konverterar en befintlig Parquet-tabell till en Delta-tabell på plats. Det här kommandot visar alla filer i katalogen, skapar en Delta Lake-transaktionslogg som spårar dessa filer och härleder automatiskt dataschemat genom att läsa sidfötterna för alla Parquet-filer. Konverteringsprocessen samlar in statistik för att förbättra frågeprestanda i den konverterade Delta-tabellen. Om du anger ett tabellnamn uppdateras även metaarkivet så att det återspeglar att tabellen nu är en Delta-tabell.
Det här kommandot stöder konvertering av Iceberg-tabeller vars underliggande filformat är Parquet. I det här fallet genererar konverteraren Delta Lake-transaktionsloggen baserat på Iceberg-tabellens ursprungliga filmanifest, schema- och partitioneringsinformation.
Syntax
CONVERT TO DELTA table_name [ NO STATISTICS ] [ PARTITIONED BY clause ]
Parametrar
-
Antingen en valfritt kvalificerad tabellidentifierare eller en sökväg till en
parquet
katalog ellericeberg
filkatalog. Namnet får inte innehålla en temporal specifikation. För Isbergstabeller kan du bara använda sökvägar eftersom konvertering av hanterade isbergstabeller inte stöds. INGEN STATISTIK
Kringgå insamling av statistik under konverteringsprocessen och slutför konverteringen snabbare. När tabellen har konverterats till Delta Lake kan du använda
OPTIMIZE ZORDER BY
för att organisera om datalayouten och generera statistik.-
Partitionering av den skapade tabellen med de angivna kolumnerna. När
table_name
är en sökvägPARTITIONED BY
krävs för partitionerade data.table_name
När är en kvalificerad tabellidentifierarePARTITIONED BY
är -satsen valfri och partitionsspecifikationen läses in från metaarkivet. I båda procedurerna avbryter konverteringsprocessen och utlöser ett undantag om katalogstrukturen inte överensstämmer med den angivna eller inlästaPARTITIONED BY
specifikationen.Observera
I Databricks Runtime 11.1 och nedan
PARTITIONED BY
är ett obligatoriskt argument för alla partitionerade data.
Exempel
Observera
Du behöver inte ange partitioneringsinformation för Iceberg-tabeller eller tabeller 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 tabellen har konverterats kontrollerar du att alla skrivningar går genom Delta Lake.
Det är möjligt att flera externa tabeller delar samma underliggande Parquet-katalog. Om du i det här fallet kör CONVERT
på en av de externa tabellerna kommer du inte att kunna komma åt de andra externa tabellerna eftersom deras underliggande katalog har konverterats från Parquet till Delta Lake. Om du vill fråga eller skriva till dessa externa tabeller igen måste du köra CONVERT
på dem också.
CONVERT
fyller i kataloginformationen, till exempel schema- och tabellegenskaper, i Delta Lake-transaktionsloggen. Om den underliggande katalogen redan har konverterats till Delta Lake och dess metadata skiljer sig från katalogmetadata genereras en convertMetastoreMetadataMismatchException
.
När du använder Databricks Runtime anger du falskt om du vill CONVERT
skriva över befintliga metadata i Delta Lake-transaktionsloggen spark.databricks.delta.convert.metadataCheck.enabled
.
Ångra konverteringen
Om du har utfört Delta Lake-åtgärder som DELETE
eller OPTIMIZE
som kan ändra datafilerna:
- Kör följande kommando för skräpinsamling:
VACUUM delta.`<path-to-table>` RETAIN 0 HOURS
<path-to-table>/_delta_log
Ta bort katalogen.