Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Este artigo descreve as práticas recomendadas ao usar o Delta Lake.
Visão geral das práticas recomendadas
A seguir estão recomendações gerais que se aplicam à maioria das cargas de trabalho do Delta Lake:
- Use tabelas gerenciadas do Unity Catalog. Consulte Tabelas gerenciadas do Catálogo Unity no Azure Databricks para Delta Lake e Apache Iceberg.
- Use a otimização preditiva. Consulte Otimização preditiva para tabelas gerenciadas do Unity Catalog.
- Utilize a aglomeração de líquidos. Veja Utilizar clustering líquido para tabelas.
- Ao excluir e recriar uma tabela no mesmo local, você sempre deve usar uma
CREATE OR REPLACE TABLEinstrução. Consulte Soltar ou substituir uma tabela Delta.
Remover configurações Delta herdadas
O Databricks recomenda remover a maioria das configurações Delta herdadas 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 padrão introduzidos pelo Databricks sejam aplicados a cargas de trabalho migradas.
Arquivos compactos
A otimização preditiva é executada automaticamente ao correr comandos OPTIMIZE e VACUUM nas tabelas geridas do Unity Catalog. Consulte Otimização preditiva para tabelas gerenciadas do Unity Catalog.
O Databricks recomenda executar frequentemente o comando OPTIMIZE para compactar arquivos pequenos.
Nota
Esta operação não remove os ficheiros antigos. Para removê-los, execute o comando VACUUM.
Não use o cache do Spark com o Delta Lake
O Databricks não recomenda que você use o cache do Spark pelos seguintes motivos:
- Você perde qualquer salto de dados que possa vir de filtros adicionais adicionados sobre o cache
DataFrame. - Os dados armazenados em cache podem não ser atualizados se a tabela for acessada usando um identificador diferente.
Diferenças entre Delta Lake e Parquet no Apache Spark
O Delta Lake lida com as seguintes operações automaticamente. 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 TABLEmanualmente 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] PARTITIONouMSCK. -
Carregar uma única partição: Não é necessário ler partições diretamente. Por exemplo, tu não precisas de executar
spark.read.format("parquet").load("/data/date=2017-01-01"). Em vez disso, use a cláusulaWHEREpara 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 alterações na tabela atomicamente. Não modifique, adicione ou exclua diretamente arquivos de dados do Parquet em uma tabela Delta, pois isso pode levar à perda de dados ou à corrupção da tabela.
Melhorar o desempenho da fusão do Delta Lake
Você pode reduzir o tempo necessário para mesclar usando as seguintes abordagens:
Reduzir o espaço de pesquisa para correspondências: Por padrão, a operação pesquisa toda a
mergetabela Delta para encontrar correspondências na tabela de origem. Uma maneira 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 porcountryedateque deseja usarmergepara atualizar as informações do último dia e de um país específico. Adicionar a seguinte condição torna a consulta mais rápida, pois procura correspondências apenas nas partições relevantes:events.date = current_date() AND events.country = 'USA'Além disso, essa consulta também reduz as chances de conflitos com outras operações simultâneas. Consulte Níveis de isolamento e conflitos de gravação no Azure Databricks para obter mais detalhes.
Arquivos compactos: Se os dados forem armazenados em muitos arquivos pequenos, a leitura dos dados para procurar correspondências pode ficar lenta. Você pode compactar arquivos pequenos em arquivos maiores para melhorar a taxa de transferência de leitura. Consulte Otimizar layout de arquivo de dados para obter detalhes.
Controlar as partições de embaralhamento para gravações: A operação
mergeembaralha os dados várias vezes para calcular e gravar os dados atualizados. O número de tarefas usadas para embaralhar é controlado pela configuraçãospark.sql.shuffle.partitionsda sessão do Spark. A definição desse parâmetro não só 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.Ativar gravações otimizadas: Para tabelas particionadas,
mergepode produzir um número muito maior de arquivos pequenos do que o número de partições aleatórias. Isso ocorre porque cada tarefa aleatória pode gravar vários arquivos em várias partições e pode se tornar um gargalo de desempenho. Você pode reduzir o número de arquivos habilitando gravações otimizadas. Consulte Escritas otimizadas para Delta Lake no Azure Databricks.Ajustar tamanhos de arquivo na tabela: o Azure Databricks pode detetar automaticamente se uma tabela Delta tem operações frequentes
mergeque reescrevem arquivos e pode optar por reduzir o tamanho de arquivos regravados em antecipação a novas regravações de arquivos no futuro. Consulte a seção sobre ajuste de tamanhos de arquivo para obter detalhes.Low Shuffle Merge: Low Shuffle Merge fornece uma implementação otimizada que fornece melhor desempenho para as cargas de
MERGEtrabalho mais comuns. Além disso, preserva otimizações de layout de dados existentes, como ordenação Z em dados não modificados.