Freigeben über


Atomare Verbundanweisung

Gilt für:check marked yes Databricks SQL check marked yes Databricks Runtime 18.0 und höher

Implementiert einen SQL-Skriptblock, der eine Abfolge von SQL-Anweisungen, Steuerflussanweisungen, lokale Variablendeklarationen und Ausnahmebehandler enthalten kann. Wenn er als ATOMICgekennzeichnet ist, wird der Block als Transaktionseinheit ausgeführt, bei der alle Anweisungen zusammen erfolgreich sind oder zusammen fehlschlagen.

Syntax

BEGIN ATOMIC
  statement1;
  statement2;
  ...
END;

Parameter

Keiner. Das ATOMIC Schlüsselwort ändert das Verhalten der zusammengesetzten Anweisung .

Beschreibung

Markiert die zusammengesetzte Anweisung als atomischer Transaktionsblock. Alle Befehle innerhalb des Blocks werden als eine einzige Transaktionseinheit ausgeführt – entweder werden alle Befehle erfolgreich abgewickelt, oder alle Änderungen werden zurückgesetzt, falls ein Befehl fehlschlägt. Azure Databricks führt änderungen automatisch durch, wenn der Block erfolgreich abgeschlossen wurde, oder setzt alle Änderungen zurück, wenn eine Anweisung fehlschlägt.

BEGIN ATOMIC ... END Blöcke können in anderen Atomblöcken geschachtelt werden. Der innere Block wird in die äußere Transaktion vereinheitlicht – alle Anweisungen werden als Teil einer einzigen größeren Transaktion ausgeführt. Dies ist keine geschachtelte Transaktion. Ein Atomblock darf keinen nicht-atomischen BEGIN ... END Block enthalten.

Dies ist eine nicht interaktive Transaktion, Sie müssen COMMIT oder ROLLBACK nicht manuell ausführen.

Anforderungen

  • Alle Tabellen, die in einer Multi-Statement- und Multi-Table-Transaktion beschrieben werden, müssen in diese einbezogen werden:
  • Verwenden Sie ein SQL Warehouse, serverloses Compute oder einen Cluster mit Databricks Runtime 18.0 und höher.
  • Sie müssen über entsprechende Berechtigungen für Objekte verfügen, die innerhalb der Transaktion geändert wurden. Berechtigungen werden bei der Ausführung jeder einzelnen Anweisung überprüft.

Beispiele

Die folgenden Beispiele veranschaulichen allgemeine Transaktionsmuster mithilfe von BEGIN ATOMIC ... END;.

Koordinieren von Aktualisierungen über mehrere Tabellen hinweg

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;

Daten vor dem Commit validieren

BEGIN ATOMIC
  INSERT INTO staging_customers
  SELECT * FROM external_source WHERE ingest_date = current_date();

  IF (SELECT COUNT(*) FROM staging_customers WHERE email NOT LIKE '%@%') > 0 THEN
    SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Invalid email addresses found';
  END IF;

  MERGE INTO customers AS target
  USING staging_customers AS source
  ON target.customer_id = source.customer_id
  WHEN MATCHED THEN UPDATE SET *
  WHEN NOT MATCHED THEN INSERT *;
END;
  • BEGIN TRANSACTION: Starten einer interaktiven Transaktion mit manueller Commit-/Rollbacksteuerung
  • COMMIT: Commit für eine interaktive Transaktion
  • ROLLBACK: Zurücksetzen einer interaktiven Transaktion
  • Compound-Anweisung: BEGIN ... END Blöcke ohne das ATOMIC Schlüsselwort
  • Transaktionen: Übersicht über die Transaktionsunterstützung
  • Transaktionsmodi: Detaillierte Muster und Beispiele für nicht interaktive und interaktive Transaktionen