CONVERTEREN NAAR DELTA

Van toepassing op:controleren met ja Databricks SQL-controle gemarkeerd als ja Databricks Runtime

Converteert een bestaande Parquet-tabel naar een Delta-tabel ter plaatse. Met deze opdracht worden alle bestanden in de map weergegeven, wordt een Delta Lake-transactielogboek gemaakt waarmee deze bestanden worden bijgehouden en wordt automatisch het gegevensschema afgeleid door de voetteksten van alle Parquet-bestanden te lezen. Het conversieproces verzamelt statistieken om de queryprestaties voor 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, schema en partitioneringsgegevens van 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

    Het verzamelen van statistieken tijdens het conversieproces omzeilen en de conversie sneller voltooien. Nadat de tabel is geconverteerd naar Delta Lake, kunt u gebruiken OPTIMIZE ZORDER BY om de gegevensindeling opnieuw in te delen en statistieken te genereren.

  • GEPARTITIONEERD DOOR

    Partitioneer de gemaakte tabel met de opgegeven kolommen. Wanneer table_name een pad is, is de PARTITIONED BY vereist voor gepartitioneerde gegevens. Wanneer de table_name een gekwalificeerde tabel-id is, PARTITIONED BY is de component optioneel en wordt de partitiespecificatie geladen vanuit de metastore. In 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.

    Opmerking

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

Voorbeelden

Opmerking

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 uitvoert VACUUM. Vermijd het bijwerken of toevoegen van gegevensbestanden tijdens het conversieproces. Nadat de tabel is geconverteerd, moet u ervoor zorgen dat alle schrijfbewerkingen via Delta Lake gaan.

Het is mogelijk dat meerdere externe tabellen dezelfde onderliggende Parquet-map delen. Als u in dit geval op 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 query's wilt uitvoeren op of naar deze externe tabellen wilt schrijven, moet u er ook op 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 metagegevens afwijken van de catalogusmetagegevens, wordt 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.

De conversie ongedaan maken

Als u Delta Lake-bewerkingen hebt uitgevoerd, zoals DELETE of OPTIMIZE die de gegevensbestanden kunnen wijzigen:

  1. Voer de volgende opdracht uit voor garbagecollection:
VACUUM delta.`<path-to-table>` RETAIN 0 HOURS
  1. Verwijder de <path-to-table>/_delta_log map.