Ir para o conteúdo principal

Transações com vários comandos

Experimente o Databricks gratuitamente

Transações com vários comandos para tabelas do Databricks Delta

A Databricks é compatível com transações com vários comandos se as tabelas subjacentes forem tabelas do Databricks Delta.  Isso significa que todos os comandos dentro da transação serão atômicos (sucesso ou falha em todos).

Considere o seguinte exemplo de cronograma de dois threads/usuários. Thread 1 é o thread UPDATE e Thread 2 é um thread de leitor/query.

  • thread 1 - START TRANSACTION ON t1
  • thread 1 - INSERT INTO t1 SELECT ... FROM t2 where id = 42 /* adicionar algumas linhas*/
  • thread 2 - SELECT a FROM t1 WHERE id = 42
  • thread 1 - UPDATE t1 SET a = val2 WHERE id = 42 /*atualizar algumas linhas */
  • thread 1 - COMMIT

Neste exemplo, a intenção é adicionar algumas linhas novas à tabela t1 e atualizar algumas linhas existentes na tabela t1. A intenção é fazer disso uma única transação lógica e, como o Databricks Delta é compatível com transações com vários comandos, o Thread 2 não vê as linhas recém-inseridas, e sim uma visualização da tabela existente antes da emissão do comando START TRANSACTION.  Isso seria possível sem o uso de transações com vários comandos, pois tanto INSERT quanto UPDATE teriam sido tratados como operações independentes, mas atômicas.  Nas transações com vários comandos, tanto INSERT quanto UPDATE são tratados como uma única operação atômica (sucesso ou falha em ambos) e outros usuários nunca podem ver uma "transação parcial".

    Voltar ao glossário