Níveis de isolamento e conflitos de escrita
Os níveis de isolamento e o comportamento de conflito de gravação determinam o que acontece quando operações concorrentes lêem e escrevem na mesma tabela Delta Lake no Databricks.
Quando vários Jobs ou usuários escrevem na mesma tabela ao mesmo tempo, algumas dessas gravações podem falhar com uma exceção de conflito. Use as páginas nesta seção quando precisar de:
- Resolver ou reduzir falhas de gravações concorrentes, como
ConcurrentAppendException. Consulte Exceções de conflito. - Decida se uma tabela precisa de um isolamento mais forte do que o default. Consulte Níveis de isolamento (WriteSerializable e Serializable).
O Delta Lake garante transações ACID entre leituras e gravações:
- Escritores : Vários escritores em vários clusters podem modificar simultaneamente uma partição de tabela. Os escritores visualizam uma view instantânea consistente da tabela e as gravações ocorrem em ordem sequencial.
- Leitores : Os leitores continuam a ver uma view instantânea consistente da tabela com a qual o Job Databricks começa, mesmo quando uma tabela é modificada durante um Job.
Veja O que são garantias ACID no Databricks?
Databricks usa Delta Lake para todas as tabelas por padrão.
Tópicos sobre isolamento
tópico | Descrição |
|---|---|
Como os dois níveis de isolamento afetam as operações simultâneas e como configurá-los. | |
Como a detecção de conflitos em nível de linha reduz os conflitos de gravação para operações simultâneas nos mesmos arquivos de dados. |
Para obter informações sobre isolamento de transações, comportamento de snapshots e tratamento de conflitos, consulte Isolamento de transações.
Conflitos de alteração de metadados
Alterações de metadados podem causar a falha de todas as operações de escrita concorrentes. Essas operações incluem alterações no protocolo da tabela, nas propriedades da tabela ou no esquema de dados.
As leituras de transmissão falham quando encontram um commit que altera os metadados da tabela. Se você quiser que a transmissão continue, você precisa reiniciá-la. Para métodos recomendados, consulte Considerações de produção para transmissão estruturada.
Exemplos de query que alteram metadados incluem:
-- Set a table property
ALTER TABLE table_name SET TBLPROPERTIES ('delta.isolationLevel' = 'Serializable')
-- Enable a feature using a table property and update the table protocol
ALTER TABLE table_name SET TBLPROPERTIES ('delta.enableDeletionVectors' = true);
-- Drop a table feature
ALTER TABLE table_name DROP FEATURE deletionVectors;
-- Upgrade to UniForm
REORG TABLE table_name APPLY (UPGRADE UNIFORM(ICEBERG_COMPAT_VERSION=2));
-- Update the table schema
ALTER TABLE table_name ADD COLUMNS (col_name STRING);