Partager via


Instruction composée ATOMIC

S’applique à :coche oui Databricks SQL coche oui Databricks Runtime 18.0 et versions ultérieures

Implémente un bloc de script SQL qui peut contenir une séquence d’instructions SQL, d’instructions de contrôle de flux, de déclarations de variables locales et de gestionnaires d’exceptions. Lorsqu’elles sont marquées comme ATOMIC, le bloc s’exécute en tant qu’unité transactionnelle où toutes les instructions réussissent ensemble ou échouent ensemble.

Syntaxe

BEGIN ATOMIC
  statement1;
  statement2;
  ...
END;

Paramètres

Aucun. Le ATOMIC mot clé modifie le comportement de l’instruction composée .

Description

Marque l’instruction composée comme bloc de transaction atomique. Toutes les instructions du bloc s’exécutent sous la forme d’une seule unité transactionnelle : toutes les instructions réussissent ensemble ou toutes les modifications sont restaurées si une instruction échoue. Azure Databricks valide automatiquement les modifications lorsque le bloc se termine correctement, ou restaure toutes les modifications en cas d’échec d’une instruction.

BEGIN ATOMIC ... END les blocs peuvent être imbriqués dans d’autres blocs atomiques. Le bloc interne est aplatit dans la transaction externe : toutes les instructions s’exécutent dans le cadre d’une transaction plus grande. Il ne s’agit pas d’une transaction imbriquée. Un bloc atomique ne peut pas contenir de bloc non atomique BEGIN ... END .

Il s’agit d’une transaction non interactive , vous n’avez pas besoin d’exécuter COMMIT ou ROLLBACK manuellement.

Exigences

  • Toutes les tables écrites dans une transaction multi-instruction, multi-table doivent :
  • Utilisez un entrepôt SQL, un calcul sans serveur ou un cluster exécutant Databricks Runtime 18.0 ou versions ultérieures.
  • Vous devez disposer des autorisations appropriées sur les objets modifiés dans la transaction. Les privilèges sont vérifiés lorsque chaque instruction s’exécute.

Exemples

Les exemples suivants illustrent des modèles de transaction courants à l’aide de BEGIN ATOMIC ... END;.

Coordonner les mises à jour sur plusieurs tables

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;

Valider les données avant l'enregistrement

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 : Démarrer une transaction interactive avec un contrôle manuel de la validation/annulation
  • COMMIT : Valider une transaction interactive
  • ROLLBACK : Restaurer une transaction interactive
  • Instruction composée : blocs sans le mot-clé ATOMIC
  • Transactions : Vue d’ensemble de la prise en charge des transactions
  • Modes de transaction : modèles détaillés et exemples pour les transactions non interactives et interactives