CONVERTEREN NAAR DELTA
Van toepassing op: Databricks 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
-
Een optioneel gekwalificeerde tabel-id of een pad naar een
parquet
oficeberg
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.-
Partitioneer de gemaakte tabel met de opgegeven kolommen. Wanneer
table_name
een pad is, is dePARTITIONED BY
vereist voor gepartitioneerde gegevens. Wanneer detable_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 geladenPARTITIONED 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:
- Voer de volgende opdracht uit voor garbagecollection:
VACUUM delta.`<path-to-table>` RETAIN 0 HOURS
- Verwijder de
<path-to-table>/_delta_log
map.