KONVERTERA TILL DELTA

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

  • Table_name

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

  • PARTITIONERAD AV

    Partitionering av den skapade tabellen med de angivna kolumnerna. När table_name är en sökväg PARTITIONED BY krävs för partitionerade data. table_name När är en kvalificerad tabellidentifierare PARTITIONED 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ästa PARTITIONED 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:

  1. Kör följande kommando för skräpinsamling:
VACUUM delta.`<path-to-table>` RETAIN 0 HOURS
  1. <path-to-table>/_delta_log Ta bort katalogen.