Delen via


Transactions

Belangrijk

Transacties die naar beheerde Delta-tabellen van Unity Catalog schrijven, bevinden zich in openbare preview.

Transacties die naar beheerde Iceberg-tabellen in Unity Catalog schrijven, bevinden zich in private preview. Als u wilt deelnemen aan deze preview, dient u het voorbeeldformulier voor beheerde Iceberg-tabellen in.

Met transacties kunt u bewerkingen coördineren in meerdere SQL-instructies en -tabellen. Alle wijzigingen slagen samen of worden teruggedraaid, waardoor gegevensconsistentie tussen uw bewerkingen en tabellen wordt gegarandeerd. Transacties bieden ACID-garanties: atomiciteit, consistentie, isolatie en duurzaamheid. Bekijk wat zijn ACID-garanties in Azure Databricks? Transacties kunnen worden gebruikt met opgeslagen procedures en SQL Scripting om bedrijfskritieke opslagworkloads te bouwen.

In het volgende voorbeeld ziet u een transactie:

BEGIN ATOMIC
  UPDATE accounts SET balance = balance - 100 WHERE id = 1;
  UPDATE accounts SET balance = balance + 100 WHERE id = 2;
  INSERT INTO audit_log VALUES (1, 2, 100, current_timestamp());
END;

Alle drie de statements worden samen verwerkt. Als een statement mislukt, worden alle wijzigingen teruggedraaid en beëindigt Databricks de transactie zonder ongewenste gevolgen.

Zie Zelfstudie: Transacties coördineren tussen tabellen voor praktische praktijk met transacties.

Requirements

Om transacties uit te voeren die meerdere instructies of meerdere tabellen omvatten:

  • Alle tabellen die naar zijn geschreven, moeten:
  • Ondersteunde berekeningen gebruiken:
    • Gebruik voor niet-interactieve transacties een SQL-warehouse, serverloze berekening of cluster waarop Databricks Runtime 18.0 en hoger wordt uitgevoerd.
    • Gebruik een SQL Warehouse voor interactieve transacties.
    • Gebruik Databricks Runtime 18.1 en hoger voor transacties op gedeelde assets voor Delta Sharing.

Transactiemodi

Azure Databricks ondersteunt twee transactiemodi:

Mode Syntaxis Doorvoeren Terugdraaien Ideaal voor
Niet-interactief Atomische samengestelde uitdrukking Automatisch bij succes Automatisch bij fout Vaste reeksen, geplande taken
Interactief BEGIN TRANSACTIE; DOORVOEREN; Handleiding Handleiding Voorwaardelijke logica, validatie en foutopsporing, JDBC, ODBC, PyDBC

Zie Transactiemodi voor gedetailleerde syntaxis, voorbeelden en gebruikspatronen voor beide modi.

Ondersteunde bewerkingen

U kunt de volgende bewerkingen binnen transacties gebruiken:

Operatie Beschrijving
SELECT Query's uitvoeren op gegevens en resultaten valideren
VALUES clausule Testgegevens of constante waarden genereren
INSERT (inclusief alle varianten) Nieuwe rijen toevoegen
UPDATE Bestaande rijen wijzigen
COPY INTO Gegevens uit een bestand laden in een Delta-tabel
DELETE FROM Rijen verwijderen
MERGE INTO Upsert-patronen waarbij invoegen, bijwerken en verwijderen worden gecombineerd

Lees bronnen in transacties

Transacties kunnen worden gelezen uit Unity Catalog-tabellen (Delta en Iceberg), streamingtabellen, weergaven en gerealiseerde weergaven. Als u wilt lezen uit niet-transactionele bronnen, gebruikt u de allow_nontransactional_reads hint.

Lezen uit niet-transactionele bronnen

Als u wilt lezen uit niet-transactionele bronnen zoals Parquet-bestanden, Avro-bestanden en federatieve tabellen met behulp van JDBC, gebruikt u de allow_nontransactional_reads hint, zoals in het volgende voorbeeld:

BEGIN TRANSACTION;

-- Read from a non-transactional Parquet source
INSERT INTO transactional_table
SELECT col1, col2
FROM parquet.`/path/to/data`
WITH (allow_nontransactional_reads = true);

-- Read from a managed Delta table (no hint needed)
INSERT INTO another_table
SELECT * FROM managed_delta_table;

COMMIT;

Waarschuwing

Niet-transactionele leesbewerkingen zijn niet herhaalbaar. Gelijktijdige wijzigingen in de brongegevens tijdens de transactie kunnen leiden tot inconsistente leesbewerkingen.

Transactieisolatie

