O teste técnico para a vaga de engenheiro de dados consiste na modelagem de um banco de dados relacional para o armazenamento de informações geradas por um sistema gateway, a inserção de dados de logs nesse banco, e a geração de relatórios sobre esses dados.
Para executar os testes é necessário possuir git, um banco de dados MySQL, e Python (>=3.6) instalados.
Primeiro você deve clonar o repositório para sua máquina com git.
$ git clone https://github.com/arthurcerveira/Teste-Tecnico-Melhor-Envio.git
$ cd Teste-Melhor-Envio
Então é necessário instalar as dependências do Python com pip.
$ pip install -r requirements.txt
Esse projeto utiliza um banco de dados MySQL para o armazenamento dos dados. Esse banco de dados pode estar rodando localmente ou através de um container Docker. Abaixo está o comando utilizado para executar um container com MySQL.
$ docker run --name=mysql_melhorenvio --publish 3306:3306 -e MYSQL_ROOT_PASSWORD='123' -e MYSQL_ROOT_HOST=172.17.0.1 -d mysql/mysql-server
A senha do usuário root
do banco de dados deve ser definida como uma variável de ambiente para o funcionamento dos scripts.
$ export MYSQL_ROOT_PASSWORD='123'
Após inicialização do banco de dados, as tabelas e relações podem ser criadas com o script setup_database.py
.
$ cd scripts/database/
$ python setup_database.py
Os dados de logs estão compactados no arquivo data/logs.zip
, e podem ser extraídos através do comando abaixo.
$ unzip data/logs.zip -d data/
Agora os dados do arquivo data/logs.txt
podem ser adicionados no banco de dados, definindo seu caminho como argumento de linha de comando. Essa operação pode ser demorada visto que há uma grande quantidade de entradas para ser inseridas no banco. Para limitar o número de inserções, pode-se usar o parâmetro -n
.
$ cd scripts/
$ python add_log_to_database.py -n 2500 ../data/logs.txt
Então podem ser executados os scripts para gerar os relatórios.
$ python consumers_report.py
$ python latencies_report.py
$ python services_report.py
Esse scripts geram arquivos CSV com os resultados, disponíveis no diretório reports
na raiz do projeto.
Exemplos de relatórios podem ser acessados na pasta reports/examples
, executados para 10000 entradas de logs.
Caso o banco de dados tenha sido inicializado com Docker, este pode ser então finalizado e removido.
$ docker stop mysql_melhorenvio
$ docker rm mysql_melhorenvio
O diagrama entidade relacionamento do banco de dados foi gerado com a ferramenta MySQL Workbench.