Limitações do Delta Lake no S3
Este artigo detalha algumas das limitações que o senhor pode encontrar ao trabalhar com dados armazenados em S3 com Delta Lake em Databricks. O modelo eventualmente consistente usado em Amazon S3 pode levar a possíveis problemas quando vários sistemas ou clusters modificam dados na mesma tabela simultaneamente.
Databricks e Delta Lake suportam gravações em vários clusters por default, o que significa que as consultas que gravam em uma tabela a partir de vários clusters ao mesmo tempo não corromperão a tabela. Para tabelas Delta armazenadas em S3, essa garantia é limitada a um único Databricks workspace.
Para evitar possíveis problemas de corrupção e perda de dados, o site Databricks recomenda que o senhor não modifique a mesma tabela Delta armazenada em S3 a partir de um espaço de trabalho 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.
Se o senhor encontrar lentidão no desempenho de 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 em S3?
Os recursos a seguir não são compatíveis com a execução nesse modo:
- Criptografia do lado do servidor com chave de criptografia fornecida pelo cliente
- S3 caminhos com credenciais em um clustering que não pode acessar AWS Serviço de tokens de segurança
O senhor pode desativar as gravações de vários agrupamentos definindo spark.databricks.delta.multiClusterWrites.enabled
como false
. Se estiverem desativados, as gravações em uma única tabela devem se originar de um único clustering.
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 o senhor estiver usando o Delta Lake e tiver ativado o controle de versão do bucket no bucket S3, terá duas entidades gerenciando arquivos de tabela. A Databricks recomenda desativar o controle de versão do bucket para que o comando VACUUM
possa remover efetivamente os arquivos de dados não utilizados.
Por que uma tabela mostra dados antigos depois que eu excluo os arquivos do Delta Lake com rm -rf
e crio uma nova tabela no mesmo local?
As exclusões no S3 são consistentes apenas eventualmente. Assim, após a exclusão de uma tabela, as versões antigas do log de transações ainda podem ficar visíveis por algum 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.