Este repositório contém um projeto completo de engenharia de dados que implementa um pipeline ETL (Extração, Transformação e Carga) para análise de dados de vendas de produtos. A solução é totalmente containerizada usando Docker e orquestrada com Apache Airflow, seguindo as melhores práticas como a arquitetura Medallion e o provisionamento de infraestrutura como código.
O objetivo deste projeto é extrair dados de vendas de uma API, processá-los através de um pipeline robusto, armazená-los em um banco de dados PostgreSQL e, finalmente, disponibilizá-los para análise e visualização em uma ferramenta de Business Intelligence (Metabase).
- Orquestração com Apache Airflow: Pipeline de dados agendado e monitorado através de uma DAG (Directed Acyclic Graph) do Airflow.
- Arquitetura Medallion: Os dados são processados em três camadas distintas (
Bronze,SilvereGold) para garantir qualidade, rastreabilidade e governança. - Enriquecimento de Dados Geográficos: O pipeline não apenas limpa, mas também enriquece os dados com informações geográficas, como regiões do Brasil e cálculo de distâncias, além de tratar coordenadas inválidas.
- Infraestrutura como Código: Todo o ambiente, incluindo o banco de dados e a ferramenta de BI, é definido e gerenciado pelo arquivo
docker-compose.override.yml. - Data Marts e KPIs: A camada
Goldcontém tabelas agregadas (Data Marts) e KPIs (Key Performance Indicators) prontos para o consumo por analistas de dados e dashboards. - Visualização com Metabase: O projeto inclui um serviço do Metabase pré-configurado para se conectar facilmente ao banco de dados e explorar os resultados.
O fluxo de dados segue as etapas abaixo:
graph TD
A[API de Produtos] --> B{Apache Airflow};
B --> C[PostgreSQL];
C --> D{Metabase};
subgraph B [Pipeline ETL]
direction LR
T1(1. Extrair para Bronze) --> T2(2. Transformar para Silver) --> T3(3. Carregar para Gold);
end
subgraph C [Banco de Dados]
direction TB
L1[Bronze: Dados Brutos] --> L2[Silver: Dados Limpos e Enriquecidos] --> L3[Gold: Marts e KPIs];
end
subgraph D [Business Intelligence]
direction TB
V1[Dashboards] --> V2[Análises];
end
- Extração (Bronze): A DAG do Airflow (
pipeline_produtos_v3) é executada diariamente, extraindo os dados da APIhttps://labdados.com/produtose salvando-os em formato JSON bruto na tabelabronze.raw_produtos. - Transformação (Silver): Os dados brutos são limpos, padronizados, e enriquecidos. Coordenadas geográficas inválidas são corrigidas, e novas colunas (como
regiaoedistancia_sp_km) são adicionadas. O resultado é salvo na tabelasilver.produtos_clean. - Carga (Gold): A partir dos dados limpos, são criadas diversas tabelas analíticas (marts) e KPIs na camada
Gold. Essas tabelas são agregadas e otimizadas para consultas de BI. - Visualização: O Metabase se conecta à camada
Golddo PostgreSQL, permitindo que usuários de negócio criem dashboards e análises de forma intuitiva.
- Orquestração: Apache Airflow
- Processamento de Dados: Python, Pandas
- Banco de Dados: PostgreSQL
- BI & Visualização: Metabase
- Containerização: Docker, Docker Compose
- Docker
- Docker Compose (geralmente incluído na instalação do Docker Desktop)
- Astro CLI para um ambiente de desenvolvimento Airflow local simplificado.
O docker-compose.override.yml provisiona os serviços de banco de dados e Metabase.
Para iniciar a infraestrutura, execute o seguinte comando na raiz do projeto:
astro dev startIsso irá:
- Criar um container PostgreSQL chamado
astro_postgres_extraacessível na porta5433da sua máquina local. - Executar o script
init-db.sqlpara criar os bancos de dados (analytics,metabase_app), os schemas (bronze,silver,gold) e o usuário para o Airflow. - Criar um container Metabase chamado
astro_metabaseacessível em http://localhost:3000.
Para que a DAG possa se conectar ao banco de dados, você precisa configurar uma conexão no Airflow.
- ID da Conexão (Conn Id):
postgres_analytics - Tipo da Conexão (Conn Type):
Postgres - Host:
postgres-extra(nome do serviço no Docker Compose) - Schema:
analytics - Login:
airflow_user - Senha:
airflow_pass - Porta:
5433
Após configurar a conexão, ative a DAG pipeline_produtos_v3 na UI do Airflow e dispare uma execução manual para popular o banco de dados.
- Acesse o Metabase em http://localhost:3000.
- Siga as instruções iniciais para criar uma conta de administrador.
- Na etapa de adicionar dados, selecione "PostgreSQL" e preencha com as seguintes informações:
- Host:
postgres-extra(nome do serviço no Docker Compose) - Porta:
5432(porta interna da rede Docker) - Nome do banco de dados:
analytics - Nome de usuário:
postgres - Senha:
postgres
- Host:
- Pronto! Agora você pode explorar as tabelas do schema
golde começar a criar suas análises e dashboards.
A DAG é o coração do projeto e é composta pelas seguintes tarefas principais:
criar_schemasecriar_tabelas: Garantem que a infraestrutura no banco de dados (schemas e tabelas da camada Bronze) exista antes da execução.extrair_dados_api: Conecta-se à API, extrai os dados e os armazena na tabelabronze.raw_produtos.transformar_para_silver: Lê os dados da camada Bronze e aplica uma série de transformações:- Normaliza a estrutura JSON.
- Converte tipos de dados (
Data da Comprapara datetime, colunas numéricas). - Padroniza campos de texto.
- Valida e corrige coordenadas geográficas, usando o centro do estado como fallback.
- Enriquece os dados com a
regiaoe adistancia_sp_km.
criar_marts_gold: Cria agregações de negócio, como:mart_vendas_categoria: Vendas, preço médio e avaliação por categoria.mart_performance_estado: Vendas, frete e avaliação por estado.mart_vendas_temporal: Análise de vendas ao longo do tempo.mart_top_produtos: Ranking dos produtos mais vendidos.
criar_mart_geografico: Cria uma tabela otimizada para visualizações em mapas, com coordenadas médias por estado e rankings.criar_kpis_dashboard: Gera tabelas com KPIs consolidados para alimentar dashboards de alta performance, incluindo métricas de crescimento e participação de mercado.log_pipeline_stats: Ao final, registra um resumo da execução, informando quantos registros foram processados em cada etapa.