Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Importante
As transações que gravam em tabelas Delta gerenciadas pelo Catálogo Unity estão em Visualização Pública.
As transações que gravam em tabelas Iceberg gerenciadas pelo Unity Catalog estão em Versão Prévia Privada. Para ingressar nesta prévia, envie o formulário de inscrição para prévia das tabelas Iceberg gerenciadas.
As transações permitem coordenar operações em várias instruções SQL e tabelas. Todas as alterações são bem-sucedidas juntas ou revertidas juntas, garantindo a consistência dos dados em suas operações e tabelas. As transações fornecem garantias ACID (acrônimo de atomicidade, consistência, isolamento e durabilidade). Confira O que são garantias ACID no Azure Databricks?. As transações podem ser usadas com procedimentos armazenados e scripts SQL para criar cargas de trabalho de armazenagem críticas.
O exemplo a seguir mostra uma transação:
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;
Todas as três instruções são aplicadas simultaneamente. Se qualquer instrução falhar, todas as alterações serão revertidas e o Databricks encerrará a transação sem efeitos colaterais.
Para prática prática com transações, consulte Tutorial: Coordenar transações entre tabelas.
Requisitos
Para executar transações que abrangem várias instruções ou várias tabelas:
- Todas as tabelas gravadas devem:
- Tabelas gerenciadas no Catálogo Unity (Delta ou Iceberg)
- Ter confirmações gerenciadas pelo catálogo habilitadas
- Utilize recursos computacionais com suporte
- Para transações não interativas, use qualquer Armazenamento de Dados SQL, Computação Sem Servidor ou cluster executando o Databricks Runtime 18.0 ou superior.
- Para transações interativas, use qualquer SQL Warehouse.
- Para transações em ativos compartilhados do Delta Sharing, use o Databricks Runtime 18.1 ou versões posteriores.
Modos de transação
O Azure Databricks dá suporte a dois modos de transação:
| Modo | Sintaxe | Confirmar | Reversão | Mais adequado para |
|---|---|---|---|---|
| Não interativo | Instrução composta ATOMIC | Automático após o sucesso | Automático em caso de erro | Sequências fixas, trabalhos agendados |
| Interativo | BEGIN TRANSACTION; COMMIT; | Manual | Manual | Lógica condicional, validação e depuração, JDBC, ODBC, PyDBC |
Para obter sintaxe detalhada, exemplos e padrões de uso para ambos os modos, consulte os modos de transação.
Operações com suporte
Você pode usar as seguintes operações em transações:
| Operação | Descrição |
|---|---|
| SELECT | Consultar dados e validar resultados |
| Cláusula VALUES | Gerar dados de teste ou valores constantes |
| INSERT (incluindo todas as variantes) | Adicionar novas linhas |
| UPDATE | Modificar linhas existentes |
COPY INTO |
Carregar dados de um arquivo em uma tabela Delta |
| DELETE FROM | Remover linhas |
| MERGE INTO | Padrões de upsert combinando inserir, atualizar e excluir |
Ler fontes em transações
As transações podem ser lidas a partir de tabelas do Catálogo do Unity (Delta e Iceberg), tabelas de streaming, exibições e exibições materializadas. Para ler de fontes não transacionais, use a allow_nontransactional_reads indicação.
Ler de fontes não transacionais
Para ler de fontes não transacionais, como arquivos Parquet, arquivos Avro e tabelas federadas usando JDBC, use a allow_nontransactional_reads dica, conforme mostrado no exemplo a seguir:
BEGIN TRANSACTION;
-- Read from a non-transactional Parquet source
INSERT INTO transactional_table
SELECT col1, col2
FROM parquet.`/path/to/data`
WITH (allow_nontransactional_reads = true);
-- Read from a managed Delta table (no hint needed)
INSERT INTO another_table
SELECT * FROM managed_delta_table;
COMMIT;
Aviso
Leituras não transacionais não são repetíveis. Alterações simultâneas nos dados de origem durante a transação podem resultar em leituras inconsistentes.
Isolamento de transações
As transações fornecem leituras repetíveis em todas as instruções. Quando você acessa uma tabela em uma transação, o Azure Databricks captura um instantâneo consistente dessa tabela no primeiro acesso. Todas as leituras subsequentes dessa tabela usam esse instantâneo, de modo que suas leituras permaneçam consistentes mesmo que outros usuários modifiquem simultaneamente essas mesmas tabelas.
Exemplo:
BEGIN TRANSACTION;
-- First access to products table captures snapshot
SELECT * FROM products WHERE product_id = 1001;
-- Another user updates product 1001
-- Still reads the same snapshot (repeatable read)
SELECT * FROM products WHERE product_id = 1001;
COMMIT;
Detecção de conflitos e concorrência
O Azure Databricks usa controle de simultaneidade otimista. As transações prossseguem sem bloqueio e os conflitos são detectados no momento da confirmação. Quando você confirma, o Azure Databricks verifica se outras transações modificaram os mesmos dados após o início da transação. Se houver conflitos, a transação falhará. Para transações não interativas, a reversão também ocorre automaticamente. Para transações interativas, você deve executar ROLLBACK explicitamente para limpar o estado da transação antes de iniciar uma nova transação.
Transações não interativas dão suporte à concorrência de nível de linha. Duas transações podem modificar linhas diferentes no mesmo arquivo de dados sem conflitos quando a simultaneidade no nível de linha está habilitada nas tabelas de destino.
As transações interativas oferecem suporte à concorrência no nível da tabela.
Cenários de conflito
| Scenario | Descrição |
|---|---|
| Conflitos simultâneos de escrita | Duas transações atualizam ou excluem as mesmas linhas. |
| Conflitos de leitura e escrita | Outra transação modificou linhas que sua transação leu. Aplica-se somente ao isolamento serializável. |
| Conflitos de leitura fantasma | Outra transação adicionou novas linhas que correspondem a um predicado que a sua transação leu. Aplica-se ao isolamento WriteSerializable e Serializable. |
| Conflitos de metadados | Outra transação alterou o esquema ou as propriedades da tabela. |
Para obter mais detalhes sobre os níveis de isolamento e a resolução de conflitos para transações, consulte os modos de transação. Para obter informações sobre níveis de isolamento e comportamento de conflito de gravação para tabelas Delta Lake no Azure Databricks, consulte Recomendações de Otimização no Azure Databricks.
Como as transações aparecem no log Delta
Cada transação bem-sucedida aparece como uma única entrada no log Delta da tabela, independentemente de quantas instruções individuais foram executadas na transação. Isso fornece uma trilha de auditoria limpa e simplifica as operações de reversão.
As operações individuais dentro de uma transação estão disponíveis como metadados JSON na entrada de log Delta para a transação.
Tratamento e reversão de erros
A tabela a seguir descreve como ocorrem reversões de erro para ambos os tipos de transação:
| Scenario | Comportamento para transações não interativas | Comportamento para transações interativas |
|---|---|---|
| Falha na declaração | Qualquer instrução que gera um erro causa reversão automática imediata. | Você deve executar explicitamente ROLLBACK para descartar alterações se a sessão ainda estiver ativa. |
| Lógica de validação com falha ou regras de negócios | Use SIGNAL para lançar uma exceção e disparar a reversão automática. |
Execute ROLLBACK para descartar alterações. |
| Desconexão de sessão | A transação é revertda automaticamente. | A transação é revertda automaticamente. |
| Intervalo | Reverte automaticamente após 48 horas de duração total. | Reverte automaticamente após 10 minutos de inatividade ou 48 horas de duração total (consulte Limitações). A transação é encerrada sem efeitos colaterais, mas você deve executar explicitamente ROLLBACK para limpar o estado da transação se a sessão ainda estiver ativa. |
Para transações interativas, você pode reverter explicitamente usando a instrução ROLLBACK . Isso é útil quando você deseja descartar alterações com base na lógica de validação ou nas regras de negócios, ou após uma falha em uma declaração, quando a sessão permanece ativa.
Práticas recomendadas
Siga estas práticas para reduzir conflitos e otimizar o desempenho da transação.
Evitar conflitos
- Mantenha as transações curtas: transações de execução longa aumentam a probabilidade de conflito e mantêm os recursos por mais tempo.
- Validar antecipadamente: verifique as pré-condições no início de uma transação para falhar rapidamente.
- O Databricks recomenda transações não interativas para a maioria dos casos de uso: transações não interativas usam simultaneidade de nível de linha. Consulte transações não interativas.
- Repetir em caso de conflitos: quando ocorrerem conflitos, repita a transação com dados atualizados.
Usar transações de clientes diferentes
As transações funcionam em várias interfaces do cliente:
-
Editor de SQL e notebooks: use
BEGIN ATOMIC ... END;ouBEGIN TRANSACTION; ... COMMIT;sintaxe diretamente em células SQL ou usespark.sql()em notebooks Python/Scala. Consulte os modos de transação. -
Aplicativos JDBC: use métodos de API JDBC (
setAutoCommit(false),commit(),rollback()) com o driver JDBC do Databricks versão 3.0.5 e superior. Veja o exemplo: Use transações. Para obter uma lista de operações JDBC sem suporte em transações, consulte operações JDBC sem suporte. - Aplicativos ODBC: use o Databricks ODBC Driver versão 2.10.0 e superior. Para obter uma lista de operações ODBC sem suporte em transações, consulte operações ODBC sem suporte.
- Aplicações Python: Utilize o Conector SQL do Databricks com
autocommit=False. Consulte o Conector do SQL do Databricks para Python. Para obter uma lista de operações sem suporte do conector Python em transações, consulte operações de conector Python sem suporte. - API de Execução de Instrução: execute transações usando a sintaxe do SQL por meio de chamadas à API. Consulte Uso com a API de Execução de Declaração.
Limitações
As seguintes limitações se aplicam a transações que abrangem várias tabelas:
| Limitation | Descrição |
|---|---|
| Conflitos de transações interativas | Transações interativas (BEGIN TRANSACTION; ... COMMIT;) usam uma detecção de conflito mais conservadora do que transações não interativas e podem entrar em conflito no nível da tabela, exceto para INSERT as operações que não leem da tabela de destino. Use transações não interativas (instrução composta ATOMIC) quando a detecção de conflitos no nível da linha for importante. Consulte transações não interativas. |
| Destinos de gravação | Você só pode gravar em tabelas gerenciadas do Unity Catalog Delta ou Iceberg que têm o recurso de catalogManaged tabela habilitado. Consulte confirmações gerenciadas pelo catálogo. |
| Somente operações DML | Suporte a transações SELECT, INSERT, UPDATE, DELETE, COPY INTO, e MERGE. Execute operações DDL, como CREATE TABLE, ALTER TABLEou DROP TABLE, fora das transações. |
| Não há suporte para operações de metadados | As operações de metadados não funcionam dentro de transações, independentemente do protocolo. Isso inclui chamadas de metadados baseadas em RPC do Thrift (como métodos JDBC DatabaseMetaData e funções de catálogo ODBC), comandos baseados em SQL (SHOW TABLES, SHOW DATABASES, DESCRIBE TABLE) e consultas SELECT em tabelas information_schema ou do sistema. Execute operações de metadados fora das transações. |
COPY INTO Concorrência |
Uma transação executando um COPY INTO comando falhará se outro COPY INTO comando for executado simultaneamente para gravar na mesma tabela e confirmar primeiro. |
| Escritas de streaming não são suportadas | Não há suporte para gravações transacionais em tabelas de streaming. |
| Não há suporte para tabelas RLS e CLM | Tabelas com filtros de linha e máscaras de coluna não podem participar de transações. |
| Limites de tabela e exibição | Uma transação pode ler ou gravar até 100 tabelas combinadas e pode ler de até 100 exibições. Cada tabela pode ter até 100 confirmações intermediárias em uma transação. |
| Não há suporte para viagem no tempo | Você não pode usar viagens no tempo dentro de uma transação. |
| Tempo limite de inatividade | As transações interativas são revertidas após 10 minutos de inatividade. A transação é encerrada sem efeitos colaterais, mas você deve executar explicitamente ROLLBACK para limpar o estado da transação se a sessão ainda estiver ativa. |
| Duração máxima | Todas as transações são revertidas automaticamente após 48 horas de duração total. Para transações interativas, a transação é encerrada sem efeitos colaterais, mas você deve executar explicitamente ROLLBACK para limpar o estado da transação se a sessão ainda estiver ativa. |
| Requisito de tabelas compartilhadas do Delta Sharing | Os provedores de compartilhamento Delta devem compartilhar uma tabela WITH HISTORY para permitir que os destinatários executem transações nela. Os destinatários podem executar transações usando qualquer tipo de computação. |
| Restrições de computação para destinatários do Delta Sharing | Os destinatários do Azure Databricks só podem executar transações em exibições compartilhadas, exibições materializadas, tabelas de streaming e tabelas estrangeiras não Iceberg. Os destinatários na mesma conta do Azure Databricks que seu provedor devem usar computação compartilhada ou sem servidor. Os destinatários em uma conta diferente devem usar a computação sem servidor. |
| Conflito na tabela de origem do Delta Sharing | Os destinatários de compartilhamento Delta não podem referenciar uma exibição compartilhada e uma tabela compartilhada que referenciam a mesma tabela de origem em uma única transação. |
Próximas Etapas
- Modos de transação
- Tutorial: Coordenar transações entre tabelas
- Confirmações gerenciadas pelo catálogo
- Níveis de isolamento e conflitos de gravação