Dela via


CONVERT TO DELTA

Gäller för:markerad ja Databricks SQL markerad ja 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

  • table_name

    Antingen en valfritt kvalificerad table identifier eller en sökväg till en parquet eller iceberg 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.

  • PARTITIONERAD AV

    Partition den skapade table av den angivna columns. När table_name är en sökväg PARTITIONED BY krävs för partitionerade data. När table_name är en kvalificerad tableidentifierär PARTITIONED 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ästa PARTITIONED 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.