Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí pro:
Databricks SQL
Databricks Runtime 18.0 a vyšší
Implementuje blok skriptu SQL, který může obsahovat posloupnost příkazů SQL, příkazy control-of-flow, místní deklarace proměnných a obslužné rutiny výjimek. Pokud je blok označený jako ATOMIC, spustí se jako transakční jednotka, kde všechny příkazy uspějí společně nebo selžou dohromady.
Syntaxe
BEGIN ATOMIC
statement1;
statement2;
...
END;
Parametry
Žádné. Klíčové slovo ATOMIC upravuje chování složeného příkazu.
Description
Označí složený příkaz jako atomický blok transakce. Všechny příkazy v rámci bloku se spouští jako jedna transakční jednotka – buď všechny příkazy uspějí společně, nebo se všechny změny vrátí zpět, pokud některý z nich selže. Azure Databricks automaticky potvrdí změny, jakmile se blok úspěšně dokončí, nebo vrátí zpět všechny změny, pokud některý příkaz selže.
BEGIN ATOMIC ... END bloky mohou být vnořeny do jiných atomických bloků. Vnitřní blok je vložený do vnější transakce – všechny příkazy běží jako součást jediného většího transakčního procesu. Nejedná se o vnořenou transakci. Atomický blok nemůže obsahovat ne atomický BEGIN ... END blok.
Jedná se o neinteraktivní transakci – nemusíte spouštět COMMIT ani ROLLBACK ručně.
Požadavky
- Všechny tabulky, do kterých se zapisuje v transakci s několika výrazy a více tabulkami, musí:
- Spravované tabulky katalogu Be Unity (Delta nebo Iceberg)
- Povolte katalogem spravovaná potvrzení
- Použijte sklad SQL, bezserverové výpočetní prostředky nebo cluster s Databricks Runtime 18.0 a novějším.
- Musíte mít příslušná oprávnění k objektům upraveným v rámci transakce. Při spuštění každého příkazu se zkontrolují oprávnění.
Příklady
Následující příklady ukazují běžné vzory transakcí pomocí BEGIN ATOMIC ... END;.
Koordinace aktualizací napříč několika tabulkami
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;
Validujte data před potvrzením
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;
Související články
- BEGIN TRANSACTION: Spuštění interaktivní transakce s ručním ovládáním potvrzení/vrácení
- COMMIT: Potvrzení interaktivní transakce
- VRÁCENÍ: Vrátit interaktivní transakci
-
Složený příkaz:
BEGIN ... ENDbloky bez klíčovéhoATOMICslova - Transakce: Přehled podpory transakcí
- Režimy transakcí: Podrobné vzory a příklady pro neinteraktivní a interaktivní transakce