Zusammengesetzte ATOMIC-Anweisung

Gilt für:Häkchen für „Ja“ Databricks SQL Häkchen für „Ja“ 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 Schlüsselwort ATOMIC ändert das Verhalten der zusammengesetzten Anweisung.

Beschreibung

Markiert die zusammengesetzte Anweisung als atomaren Transaktionsblock. Alle Anweisungen innerhalb des Blocks werden als einzelne Transaktionseinheit ausgeführt: Entweder alle Anweisungen sind erfolgreich, oder alle Änderungen werden zurückgesetzt, wenn eine Anweisung fehlschlägt. Azure Databricks übernimmt automatisch Änderungen, wenn der Block erfolgreich abgeschlossen wird, oder setzt alle Änderungen zurück, wenn eine Anweisung fehlschlägt.

Du kannst keine BEGIN ATOMIC ... END-Blöcke verschachteln. Ein atomarer Block kann einen nicht-atomaren BEGIN ... END Block enthalten; diese Anweisungen laufen als Teil der äußeren atomaren Transaktion. Du kannst CALL eine gespeicherte atomare Prozedur aus einem atomaren Block aufrufen. Der Prozedurkörper wird in die äußere Transaktion abgeflacht. Alle Anweisungen werden als Teil einer einzelnen größeren Transaktion ausgeführt. Dies ist keine geschachtelte Transaktion.

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

Anforderungen

  • Alle Tabellen, in die in einer Transaktion mit mehreren Anweisungen und mehreren Tabellen geschrieben wird, müssen folgende Voraussetzungen erfüllen:
    • Es muss sich um von Unity Catalog verwaltete Tabellen (Delta oder Iceberg) handeln.
    • Stellen Sie sicher, dass Katalog-Commits aktiviert sind
  • 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 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;

Weitere Ressourcen

  • BEGIN TRANSACTION: Starten einer interaktiven Transaktion mit manueller Commit-/Rollbacksteuerung
  • COMMIT: Committen einer interaktiven Transaktion
  • ROLLBACK: Zurücksetzen einer interaktiven Transaktion
  • Zusammengesetzte Anweisung: BEGIN ... END-Blöcke ohne das Schlüsselwort ATOMIC
  • Transaktionen: Übersicht über die Transaktionsunterstützung
  • Transaktionsmodi: Detaillierte Muster und Beispiele für nicht interaktive und interaktive Transaktionen