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 jsou prováděny jako jedna transakční jednotka: buď se všechny příkazy úspěšně provedou, nebo budou všechny změny vráceny zpět, pokud některý příkaz 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 sloučen do vnější transakce. Všechny příkazy běží jako součást jedné větší transakce. 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)
- Povolit potvrzení katalogu
- 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;
Další zdroje informací
- 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