Skip to content

magazord-plataforma/data_engineer_test

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Magazord

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!

O Teste

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.

O Cenário

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).

Como Rodar o Ambiente

Disponibilizamos um ambiente Dockerizado com os dados de origem já carregados.

Pré-requisitos

  • Docker e Docker Compose instalados.

Passo a Passo

  1. Clone este repositório.
  2. Na raiz do projeto, execute:
    docker-compose up -d --build

O ambiente subirá dois containers:

  • 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

Requisitos Não-Funcionais (Como o código deve se comportar)

Aqui é onde avaliaremos sua senioridade e boas práticas de engenharia:

1. Idempotência

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 / DELETE do dia processado) para garantir que o estado final seja sempre consistente, independente de quantas vezes o job rode.

2. Tratamento de Erros e Logs

  • 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 apenas print().

3. Configuração e Reprodutibilidade

  • 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 up e executando seu script principal, sem precisar instalar bibliotecas manualmente na máquina dele (use um requirements.txt ou Dockerfile para o runner).

Consultas Analíticas

Crie algumas consultas analíticas no banco de dados final, para gerar insights que possam auxiliar o time comercial.

Entregas Esperadas

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.

Critérios de Avaliaçã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?

Envio do teste

  • 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.

About

Teste prático para Engenheiro de dados

Resources

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors