Een Delta-tabel verwijderen of vervangen
Azure Databricks ondersteunt SQL-standaard DDL-opdrachten voor het verwijderen en vervangen van tabellen die zijn geregistreerd met Unity Catalog of de Hive-metastore. Dit artikel bevat voorbeelden van het verwijderen en vervangen van Delta-tabellen en aanbevelingen voor syntaxis, afhankelijk van uw geconfigureerde omgeving en het gewenste resultaat.
Wanneer een tabel neer te zetten
U moet DROP TABLE
een tabel verwijderen uit de metastore wanneer u de tabel permanent wilt verwijderen en geen intentie hebt om een nieuwe tabel op dezelfde locatie te maken. Voorbeeld:
DROP TABLE table_name
DROP TABLE
heeft verschillende semantiek, afhankelijk van het type tabel en of de tabel is geregistreerd bij Unity Catalog of de verouderde Hive-metastore.
Tabeltype | Metastore | Gedrag |
---|---|---|
Beheerd | Unity-catalogus | De tabel wordt verwijderd uit de metastore en onderliggende gegevens worden gemarkeerd voor verwijdering. U kunt UNDROP gedurende 7 dagen gegevens in beheerde tabellen in Unity Catalog gebruiken. |
Beheerd | Hive | De tabel wordt verwijderd uit de metastore en de onderliggende gegevens worden verwijderd. |
External | Unity-catalogus | De tabel wordt verwijderd uit de metastore, maar de onderliggende gegevens blijven behouden. URI-toegangsbevoegdheden worden nu beheerd door de externe locatie die de gegevens bevat. |
External | Hive | De tabel wordt verwijderd uit de metastore, maar de onderliggende gegevens blijven behouden. Alle URI-toegangsbevoegdheden zijn ongewijzigd. |
DROP TABLE
semantiek verschilt tussen tabeltypen en Unity Catalog onderhoudt een geschiedenis van Delta-tabellen met behulp van een interne tabel-id. Alle tabellen delen echter het algemene resultaat dat nadat de bewerking is voltooid, de eerder geregistreerde tabelnaam geen actieve koppeling meer heeft naar gegevens en tabelgeschiedenis uit de metastore.
Zie DROP TABLE.
Notitie
Databricks raadt het verwijderen van een tabel niet aan en maakt vervolgens een tabel opnieuw met dezelfde naam voor productiepijplijnen of -systemen, omdat dit patroon onverwachte resultaten kan opleveren voor gelijktijdige bewerkingen. Zie Gegevens vervangen door gelijktijdige bewerkingen.
Wanneer een tabel moet worden vervangen
Databricks raadt het gebruik van CREATE OR REPLACE TABLE
instructies aan voor use cases waarin u de doeltabel volledig wilt overschrijven met nieuwe gegevens. Als u bijvoorbeeld een Delta-tabel wilt overschrijven met alle gegevens uit een Parquet-map, kunt u de volgende opdracht uitvoeren:
CREATE OR REPLACE TABLE table_name
AS SELECT * FROM parquet.`/path/to/files`
CREATE OR REPLACE TABLE
heeft dezelfde semantiek, ongeacht het tabeltype of metastore dat wordt gebruikt. Het volgende zijn belangrijke voordelen van CREATE OR REPLACE TABLE
:
- De inhoud van de tabel wordt vervangen, maar de tabelidentiteit blijft behouden.
- De tabelgeschiedenis wordt bewaard en u kunt de tabel terugzetten naar een eerdere versie met de
RESTORE
opdracht. - De bewerking is één transactie, dus er is nooit een tijdstip waarop de tabel niet bestaat.
- Gelijktijdige query's die uit de tabel worden gelezen, kunnen zonder onderbreking worden voortgezet. Omdat de versie vóór en na vervanging nog steeds bestaat in de tabelgeschiedenis, kunnen gelijktijdige query's zo nodig verwijzen naar een van beide versies van de tabel.
Zie CREATE TABLE [USING].
Gegevens vervangen door gelijktijdige bewerkingen
Wanneer u een volledige vervanging wilt uitvoeren van gegevens in een tabel die kan worden gebruikt in gelijktijdige bewerkingen, moet u gebruiken CREATE OR REPLACE TABLE
.
Het volgende antipatroon mag niet worden gebruikt:
-- This is an anti-pattern. Avoid doing this!
DROP TABLE IF EXISTS table_name;
CREATE TABLE table_name
AS SELECT * FROM parquet.`/path/to/files`;
De redenen voor deze aanbeveling variëren, afhankelijk van of u beheerde of externe tabellen gebruikt en of u Unity Catalog gebruikt, maar voor alle Delta-tabeltypen die dit patroon gebruiken, kan dit leiden tot een fout, verwijderde records of beschadigde resultaten.
In plaats daarvan raadt Databricks aan altijd gebruik te maken CREATE OR REPLACE TABLE
, zoals in het volgende voorbeeld:
CREATE OR REPLACE TABLE table_name
AS SELECT * FROM parquet.`/path/to/files`
Omdat de tabelgeschiedenis wordt bijgehouden tijdens de vervanging van atomische gegevens, kunnen gelijktijdige transacties de versie van de brontabel valideren waarnaar wordt verwezen en daarom indien nodig mislukken of gelijktijdige transacties afstemmen zonder onverwacht gedrag of resultaten te introduceren.