Transacties bieden consistente leesbewerkingen voor alle queries. Wanneer u een tabel in een transactie opent, legt Azure Databricks bij eerste toegang een consistente momentopname van die tabel vast. Alle volgende leesbewerkingen van die tabel maken gebruik van deze momentopname, zodat uw leesbewerkingen consistent blijven, zelfs als andere gebruikers dezelfde tabellen gelijktijdig wijzigen.

Voorbeeld:

BEGIN TRANSACTION;

-- First access to products table captures snapshot
SELECT * FROM products WHERE product_id = 1001;

-- Another user updates product 1001

-- Still reads the same snapshot (repeatable read)
SELECT * FROM products WHERE product_id = 1001;

COMMIT;

Conflictdetectie en gelijktijdigheid

Azure Databricks maakt gebruik van optimistisch gelijktijdigheidsbeheer. Transacties worden uitgevoerd zonder vergrendeling en conflicten worden gedetecteerd bij het bevestigen. Wanneer u doorvoert, controleert Azure Databricks of andere transacties dezelfde gegevens hebben gewijzigd nadat uw transactie is gestart. Als er conflicten bestaan, mislukt uw transactie. Voor niet-interactieve transacties gebeurt het terugdraaien ook automatisch. Voor interactieve transacties moet u expliciet uitvoeren ROLLBACK om de transactiestatus te wissen voordat u een nieuwe transactie start.

Niet-interactieve transacties ondersteunen gelijktijdigheid op rijniveau. Twee transacties kunnen verschillende rijen in hetzelfde gegevensbestand wijzigen zonder conflicteren wanneer gelijktijdigheid op rijniveau is ingeschakeld voor de doeltabellen.

Interactieve transacties ondersteunen gelijktijdigheid op tabelniveau.

Conflictscenario's

Scenario Beschrijving
Schrijf-schrijfconflicten Twee transacties werken dezelfde rijen bij of verwijderen.
Schrijf-lezenconflicten Een andere transactie heeft rijen gewijzigd die door uw transactie zijn gelezen. Alleen van toepassing op serialiseerbare isolatie.
Fantoomleesconflicten Een andere transactie heeft nieuwe rijen toegevoegd die overeenkomen met een predicaat dat uw transactie heeft gelezen. Is van toepassing op zowel WriteSerializable als Serializable isolatie.
Conflicten met metagegevens Een andere transactie heeft een tabelschema of eigenschappen gewijzigd.

Zie Transactiemodi voor meer informatie over isolatieniveaus en conflictoplossing voor transacties. Zie Optimalisatieaan aanbevelingen voor Azure Databricks voor informatie over isolatieniveaus en schrijfconflictgedrag voor Delta Lake-tabellen in Azure Databricks.

Hoe transacties worden weergegeven in het Delta-logboek

Elke geslaagde transactie wordt weergegeven als één vermelding in het Delta-logboek van de tabel, ongeacht het aantal afzonderlijke instructies dat in de transactie is uitgevoerd. Dit biedt een schone audittrail en vereenvoudigt terugdraaibewerkingen.

Afzonderlijke bewerkingen binnen een transactie zijn beschikbaar als JSON-metagegevens in de Delta-logboekvermelding voor de transactie.

Foutafhandeling en terugdraaien

In de volgende tabel wordt beschreven hoe fouten worden teruggedraaid voor beide transactietypen:

Scenario Gedrag voor niet-interactieve transacties Gedrag voor interactieve transacties
Verklaringsfout Elke commando die een fout veroorzaakt, veroorzaakt onmiddellijke automatische rollback. U moet ROLLBACK expliciet uitvoeren om wijzigingen te negeren als de sessie nog steeds actief is.
Mislukte validatielogica of bedrijfsregels Gebruik SIGNAL om een uitzondering op te werpen en een automatische terugdraaiing te activeren. Voer ROLLBACK uit om wijzigingen te negeren.
Sessieverbinding verbroken De transactie wordt automatisch teruggedraaid. De transactie wordt automatisch teruggedraaid.
Onderbreking Wordt automatisch teruggedraaid na de totale duur van 48 uur. Wordt automatisch teruggedraaid na 10 minuten inactiviteit of de totale duur van 48 uur (zie Beperkingen). De transactie wordt beëindigd zonder bijwerkingen, maar u moet ROLLBACK expliciet uitvoeren om de transactiestatus te wissen als de sessie nog steeds actief is.

Voor interactieve transacties kunt u expliciet terugdraaien met behulp van de instructie TERUGDRAAIEN . Dit is handig als u wijzigingen wilt negeren op basis van validatielogica of bedrijfsregels of na een instructiefout wanneer de sessie actief blijft.

Beste praktijken

Volg deze procedures om conflicten te verminderen en de transactieprestaties te optimaliseren.

