Home > Engenharia de Dados > Lakehouse
Lakehouse utilizando Arquitetura Medallion e Delta Lake no Databricks
O objetivo desse projeto é demonstrar de forma prática os seguintes itens:
Configuração e gerenciamento de clusters na plataforma Databricks;
Manipulação e transformação de dados utilizando PySpark;
Implementação de um Lakehouse utilizando a tecnologia Delta Lake na plataforma Databricks;
Realização de técnicas avançadas de manipulação de dados de forma eficiente e profissional;
Exemplo de implementação de um pipeline de dados e da arquitetura Medallion para organizar dados em um Lakehouse;
Boas práticas de desenvolvimento aplicadas a construção de pipelines de dados e de um Lakehouse.
NOTA: Esse projeto foi executado na versão Community do Databricks, portanto apresenta algumas limitações de funcionalidades, como é o caso da impossibilidade de demonstração de orquestração de "Jobs" em Workflows do Databricks, a pausa e reexecução de clusters, o agendamento (Schedule) de Jobs, a configuração de "Triggers" e o uso de uso de computação paralela nas execuções.
Arquivos do projeto e seus conteúdos:
O projeto foi subdividido em 8 arquivos do tipo Notebook escritos em Python utilizando PySpark, onde cada um tem sua própria função e nem todos seriam orquestrados pelo Workflow do Databricks em modo de produção:
000 Setup DBFS 2024-12-13 20:11:17 - Esse arquivo contém a criação dos diretórios no sistema de arquivos local do Databricks (DBFS);
001 File Import 2024-12-15 10:49:50 - Neste arquivo foram feitas as importações dos dados a serem trabalhados;
002 Load Bronze 2025-02-06 11:09:29 - Esse arquivo contém os códigos de implementação da Camada Bronze do pipeline;
003 Transform Layer Silver 2025-02-06 13:48:28 - Esse arquivo contém a preparação e limpeza de dados executadas na Camada Silver do pipeline;
004 Layer Gold 2025-02-06 13:59:48 - Esse é um arquivo de execução única e contém os códigos de inicialização da Camada Gold;
005 Layer Gold (incremental) 2025-02-06 17:04:25 - Esse arquivo implementa as cargas incrementais de dados na Camada Gold do pipeline;
006 Tabelas Delta 2025-02-09 17:38:20 - Esse arquivo contém a criação das Tabelas Delta para acesso as tabelas dimensão e tabelas fato do pipeline;
Verificação de Dados 2025-02-09 16:55:51 - Esse arquivo contém código de teste de consulta aos dados para constatar a criação correta do estrutura dos dados conforme o projeto inicial.
RESULTADOS FINAL
Base de Dados e Tabelas Delta
Servidor e Path para conexão com softwares de terceiros (Ex: Microsoft Power BI)
CÓDIGO FONTE DO PROJETO
Aguarde enquanto o código fonte é carregado a partir dos servidores de compartilhamento do Databricks... isso pode demorar alguns segundos.
Arquivo Notebook: 000 Setup DBFS 2024-12-13 20:11:17
Arquivo Notebook: 001 File Import 2024-12-15 10:49:50
Arquivo Notebook: 002 Load Bronze 2025-02-06 11:09:29
Arquivo Notebook: 003 Transform Layer Silver 2025-02-06 13:48:28
Arquivo Notebook: 004 Layer Gold 2025-02-06 13:59:48
Arquivo Notebook: 005 Layer Gold (incremental) 2025-02-06 17:04:25
Arquivo Notebook: 006 Tabelas Delta 2025-02-09 17:38:20
Arquivo Notebook: Verificação de Dados 2025-02-09 16:55:51
Rotinas de Manutenção
Apesar de não terem sido abordadas nesse projeto de exemplo (tanto por se tratar da versão community do Databricks, quanto pelo volume pequeno de dados), um Delta Lake exigem manutenção constante e se possível, automatizada através de "Jobs" secundários de manutenção que podem ser agendados (Schedule) através de agendamento por data, por gatilhos (triggers) ou manualmente.
A manutenção serve entre outra coisas para:
Remover arquivos desnecessários e liberar espaço de armazenamento;
Agrupar e/ou combinar arquivos fragmentados para melhorar a performance do Delta Lake;
Organizar os dados de forma a facilitar consultas e aplicação de filtros;
Melhora a performance em transações ACID (operações com características de Atomicidade, Consistência, Isolamento e Durabilidade);
Facilita a auditoria e em alguns casos a criação de snapshots de dados.
Algumas das rotinas de manutenção de Delta Lakes mais utilizadas são:
Vacuum - utilizado para liberar espaço removendo arquivos antigos e desnecessários (Ex: gerados por operações de update e merge);
Z-Ordering - usado para organizar os dados e otimizar as consultas que realizam filtragens frequentes em colunas, como as de data ou chave.;
Optimize - usado para otimizar o layout dos arquivos armazenados no Delta Lake, principalmente após muitas operações de escrita ou atualização.;
Upset - usado para modificar ou remover dados diretamente em uma tabela Delta, sem precisar sobrescrever a tabela inteira..;
History e Time Travel - usado para auditar mudanças na tabela Delta ou para acessar versões anteriores dos dados.;
Compaction - usado para agrupar arquivos pequenos resultantes de múltiplas operações de escrita em arquivos maiores, melhorando a performance de leitura.
Exemplos do uso de rotinas de manutenção
Vacuum
O Delta Lake mantém versões antigas de dados (histórico) para fornecer recursos como time travel e rollback. Com o tempo, esses arquivos antigos podem consumir muito espaço em disco. O vacuum remove esses arquivos, liberando espaço.
Optimize
O Delta Lake após muitas operações de escrita ou merge pode acumular muitos arquivos pequenos. Isso aumenta o overhead de leitura de muitos arquivos. O optimize combina arquivos pequenos em arquivos maiores, melhorando a leitura e o processamento.
Z-Ordering
Melhora o desempenho de leitura ao organizar fisicamente os dados em disco com base em uma coluna ou mais colunas, reduzindo o tempo de busca dos registros.
Exemplo de Update em uma tabela Delta
Delta Lakes permitem operações upsert (combinação de update e insert) e delete, e isso é importante em pipelines de dados onde os dados são o tempo todo corrigidos, removidos ou atualizados.
Exemplo de Delete em uma tabela Delta
Exemplo de Upset em uma tabela Delta
History e Time Travel
O Delta Lake mantém um log de transações que permite rastrear todas as modificações feitas na tabela. Isso é útil para auditoria e recuperação de dados em um ponto anterior no tempo.
Exemplo de como acessar versões anteriores das tabelas
Exemplo de como restaurar versões anteriores das tabelas
Compaction
As operações de escrita podem gerar muitos arquivos pequenos com o tempo, resultando em um número excessivo de partições pequenas, e afeta a performance. Assim como o Optimize a compactação agrupa esses arquivos pequenos para melhorar o desempenho.
Exemplo do uso de Repartition
Exemplo do uso de Repartition a partir de uma determinada coluna
Exemplo do uso de Coalesce para reduzir o número de partições sem realizar shuffle
NOTA: Manter o Delta Lake bem gerenciado é impoertante para garantir a performance, a integridade dos dados e o uso eficiente de recursos.