Kolommen hernoemen en verwijderen met Delta Lake-kolomtoewijzing
Azure Databricks ondersteunt kolomtoewijzing voor Delta Lake-tabellen, waardoor wijzigingen in alleen metagegevens kolommen kunnen markeren als verwijderd of hernoemd zonder gegevensbestanden opnieuw te schrijven. Hiermee kunnen gebruikers ook kolommen van Delta-tabellen een naam geven met tekens die niet zijn toegestaan door Parquet, zoals spaties, zodat gebruikers CSV- of JSON-gegevens rechtstreeks in Delta kunnen opnemen zonder dat ze de naam van kolommen hoeven te wijzigen vanwege eerdere tekenbeperkingen.
Belangrijk
Tabellen waarvoor kolomtoewijzing is ingeschakeld, kunnen alleen worden gelezen in Databricks Runtime 10.4 LTS en hoger.
Gepartitioneerde tabellen waarvoor kolomtoewijzing is ingeschakeld, gebruiken willekeurige voorvoegsels in plaats van kolomnamen voor partitiemappen. Zie Delen Delta Lake en Parquet partitiestrategieën?.
Het inschakelen van kolomtoewijzing voor tabellen kan verstoringen veroorzaken in de downstream-bewerkingen die afhankelijk zijn van de Delta-wijzigingsgegevensfeed. Zie Beperkingen van gegevensfeeds aanpassen voor tabellen met ingeschakelde kolomtoewijzing.
Als u kolomtoewijzing inschakelt voor tabellen, kan dit het streamen van leesbewerkingen vanuit de Delta-tabel als bron verstoren, ook in DLT. Zie Streaming met kolomtoewijzing en schemawijzigingen.
Kolomtoewijzing inschakelen
De volgende Delta-protocollen zijn vereist voor kolomtoewijzing.
- Lezer versie 2 of hoger.
- Writer versie 5 of hoger.
Voor een Delta-tabel met de vereiste protocolversies kunt u kolomtoewijzing inschakelen door delta.columnMapping.mode
in te stellen op name
.
U kunt de volgende opdracht gebruiken om kolomtoewijzing in te schakelen:
ALTER TABLE <table-name> SET TBLPROPERTIES (
'delta.columnMapping.mode' = 'name'
)
Zie Schakel kolomtoewijzing uit.
De naam van een kolom wijzigen
Notitie
Beschikbaar in Databricks Runtime 10.4 LTS en hoger.
Wanneer kolomtoewijzing is ingeschakeld voor een Delta-tabel, kunt u de naam van een kolom wijzigen:
ALTER TABLE <table-name> RENAME COLUMN old_col_name TO new_col_name
Zie Delta Lake-tabelschema bijwerkenvoor meer voorbeelden.
Kolommen verwijderen
Notitie
Beschikbaar in Databricks Runtime 11.3 LTS en hoger.
Wanneer kolomtoewijzing is ingeschakeld voor een Delta-tabel, kunt u een of meer kolommen verwijderen:
ALTER TABLE table_name DROP COLUMN col_name
ALTER TABLE table_name DROP COLUMNS (col_name_1, col_name_2, ...)
Zie Delta Lake-tabelschema bijwerkenvoor meer informatie.
Ondersteunde tekens in kolomnamen
Wanneer kolomtoewijzing is ingeschakeld voor een Delta-tabel, kunt u spaties en een van deze tekens opnemen in de kolomnamen van de tabel: ,;{}()\n\t=
.
Streamen met kolomtoewijzing en schemaveranderingen
Belangrijk
Deze functie bevindt zich in openbare preview in Databricks Runtime 13.3 LTS en hoger.
U kunt een locatie voor schematracking opgeven om streaming vanuit Delta-tabellen in te schakelen waarvoor kolomtoewijzing is ingeschakeld. Hiermee wordt een probleem opgelost waarbij niet-additieve schemawijzigingen kunnen leiden tot verbroken stromen.
Elke streaming-lezing van een gegevensbron moet zijn eigen schemaTrackingLocation
hebben. De opgegeven schemaTrackingLocation
moet zijn opgenomen in de map die is gespecificeerd voor de checkpointLocation
van de doeltabel voor streaming schrijven.
Notitie
Voor streamingworkloads die gegevens uit meerdere Delta-brontabellen combineren, moet u unieke mappen opgeven in de checkpointLocation
voor elke brontabel.
De optie schemaTrackingLocation
wordt gebruikt om het pad voor schematracering op te geven, zoals wordt weergegeven in het volgende codevoorbeeld:
checkpoint_path = "/path/to/checkpointLocation"
(spark.readStream
.option("schemaTrackingLocation", checkpoint_path)
.table("delta_source_table")
.writeStream
.option("checkpointLocation", checkpoint_path)
.toTable("output_table")
)
Uitschakelen van kolomtoewijzing
In Databricks Runtime 15.3 en hoger kunt u de opdracht DROP FEATURE
gebruiken om kolomtoewijzing uit een tabel te verwijderen en het tabelprotocol te downgraden.