Este repositório tem como fim testar os candidatos para vaga de engenheiro de dados na empresa Magazord.
Para esta vaga buscamos alguém apaixonado por Dados e como disponibilizar de maneira estrutura e eficiente para tomada de decisão sobre esses dados!
Bem-vindo ao desafio técnico para Data Engineer. O objetivo deste teste é avaliar suas habilidades em pipeline de dados (ETL / ELT), modelagem de dados, confiabilidade dos dados e decisões de arquitetura.
Você está assumindo a manutenção de um pipeline de dados crítico. Atualmente, os dados de vendas, produtos e usuários estão isolados no MongoDB e precisam ser migrados para um Data Warehouse (PostgreSQL) para viabilizar relatórios financeiros.
Sua tarefa é desenvolver um script (ou conjunto de scripts) em Python que realize esse processo de ETL de forma robusta e disponibilizá-los em um PostgreSQL modelado para análise (OLAP/Star Schema).
Disponibilizamos um ambiente Dockerizado com os dados de origem já carregados.
- Docker e Docker Compose instalados.
- Clone este repositório.
- Na raiz do projeto, execute:
docker-compose up -d --build
-
MongoDB (Fonte): localhost:27017 (Contém os dados brutos).
-
Postgres (Destino): localhost:5432 (Banco vazio para você popular).
-
As credenciais de acesso (usuário, senha e database) estão definidas no arquivo docker-compose.yml. Analise-o para se conectar.
-
ATENÇÃO o Postgres usa volume nomeado, se você progredir e em algum momento utilizar
docker compose down -v, o ambiente será resetado e todo progresso perdido. -
Você pode se conectar ao MongoDB ou Postgres através de SGBDS ou pelo terminal, exemplo de como se conectar ao MongoDB:
docker exec -it source_mongodb mongosh -u admin -p password123 --authenticationDatabase admin raw_data
Aqui é onde avaliaremos sua senioridade e boas práticas de engenharia:
Em um ambiente de produção, o pipeline deve ser capaz de rodar múltiplas vezes sem gerar inconsistências.
- Cenário de Teste: Se executarmos seu script duas vezes seguidas, o banco de dados final não pode ter linhas duplicadas.
- Expectativa: Use estratégias como
UPSERT(Insert on Conflict), verificação de existência ou limpeza prévia (TRUNCATE/DELETEdo dia processado) para garantir que o estado final seja sempre consistente, independente de quantas vezes o job rode.
- O script não deve falhar silenciosamente.
- Se uma data estiver corrompida e não puder ser convertida, o pipeline deve parar e avisar, ou ignorar o registro e logar o aviso? Tome uma decisão e documente-a.
- Use logs claros (ex:
INFO: Processando 500 usuários...,ERROR: Falha ao conectar no banco...) ao invés de apenasprint().
- Não use senhas "hardcoded" no código. Leia as variáveis de ambiente ou utilize um arquivo de configuração.
- O avaliador deve ser capaz de rodar seu projeto apenas com
docker-compose upe executando seu script principal, sem precisar instalar bibliotecas manualmente na máquina dele (use umrequirements.txtouDockerfilepara o runner).
Crie algumas consultas analíticas no banco de dados final, para gerar insights que possam auxiliar o time comercial.
Important
Código fonte do pipeline.
Important
Banco de dados final populado com os dados processados.
Important
Consultas SQL.
Important
README.md com instruções detalhadas para execução.
- Completude Técnica:
- O pipeline atende aos requisitos funcionais?
- As consultas fornecem os resultados corretos?
- Qualidade do Código:
- Estrutura e organização do código.
- Tratamento de erros.
- Uso de boas práticas de desenvolvimento.
- Eficiência:
- O pipeline e as consultas foram otimizados para desempenho?
- Documentação:
- O README fornece instruções claras e detalhadas?
- Criatividade e Inovação:
- O candidato usou estratégias diferenciadas para resolver os problemas?
- Suba o repositório no seu Github e envie o link diretamente para o seu recrutador.
Obs.: Não serão aceitos alterações após o envio.
