Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
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:
- Tabellen beheerd door Unity Catalog (Delta en Iceberg)
- Heb catalogusbeheerde commits ingeschakeld
- 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:
-
SQL Editor en notebooks: Gebruik rechtstreeks
BEGIN ATOMIC ... END;ofBEGIN TRANSACTION; ... COMMIT;syntaxis in SQL-cellen, of maak gebruik vanspark.sql()in Python/Scala-notebooks. Zie transactiemodi. -
JDBC-toepassingen: JDBC-API-methoden (
setAutoCommit(false),commit(),rollback()) gebruiken met de Databricks JDBC-stuurprogrammaversie 3.0.5 en hoger. Zie voorbeeld: Transacties gebruiken. Zie Niet-ondersteunde JDBC-bewerkingen binnen transacties voor een lijst met niet-ondersteunde JDBC-bewerkingen. - ODBC-toepassingen: gebruik de Databricks ODBC-stuurprogrammaversie 2.10.0 en hoger. Zie Niet-ondersteunde ODBC-bewerkingen binnen transacties voor een lijst met niet-ondersteunde ODBC-bewerkingen.
-
Python-toepassingen: Gebruik de Databricks SQL Connector met
autocommit=False. Zie Databricks SQL Connector voor Python. Zie Niet-ondersteunde Python-connectorbewerkingen binnen transacties voor een lijst met niet-ondersteunde Python-connectorbewerkingen. - Statement Execution API: transacties uitvoeren met SQL-syntaxis via API-aanroepen. Zie Use with Statement Execution API.
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
- Transactiemodi
- Zelfstudie: Transacties coördineren tussen tabellen
- Door catalogus beheerde doorvoeringen
- Isolatieniveaus en schrijfconflicten