Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a:
Databricks SQL
Databricks Runtime 18.0 e superiores
Implementa um bloco de Script SQL que pode conter uma sequência de instruções SQL, instruções de controle de fluxo, declarações de variáveis locais e manipuladores de exceções. Quando marcado como ATOMIC, o bloco executa-se como uma unidade transacional onde todas as instruções têm sucesso em conjunto ou falham em conjunto.
Sintaxe
BEGIN ATOMIC
statement1;
statement2;
...
END;
Parâmetros
Nenhum. A ATOMIC palavra-chave modifica o comportamento da declaração composta .
Descrição
Marca a declaração composta como um bloco transacional atómico. Todas as instruções dentro do bloco executam-se como uma única unidade transacional — ou todas as instruções têm sucesso em conjunto, ou todas as alterações são revertidas se alguma instrução falhar. O Azure Databricks confirma automaticamente as alterações quando o bloco é concluído com sucesso, ou reverte todas as alterações se alguma instrução falhar.
BEGIN ATOMIC ... END Os blocos podem ser aninhados dentro de outros blocos atómicos. O bloco interior é incorporado na transação exterior — todas as instruções são executadas como parte de uma única transação maior. Isto não é uma transação aninhada. Um bloco atómico não pode conter um bloco não atómico BEGIN ... END .
Esta é uma transação não interativa — não precisa de a executar COMMIT nem ROLLBACK manualmente.
Requisitos
- Todas as tabelas escritas numa transação com múltiplas instruções e múltiplas tabelas devem ser:
- Tabelas geridas por catálogo Be Unity (Delta ou Iceberg)
- Ter commits geridos pelo catálogo ativados
- Utilize um SQL warehouse, computação serverless ou um cluster a executar Databricks Runtime 18.0 e superiores.
- Deve ter permissões adequadas sobre objetos modificados dentro da transação. Os privilégios são verificados quando cada instrução é executada.
Exemplos
Os exemplos seguintes demonstram padrões comuns de transação usando BEGIN ATOMIC ... END;.
Atualizações de coordenadas em múltiplas tabelas
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;
Valide os dados antes de cometer
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;
Artigos relacionados
- INICIAR TRANSAÇÃO: Iniciar uma transação interativa com controlo manual de commit/rollback.
- COMMIT: Confirmar uma transação interativa
- ROLLBACK: Reverter uma transação interativa
-
Afirmação composta:
BEGIN ... ENDbloqueia sem aATOMICpalavra-chave - Transações: Visão geral do suporte a transações
- Modos de transação: Padrões detalhados e exemplos para transações não interativas e interativas