Aracılığıyla paylaş


ATOMIC bileşik deyimi

Şunun için geçerlidir:evet olarak işaretlendi Databricks SQL evet olarak işaretlendi Databricks Runtime 18.0 ve üzeri

SQL deyimleri dizisi, akış denetimi deyimleri, yerel değişken bildirimleri ve özel durum işleyicileri içerebilen bir SQL Betiği bloğu uygular. ATOMIC olarak işaretlendiğinde, blok tüm ifadelerin eş zamanlı başarılı olduğu veya başarısız olduğu bir işlem birimi olarak çalışır.

Sözdizimi

BEGIN ATOMIC
  statement1;
  statement2;
  ...
END;

Parametreler

Yok. ATOMIC anahtar sözcüğü bileşik deyim davranışını değiştirir.

Açıklama

Bileşik ifadeyi atomik bir işlem bloğu olarak tanımlar. Bloktaki tüm deyimler tek bir işlem birimi olarak çalışır; tüm deyimler birlikte başarılı olur veya herhangi bir deyim başarısız olursa tüm değişiklikler geri alınır. Blok başarıyla tamamlandığında Azure Databricks değişiklikleri otomatik olarak işler veya herhangi bir deyim başarısız olursa tüm değişiklikleri geri alır.

BEGIN ATOMIC ... END bloklar diğer atomik blokların içinde iç içe yerleştirilebilir. İç blok dış işlemle birleştirilir; tüm ifadeler, tek bir daha büyük işlemin parçası olarak çalışır. Bu iç içe yerleştirilmiş bir işlem değildir. Atomik blok, atomik BEGIN ... END olmayan bir blok içeremez.

Bu bir etkileşimsiz işlemdir; COMMIT veya ROLLBACK manuel olarak çalıştırmanıza gerek yoktur.

Gereksinimler

  • Birden çok deyimli, çok tablolu bir işlemde yazılan tüm tablolar şu gereksinimleri karşılamalıdır:
  • SQL ambarı, sunucusuz işlem veya Databricks Runtime 18.0 ve üzerini çalıştıran bir küme kullanın.
  • İşlem içinde değiştirilen nesneler üzerinde uygun izinlere sahip olmanız gerekir. Her bir ifade çalıştırıldığında ayrıcalıklar denetlenir.

Örnekler

Aşağıdaki örneklerde BEGIN ATOMIC ... END; kullanılarak yapılan yaygın işlem modelleri gösterilmektedir.

Güncelleştirmeleri birden çok tablo arasında koordine edin

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;

İşlemeden önce verileri doğrulama

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: El ile işleme/geri alma denetimi ile etkileşimli bir işlem başlatma
  • COMMIT: Etkileşimli bir işlem yürütme
  • ROLLBACK: Etkileşimli bir işlemi geri alma
  • Bileşik deyim: BEGIN ... END anahtar sözcüğü olmayan ATOMIC bloklar
  • İşlemler: İşlem desteğine genel bakış
  • İşlem modları: Etkileşimli olmayan ve etkileşimli işlemler için ayrıntılı desenler ve örnekler