Práticas recomendadas: Delta Lake
Este artigo descreve as práticas recomendadas ao usar o Delta Lake.
Visão geral das melhores práticas
As recomendações a seguir são gerais e se aplicam à maioria das cargas de trabalho do Delta Lake:
- Use o site Unity Catalog para gerenciar tabelas. Consulte Trabalhar com tabelas gerenciais.
- Use a otimização preditiva. Consulte Otimização preditiva para Unity Catalog gerenciar tabelas.
- Use o clustering líquido. Consulte Usar clustering líquido para tabelas Delta.
- Ao excluir e recriar uma tabela no mesmo local, você deve sempre usar uma instrução
CREATE OR REPLACE TABLE
. Consulte Soltar ou substituir uma mesa Delta.
Remover as configurações Delta legadas
A Databricks recomenda remover a maioria das configurações Delta legadas explícitas das configurações do Spark e das propriedades da tabela ao atualizar para uma nova versão do Databricks Runtime. As configurações herdadas podem impedir que novas otimizações e valores default introduzidos pelo Databricks sejam aplicados às cargas de trabalho migradas.
Arquivos compactos
Otimização preditiva executando automaticamente OPTIMIZE
e VACUUM
comando em Unity Catalog gerenciar tabelas. Consulte Otimização preditiva para Unity Catalog gerenciar tabelas.
A Databricks recomenda a execução frequente do comando OPTIMIZE para compactar arquivos pequenos.
Essa operação não remove os arquivos antigos. Para removê-los, execute o vacuum comando.
Não use o cache do Spark com o Delta Lake
A Databricks não recomenda que o senhor use o cache do Spark pelos seguintes motivos:
- Você perde qualquer perda de dados que possa vir de filtros adicionais adicionados ao cache
DataFrame
. - Os dados que são armazenados em cache podem não ser atualizados se a tabela for acessada usando um identificador diferente.
Diferenças entre o Delta Lake e o Parquet no Apache Spark
O Delta Lake lida com as seguintes operações automaticamente. Você nunca deve executar estas operações manualmente:
REFRESH TABLE
: As tabelas delta sempre retornam as informações mais atualizadas, portanto, não há necessidade de ligarREFRESH TABLE
manualmente após as alterações.- Adicionar e remover partições : o Delta Lake rastreia automaticamente o conjunto de partições presentes em uma tabela e atualiza a lista à medida que os dados são adicionados ou removidos. Como resultado, não há necessidade de executar
ALTER TABLE [ADD|DROP] PARTITION
ouMSCK
. - Carregar uma única partição : não é necessário ler partições diretamente. Por exemplo, você não precisa executar o
spark.read.format("parquet").load("/data/date=2017-01-01")
. Em vez disso, utilize uma cláusulaWHERE
para pular dados, comospark.read.table("<table-name>").where("date = '2017-01-01'")
. - Não modifique manualmente os arquivos de dados : o Delta Lake usa o log de transações para confirmar as alterações na tabela atomicamente. Não modifique, adicione ou exclua arquivos de dados Parquet diretamente em uma tabela Delta, porque isso pode levar à perda de dados ou à corrupção da tabela.
Melhorar o desempenho para Delta Lake merge
O senhor pode reduzir o tempo necessário para acessar merge usando as seguintes abordagens:
-
Reduza o espaço de busca por correspondências : por padrão, a
merge
operação pesquisa toda a tabela Delta para encontrar correspondências na tabela de origem. Uma forma de acelerarmerge
é reduzir o espaço de pesquisa adicionando restrições conhecidas na condição de correspondência. Por exemplo, suponha que você tenha uma tabela particionada porcountry
date
e e queira usarmerge
para atualizar as informações do último dia e de um país específico. Adicionar a condição a seguir torna a consulta mais rápida, pois ela procura correspondências somente nas partições relevantes:SQLevents.date = current_date() AND events.country = 'USA'
Além disso, essa consulta também reduz as chances de conflitos com outras operações concorrente. Consulte Níveis de isolamento e conflitos de gravação em Databricks para obter mais detalhes.
-
Arquivos compactos : se os dados estiverem armazenados em muitos arquivos pequenos, a leitura dos dados para pesquisar correspondências pode ficar lenta. O senhor pode compactar arquivos pequenos em arquivos maiores para melhorar a leitura do Taxa de transferência. Para obter detalhes, consulte Otimizar a disposição do arquivo de dados.
-
Controle as partições aleatórias para gravações : a operação
merge
embaralha dados várias vezes para calcular e gravar os dados atualizados. O número de tarefas usadas para embaralhar é controlado pela configuração da sessão do Sparkspark.sql.shuffle.partitions
. A definição desse parâmetro não apenas controla o paralelismo, mas também determina o número de arquivos de saída. Aumentar o valor aumenta o paralelismo, mas também gera um número maior de arquivos de dados menores. -
Habilitar gravações otimizadas : para tabelas particionadas,
merge
pode produzir um número muito maior de arquivos pequenos do que o número de partições aleatórias. Isso ocorre porque cada tarefa de embaralhamento pode gravar vários arquivos em várias partições, o que pode se tornar um gargalo de desempenho. Você pode reduzir o número de arquivos ativando gravações otimizadas. Consulte Gravações otimizadas para Delta Lake em Databricks. -
Ajuste o tamanho dos arquivos na tabela : O Databricks pode detectar automaticamente se uma tabela Delta tem operações
merge
frequentes que reescrevem arquivos e pode optar por reduzir o tamanho dos arquivos reescritos em antecipação a outras reescritas de arquivos no futuro. Consulte a seção sobre ajuste de tamanhos de arquivos para obter detalhes. -
Low Shuffle merge : A mesclagem Low Shuffle oferece uma implementação otimizada do site
MERGE
que proporciona melhor desempenho para as cargas de trabalho mais comuns. Além disso, ele preserva as otimizações de disposição de dados existentes, como Z-ordering em dados não modificados.