Este repositório contém um pipeline completo de Extração, Transformação e Carga (ETL) de dados meteorológicos da cidade de Fortaleza (CE). O projeto foi construído para capturar dados climáticos em tempo real, tratá-los e armazená-los em um Data Warehouse, criando uma base histórica pronta para análises e dashboards de Business Intelligence.
💡 Nota: Este material foi desenvolvido como parte de um projeto prático (hands-on) promovido pela @VBLUUIZA.
Orquestração, Infraestrutura & Versionamento:
O pipeline funciona de forma automatizada (agendado de hora em hora) seguindo os passos descritos no fluxo acima:
- Extract (
extract_data.py): Consome a API do OpenWeatherMap para buscar os dados atuais de temperatura, umidade, pressão, etc., salvando o resultado bruto em um arquivo.jsonna camada dedata/. - Transform (
transform_data.py): Lê o.json, normaliza as estruturas aninhadas, filtra colunas desnecessárias, renomeia chaves, converte os campos de timestamp (UNIX) para o fuso horário correto e salva os dados limpos em formato colunar.parquetpara alta performance. - Load (
load_data.py): Carrega o arquivo.parquettransformado e faz o append no banco de dados PostgreSQL utilizando SQLAlchemy.
Durante o desenvolvimento deste pipeline, lidamos com desafios reais de arquitetura de dados e infraestrutura:
- Conflito de Portas de Banco de Dados: Inicialmente, houve um conflito entre a instância nativa do PostgreSQL rodando no Windows (na porta
5432) e o banco do contêiner Docker. Para garantir a portabilidade do projeto, a arquitetura foi refatorada isolando o Data Warehouse 100% no Docker, expondo-o de forma segura na porta5433. - Gerenciamento de Dependências no Airflow: Como o Airflow roda em contêineres limpos, lidar com erros de
ModuleNotFoundErrorexigiu a injeção automatizada de dependências pesadas (pandas,pyarrow,psycopg2,sqlalchemy) via_PIP_ADDITIONAL_REQUIREMENTSno momento de subida (build) da imagem. - Isolamento de Volumes no Docker: Para implementar o padrão de File-Based Handoff (passagem de arquivos entre tarefas), foi necessário configurar bind mounts customizados no
docker-compose.yaml, permitindo que os workers do Airflow escrevessem e lessem nas pastas/srce/datade forma consistente. - Pathing de Módulos Python: Manipulação do
sys.pathdinamicamente dentro da DAG para que o motor de orquestração localizasse os módulos modulares de ETL extraídos em arquivos separados (extract_data.py, etc.).
- Incremento de informações, criação de painéis / relatórios para a visualização da análise
📽️ Esse projeto foi possível graças a educadores que estão democratizando o conhecimento da área tech
- Para construção do projeto acesse: @VBLUUIZA
- Acompanhe outros educadores: @teomewhy; @DataEngineerHelp; @dadoscomrapadura