Conflicten voorkomen

  • Houd transacties kort: langlopende transacties vergroten de kans op conflicten en houden resources langer vast.
  • Vroeg valideren: Controleer de voorwaarden aan het begin van een transactie om snel te mislukken.
  • Databricks raadt niet-interactieve transacties aan voor de meeste gebruiksvoorbeelden: niet-interactieve transacties maken gebruik van gelijktijdigheid op rijniveau. Zie niet-interactieve transacties.
  • Opnieuw proberen bij conflicten: wanneer er conflicten optreden, voert u de transactie opnieuw uit met nieuwe gegevens.

Transacties van verschillende clients gebruiken

Transacties werken in verschillende clientinterfaces:

Beperkingen

De volgende beperkingen gelden voor transacties die meerdere tabellen omvatten:

Beperking Beschrijving
Interactieve transactieconflicten Interactieve transacties (BEGIN TRANSACTION; ... DOORVOEREN;) gebruik conservatievere conflictdetectie dan niet-interactieve transacties en kan conflicteren op tabelniveau, met uitzondering van INSERT bewerkingen die niet worden gelezen uit de doeltabel. Gebruik niet-interactieve transacties (ATOMIC-samengestelde verklaring) wanneer conflictdetectie op rijniveau belangrijk is. Zie niet-interactieve transacties.
Doelen schrijven U kunt alleen schrijven naar door Unity Catalog beheerde Delta- of Iceberg-tabellen waarvoor de catalogManaged tabelfunctie is ingeschakeld. Zie door catalogus beheerde doorvoeringen.
Alleen DML-bewerkingen Transacties ondersteunen SELECT, INSERT, UPDATE, DELETE, COPY INTO en MERGE. Voer DDL-bewerkingen uit, zoals CREATE TABLE, ALTER TABLEof DROP TABLE, buiten transacties.
Metagegevensbewerkingen worden niet ondersteund Metagegevensbewerkingen werken niet binnen transacties, ongeacht protocol. Dit omvat op Thrift RPC gebaseerde metagegevens aanroepen (zoals JDBC-methoden DatabaseMetaData en ODBC-catalogusfuncties), op SQL gebaseerde opdrachten (SHOW TABLES, SHOW DATABASES, DESCRIBE TABLE), en SELECT query's voor information_schema tabellen of systeemtabellen. Voer metagegevensbewerkingen uit buiten transacties.
COPY INTO gelijktijdigheid Een transactie met een COPY INTO opdracht mislukt als een andere COPY INTO opdracht gelijktijdig wordt uitgevoerd om naar dezelfde tabel te schrijven en eerst doorvoeringen uit te voeren.
Streaming schrijven wordt niet ondersteund Transactionele schrijfbewerkingen naar streamingtabellen worden niet ondersteund.
RLS- en CLM-tabellen worden niet ondersteund Tabellen met rijfilters en kolommaskers kunnen niet deelnemen aan transacties.
Tabel- en weergavelimieten Een transactie kan lezen van en/of schrijven naar maximaal 100 tabellen, en kan lezen van maximaal 100 weergaven. Elke tabel kan binnen een transactie maximaal 100 tussenliggende commits bevatten.
Tijdreizen worden niet ondersteund U kunt geen tijdreizen binnen een transactie gebruiken.
Time-out voor inactiviteit Interactieve transacties worden teruggedraaid na 10 minuten inactiviteit. De transactie wordt beëindigd zonder bijwerkingen, maar u moet ROLLBACK expliciet uitvoeren om de transactiestatus te wissen als de sessie nog steeds actief is.
Maximale duur Alle transacties worden automatisch teruggedraaid na de totale duur van 48 uur. Voor interactieve transacties wordt de transactie beëindigd zonder bijwerkingen, maar moet u ROLLBACK expliciet uitvoeren om de transactiestatus te wissen als de sessie nog actief is.
Vereiste voor gedeelde Delta-tabellen Delta Sharing-providers moeten een tabel WITH HISTORYdelen om ontvangers toe te staan transacties erop uit te voeren. Ontvangers kunnen transacties uitvoeren met elk type berekening.
Beperkingen op Rechenkracht voor Ontvangers van Delta Sharing Ontvangers van Azure Databricks kunnen alleen transacties uitvoeren op gedeelde weergaven, gematerialiseerde weergaven, streaming tabellen en niet-Iceberg buitenlandse tabellen. Ontvangers in hetzelfde Azure Databricks-account als hun provider moeten gebruikmaken van gedeelde of serverloze berekeningen. Ontvangers in een ander account moeten serverloze berekeningen gebruiken.
Conflict in de brontabel voor Delta Sharing Ontvangers van Delta Delen kunnen niet verwijzen naar een gedeelde weergave en een gedeelde tabel die verwijzen naar dezelfde brontabel binnen één transactie.

Volgende stappen