Delen via


CONVERT TO DELTA

Van toepassing op: vinkje als ja aan Databricks SQL vinkje als ja aan Databricks Runtime

Converteert een bestaande Parquet-tabel naar een Delta-tabel in-place. Met deze opdracht worden alle bestanden in de map weergegeven, wordt een Delta Lake-transactielogboek gemaakt waarmee deze bestanden worden bijgehouden en wordt het gegevensschema automatisch afgeleid door de voetteksten van alle Parquet-bestanden te lezen. Het conversieproces verzamelt statistieken om de queryprestaties in de geconverteerde Delta-tabel te verbeteren. Als u een tabelnaam opgeeft, wordt de metastore ook bijgewerkt om aan te geven dat de tabel nu een Delta-tabel is.

Deze opdracht ondersteunt het converteren van Iceberg-tabellen waarvan de onderliggende bestandsindeling Parquet is. In dit geval genereert het conversieprogramma het Delta Lake-transactielogboek op basis van het systeemeigen bestandsmanifest, het schema en de partitioneringsgegevens van de Iceberg-tabel.

Syntaxis

CONVERT TO DELTA table_name [ NO STATISTICS ] [ PARTITIONED BY clause ]

Parameters

  • table_name

    Een optioneel gekwalificeerde tabel-id of een pad naar een parquet of iceberg bestandsmap. De naam mag geen tijdelijke specificatie bevatten. Voor Iceberg-tabellen kunt u alleen paden gebruiken, omdat het converteren van beheerde ijsbergtabellen niet wordt ondersteund.

  • GEEN STATISTIEKEN

    Sla het verzamelen van statistieken tijdens het conversieproces over en voltooi de conversie sneller. Nadat de tabel is geconverteerd naar Delta Lake, kunt u de OPTIMIZE ZORDER BY gegevensindeling opnieuw organiseren en statistieken genereren.

  • GEPARTITIONEERD DOOR

    Partitioneer de gemaakte tabel door de opgegeven kolommen. Wanneer table_name is een pad vereist PARTITIONED BY voor gepartitioneerde gegevens. Wanneer het table_name een gekwalificeerde tabel-id is, PARTITIONED BY is de component optioneel en wordt de partitiespecificatie geladen vanuit de metastore. Bij beide benaderingen wordt het conversieproces afgebroken en wordt er een uitzondering gegenereerd als de mapstructuur niet voldoet aan de opgegeven of geladen PARTITIONED BY specificatie.

    Notitie

    In Databricks Runtime 11.1 en hieronder PARTITIONED BY is een vereist argument voor alle gepartitioneerde gegevens.

Voorbeelden

Notitie

U hoeft geen partitioneringsgegevens op te geven voor Iceberg-tabellen of -tabellen die zijn geregistreerd bij de metastore.

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

Waarschuwingen

Elk bestand dat niet door Delta Lake wordt bijgehouden, is onzichtbaar en kan worden verwijderd wanneer u deze uitvoert VACUUM. Vermijd het bijwerken of toevoegen van gegevensbestanden tijdens het conversieproces. Nadat de tabel is geconverteerd, moet u ervoor zorgen dat alle schrijfbewerkingen door Delta Lake gaan.

Het is mogelijk dat meerdere externe tabellen dezelfde onderliggende Parquet-map delen. Als u in dit geval een van de externe tabellen uitvoert CONVERT , hebt u geen toegang tot de andere externe tabellen omdat de onderliggende map is geconverteerd van Parquet naar Delta Lake. Als u opnieuw een query wilt uitvoeren of naar deze externe tabellen wilt schrijven, moet u ze ook uitvoeren CONVERT .

CONVERT vult de catalogusgegevens, zoals schema- en tabeleigenschappen, in op het Delta Lake-transactielogboek. Als de onderliggende map al is geconverteerd naar Delta Lake en de bijbehorende metagegevens afwijken van de metagegevens van de catalogus, wordt er een convertMetastoreMetadataMismatchException gegenereerd.

Als u tijdens het gebruik van Databricks Runtime de bestaande metagegevens in het Delta Lake-transactielogboek wilt CONVERT overschrijven, stelt u de SQL-configuratie spark.databricks.delta.convert.metadataCheck.enabled in op false.