Pernyataan gabungan ATOMIC

Berlaku untuk:ditandai dengan ya Databricks SQL ditandai dengan ya Databricks Runtime 18.0 dan di atas

Menerapkan blok Skrip SQL yang dapat berisi urutan pernyataan SQL, pernyataan kontrol aliran, deklarasi variabel lokal, dan penangan pengecualian. Ketika ditandai sebagai ATOMIC, blok berjalan sebagai unit transaksional di mana semua pernyataan berhasil bersama-sama atau gagal bersama-sama.

Sintaksis

BEGIN ATOMIC
  statement1;
  statement2;
  ...
END;

Parameter-parameternya

Tidak ada. Kata ATOMIC kunci memodifikasi perilaku pernyataan gabungan .

Deskripsi

Menandai pernyataan majemuk sebagai blok transaksi atom. Semua pernyataan dalam blok berjalan sebagai satu unit transaksional—baik semua pernyataan berhasil bersama-sama, atau semua perubahan digulung balik jika ada pernyataan yang gagal. Azure Databricks secara otomatis menerapkan perubahan ketika blok berhasil diselesaikan, atau mengembalikan semua perubahan jika ada pernyataan yang gagal.

BEGIN ATOMIC ... END blok dapat disarangkan dalam blok atom lainnya. Blok dalam diratakan ke dalam transaksi luar—semua pernyataan berjalan sebagai bagian dari satu transaksi yang lebih besar. Ini bukan transaksi berlapis. Blok atom tidak boleh berisi blok non-atomik BEGIN ... END .

Ini adalah transaksi non-interaktif—Anda tidak perlu menjalankan COMMIT atau ROLLBACK secara manual.

Persyaratan

  • Semua tabel yang termasuk dalam transaksi multi-tabel dan multi-pernyataan harus:
    • Jadilah tabel terkelola Unity Catalog (Delta atau Iceberg)
    • Telah diaktifkan komit Katalog
  • Gunakan gudang SQL, komputasi tanpa server, atau kluster yang menjalankan Databricks Runtime 18.0 ke atas.
  • Anda harus memiliki izin yang sesuai pada objek yang dimodifikasi dalam transaksi. Hak istimewa diperiksa saat setiap pernyataan berjalan.

Examples

Contoh berikut menunjukkan pola transaksi umum menggunakan BEGIN ATOMIC ... END;.

Mengoordinasikan pembaruan di beberapa tabel

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;

Memvalidasi data sebelum melakukan

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: Memulai transaksi interaktif dengan kontrol penerapan/pembatalan manual
  • COMMIT: Melakukan transaksi interaktif
  • ROLLBACK: Mengembalikan transaksi interaktif
  • Pernyataan gabungan: BEGIN ... END memblokir tanpa ATOMIC kata kunci
  • Transaksi: Gambaran umum dukungan transaksi
  • Mode transaksi: Pola dan contoh terperinci untuk transaksi non-interaktif dan interaktif