O que são garantias ACID em Databricks?
O 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 são bem-sucedidas ou falham completamente.
- As garantias de consistência estão relacionadas a como um determinado estado dos dados é observado por operações simultâneas.
- O isolamento refere-se a como as operações simultâneas podem entrar em conflito umas com as outras.
- Durabilidade significa que as mudanças comprometidas são permanentes.
Embora muitas tecnologias de processamento e armazenamento de dados descrevam a existência de transações ACID, as garantias específicas variam de acordo com o sistema, e as transações em Databricks podem ser diferentes de outros sistemas com os quais o senhor já trabalhou.
Esta página descreve garantias para tabelas apoiadas pelo Delta Lake. Outros formatos de dados e sistemas integrados podem não oferecer garantias transacionais para leituras e gravações.
Todas as gravações do Databricks no armazenamento de objetos na nuvem usam commits transacionais, que criam arquivos de metadados que começam com _started_<id> e _committed_<id> junto com os arquivos de dados. Você não precisa interagir com esses arquivos, pois o Databricks limpa regularmente os arquivos de metadados de commit obsoletos.
Como é o escopo das transações no Databricks?
Por default, cada instrução SQL é executada como sua própria transação atômica em uma tabela. Você também pode agrupar várias instruções em várias tabelas em uma única transação atômica usando a sintaxe BEGIN ATOMIC ... END; . Todas as alterações são bem-sucedidas juntas ou revertidas juntas. Transações que abrangem várias tabelas exigem que o comando `catalog-gerenciar commit` esteja habilitado nas tabelas participantes. Consulte Transações.
Para gerenciar transações concorrentes, o Databricks utiliza o controle de concorrência otimista. Isso significa que não há bloqueios na leitura ou escrita contra uma mesa, e o impasse não é uma possibilidade.
Por default, Databricks oferece isolamento de Snapshot em leituras e isolamento de serialização de gravação em gravações. Embora o isolamento serializável por gravação ofereça garantias mais robustas do que o isolamento por snapshot, essas proteções se aplicam somente a operações de gravação.
As operações de leitura que referenciam várias tabelas retornam a versão atual de cada tabela no momento do acesso, mas não interrompem transações simultâneas que possam modificar as tabelas referenciadas.
Como a Databricks implementa a atomicidade?
Os controles do registro de transações commit 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 é registrada no log de transação que inclui os caminhos para todos os arquivos escritos durante a transação. Cada confirmação 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 inclui 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 os arquivos de dados em uma tabela, esses arquivos de dados não corromperão o estado da tabela, mas os arquivos não se tornarão parte da tabela.A operação VACUUM exclui todos os arquivos de dados não rastreados em um diretório de tabela, inclusive os arquivos restantes não confirmados de transações com falha.
Como a Databricks implementa a durabilidade?
A Databricks usa o armazenamento de objetos na nuvem para armazenar todos os arquivos de dados e logs de transações. O armazenamento de objetos na nuvem tem alta disponibilidade e durabilidade. Como as transações são bem-sucedidas ou fracassam completamente e o log de transações permanece junto com os arquivos de dados no armazenamento de objetos na nuvem, as tabelas no Databricks herdam as garantias de durabilidade do armazenamento de objetos na nuvem no qual estão armazenadas.
Como a Databricks implementa a consistência?
Delta Lake usa controle de simultaneidade otimista para fornecer garantias transacionais entre gravações. Sob este mecanismo, as gravações operam em três estágios:
-
Ler : lê (caso necessário) a edição mais atual da tabela para determinar quais arquivos devem ser alterados (isto é, reescritos).
- As gravações somente anexadas não leem o estado atual da tabela antes de gravar. A validação do esquema aproveita os metadados do log de transações.
-
Gravar : grava arquivos de dados no diretório usado para definir a tabela.
-
Validar e confirmar :
- Verifica se as alterações propostas entram em conflito com quaisquer outras mudanças que possam ter sido registradas simultaneamente desde o snapshot que foi lido.
- Se não houver conflitos, todas as alterações em etapas serão confirmadas como um novo snapshot versionado e a operação de gravação será bem-sucedida.
- Se houver conflitos, a operação de escrita falha com uma exceção de modificação concorrente.Essa falha evita a corrupção de dados.
A concorrência otimista pressupõe que a maioria das transações concorrentes em seus dados não entrariam em conflito umas com as outras, mas conflitos podem ocorrer. Consulte os níveis de isolamento e escreva os conflitos.
Como a Databricks implementa o isolamento?
O Databricks usa isolamento serializáveis de gravação por padrão para todas as gravações e atualizações de tabelas. O isolamento de instantâneos é usado para todas as leituras de tabelas.
A serializabilidade de gravação e o controle de simultaneidade otimista trabalham juntos para fornecer alta taxa de transferência para gravações. A condição atual e válida de uma tabela encontra-se constantemente acessível, e um registro pode ser efetuado na tabela em qualquer instante.As leituras simultâneas são limitadas apenas pela capacidade de processamento do metastore e dos recursos em nuvem.
Consulte os níveis de isolamento e escreva os conflitos.
O Delta Lake suporta transações em múltiplas tabelas?
Visualização
Transações que gravam no Unity Catalog gerenciam tabelas Delta e estão em Pré-visualização Pública.
Transações que gravam em tabelas Iceberg gerenciadas Unity Catalog estão em Pré-visualização Privada. Para join desta pré-visualização, envie o formulário de inscrição para a pré-visualização das mesas Iceberg.
Sim. Tabelas com o comando `catalog-gerenciar commit` habilitado podem participar de transações que abrangem várias instruções e várias tabelas. Consulte Transações.
Os relacionamentos primários key e estrangeiros key em Databricks são informativos e não são aplicados. Consulte Declarar relações primárias key e estrangeiras key.
O que significa que o site Delta Lake é compatível com gravações em vários clusters?
O Delta Lake impede a corrupção de dados quando vários clusters gravam na mesma tabela simultaneamente. Algumas operações de escrita podem entrar em conflito durante a execução simultânea, mas não corrompem a tabela. Consulte os níveis de isolamento e escreva os conflitos.
O Delta Lake no S3 tem várias limitações não encontradas em outros sistemas de armazenamento. Veja as limitações do Delta Lake no S3.