O que são garantias ACID no Azure Databricks?

O Azure Databricks usa o Delta Lake por padrão para todas as leituras e gravações e se baseia nas garantias ACID fornecidas pelo protocolo Delta Lake de código aberto. ACID significa atomicidade, consistência, isolamento e durabilidade.

  • Atomicidade significa que todas as transações têm êxito ou falham completamente.
  • As garantias de consistência estão relacionadas a como um determinado estado dos dados é observado por operações simultâneas.
  • Isolamento se refere a como as operações simultâneas podem entrar em conflito entre si.
  • Durabilidade significa que as alterações confirmadas são permanentes.

Embora muitas tecnologias de processamento e armazenamento de dados descrevam ter transações ACID, as garantias específicas variam de acordo com o sistema e as transações no Azure Databricks podem ser diferentes de outros sistemas com os quais você tenha trabalhado.

Observação

Esta página descreve as garantias para tabelas apoiadas pelo Delta Lake. Outros formatos de dados e sistemas integrados podem não fornecer garantias transacionais para leituras e gravações.

Todas as gravações do Azure Databricks no armazenamento de objetos de nuvem usam confirmações transacionais, que criam arquivos de metadados começando com _started_<id> e _committed_<id> juntamente aos arquivos de dados. Você não precisa interagir com esses arquivos, pois o Azure Databricks limpa rotineiramente arquivos de metadados de commit obsoletos.

Como é o escopo das transações no Azure Databricks?

O Azure Databricks gerencia transações no nível da tabela. As transações sempre se aplicam a uma tabela por vez. Para gerenciar transações simultâneas, o Azure Databricks usa o controle de simultaneidade otimista. Isso significa que não há bloqueios na leitura ou gravação em uma tabela, e deadlock não é uma possibilidade.

Por padrão, o Azure Databricks fornece isolamento de instantâneo em leituras e isolamento serializável por gravação em gravações. O isolamento serializável por gravação fornece garantias mais fortes do que o isolamento de instantâneos, mas aplica esse isolamento mais forte apenas para gravações.

As operações de leitura que fazem referência a várias tabelas retornam a versão atual de cada tabela no momento do acesso, mas não interrompem transações simultâneas que podem modificar tabelas referenciadas.

O Azure Databricks não tem constructos BEGIN/END que permitem que várias operações sejam agrupadas como uma única transação. Aplicativos que modificam várias tabelas confirmam as transações para cada tabela de forma serial. Você pode combinar inserções, atualizações e exclusões em uma tabela em uma única transação de gravação usando MERGE INTO.

Como o Azure Databricks implementa a atomicidade?

Os controles de log de transações confirmam a atomicidade. Durante uma transação, os arquivos de dados são gravados no diretório de arquivos que dá suporte à tabela. Quando a transação é concluída, uma nova entrada é confirmada no log de transações que inclui os caminhos para todos os arquivos gravados durante a transação. Cada commit incrementa a versão da tabela e torna os novos arquivos de dados visíveis para operações de leitura. O estado atual da tabela compreende todos os arquivos de dados marcados como válidos nos logs de transações.

Os arquivos de dados não são rastreados, a menos que o log de transações registre uma nova versão. Se uma transação falhar após gravar arquivos de dados em uma tabela, esses arquivos de dados não corromperão o estado da tabela, mas não farão parte dela. A operação VACUUM exclui todos os arquivos de dados não rastreados em um diretório de tabela, incluindo arquivos não confirmados restantes de transações com falha.

Como o Azure Databricks implementa a durabilidade?

O Azure Databricks usa o armazenamento de objetos de nuvem para armazenar todos os arquivos de dados e logs de transações. O armazenamento de objetos de nuvem tem alta disponibilidade e durabilidade. Como as transações têm êxito ou falham completamente e o log de transações reside junto com arquivos de dados no armazenamento de objetos de nuvem, as tabelas no Azure Databricks herdam as garantias de durabilidade do armazenamento de objetos de nuvem no qual estão armazenadas.

Como o Azure Databricks implementa a consistência?

O Delta Lake usa o controle de simultaneidade otimista para fornecer garantias transacionais entre gravações. Nesse mecanismo, as gravações operam em três estágios:

  1. Leitura: lê (se necessário) a versão mais recente disponível da tabela para identificar quais arquivos precisam ser modificados (ou seja, reescritos).
    • Gravações que são somente acréscimo não leem o estado atual da tabela antes de gravar. A validação de esquema aproveita os metadados do log de transações.
  2. Gravação: grava arquivos de dados no diretório usado para definir a tabela.
  3. Validar e confirmar:
    • Verifica se as alterações propostas estão em conflito com outras alterações que podem ter sido simultaneamente confirmadas desde que o instantâneo que foi lido.
    • Se não houver conflitos, todas as alterações preparadas serão confirmadas como um novo instantâneo versionado e a operação de gravação será bem-sucedida.
    • Se houver conflitos, a operação de gravação falhará com uma exceção de modificação simultânea. Essa falha impede a corrupção de dados.

A simultaneidade otimista pressupõe que a maioria das transações simultâneas em seus dados não pode entrar em conflito entre si, mas podem ocorrer conflitos. Consulte Níveis de isolamento e conflitos de gravação no Azure Databricks.

Como o Azure Databricks implementa a isolamento?

O Azure Databricks usa isolamento serializável de gravação por padrão para todas as gravações e atualizações de tabela. O isolamento de instantâneos é usado para todas as leituras de tabela.

A serialização de gravação e o controle de simultaneidade otimista funcionam juntos para fornecer alta taxa de transferência para gravações. O estado válido atual de uma tabela está sempre disponível e uma gravação pode ser iniciada em uma tabela a qualquer momento. As leituras simultâneas são limitadas apenas pela taxa de transferência dos recursos de metastore e nuvem.

Consulte Níveis de isolamento e conflitos de gravação no Azure Databricks.

O Delta Lake dá suporte a transações com várias tabelas?

O Delta Lake não dá suporte a transações de várias tabelas. O Delta Lake dá suporte a transações no nível da tabela.

A relação entre a chave primária e a chave estrangeira no Azure Databricks é informativas e não obrigatória. Consulte Declarar relações de chave primária e chave estrangeira.

O que significa o suporte do Delta Lake a gravações de vários clusters?

O Delta Lake evita a corrupção de dados quando vários clusters gravam na mesma tabela simultaneamente. Algumas operações de gravação podem entrar em conflito durante a execução simultânea, mas não corrompem a tabela. Consulte Níveis de isolamento e conflitos de gravação no Azure Databricks.

Posso modificar uma tabela Delta de workspaces diferentes?

Sim, você pode modificar simultaneamente a mesma tabela Delta de espaços de trabalho diferentes. Além disso, se um processo estiver escrevendo de um espaço de trabalho, os leitores em outros espaços de trabalho terão uma exibição consistente.