Limitações do Delta Lake no S3

Este artigo detalha algumas das limitações que você pode encontrar ao trabalhar com dados armazenados no S3 com Delta Lake em Databricks. O modelo eventualmente consistente usado no Amazon S3 pode levar a possíveis problemas quando vários sistemas ou clusters modificam dados na mesma tabela simultaneamente.

Databricks e Delta Lake oferecem suporte a gravações de vários clusters por default, o que significa que a gravação query em uma tabela de vários clusters ao mesmo tempo não corromperá a tabela. Para tabelas Delta armazenadas no S3, essa garantia é limitada a um único workspace do Databricks.

Aviso

Para evitar possíveis problemas de corrupção e perda de dados, o Databricks recomenda que você não modifique a mesma tabela Delta armazenada no S3 de um workspace diferente.

Controle de versão de bucket e Delta Lake

O senhor pode usar o controle de versão do bucket S3 para fornecer redundância adicional aos dados armazenados no Delta Lake. A Databricks recomenda manter três versões e implementar uma política de gerenciamento de ciclo de vida que mantenha as versões por 7 dias ou menos para todos os buckets S3 com o controle de versão ativado.

Importante

Se o senhor encontrar lentidão no desempenho das tabelas armazenadas em buckets com o controle de versão ativado, indique que o controle de versão do bucket está ativado ao entrar em contato com o suporte da Databricks.

Quais são as limitações das gravações de vários clusters no S3?

Os seguintes recursos não são suportados durante a execução neste modo:

Você pode desabilitar gravações de vários clusters definindo spark.databricks.delta.multiClusterWrites.enabled como false. Se estiverem desativados, as gravações em uma única tabela devem ser originadas de um único clusters.

Aviso

Desativar spark.databricks.delta.multiClusterWrites.enabled e modificar a mesma tabela Delta de vários clusters simultaneamente pode levar à perda ou corrupção de dados.

Por que os dados do Delta Lake que excluí ainda estão armazenados no S3?

Se estiver usando Delta Lake e tiver habilitado o controle de versão do bucket no bucket S3, você terá duas entidades gerenciando arquivos de tabela. A Databricks recomenda desabilitar o controle de versão do bucket para que o comando VACUUM possa remover efetivamente arquivos de dados não utilizados.

Por que uma tabela mostra dados antigos depois que excluo arquivos Delta Lake com rm -rf e crio uma nova tabela no mesmo local?

As exclusões no S3 são consistentes apenas eventualmente. Assim, depois de excluir uma tabela, as versões antigas dos logs transação ainda podem ficar visíveis por um tempo. Para evitar isso, não reutilize um caminho de tabela após excluí-lo. Em vez disso, recomendamos que você use mecanismos transacionais como DELETE FROM, overwrite e overwriteSchema para excluir e atualizar tabelas. Consulte Prática recomendada para substituir uma tabela.