Retirada do Repositório Original e Adaptada para tópicos
- Neste desafio você deverá capturar, estruturar, armazenar e transformar dados de uma API instantânea.
- A API consiste nos dados de GPS do BRT que são gerados na hora da consulta com o último sinal transmitido por cada veículo.
- Para o desafio, será necessário construir uma pipeline que captura os dados minuto a minuto e gera um arquivo no formato CSV.
- O arquivo gerado deverá conter no mínimo 10 minutos de dados capturados (estruture os dados da maneira que achar mais conveniente), então carregue os dados para uma tabela no Postgres.
- Por fim, crie uma tabela derivada usando o DBT. A tabela derivada deverá conter o ID do onibus, posição e sua a velocidade.
- A pipeline deverá ser construída subindo uma instância local do Prefect (em Python). Utilize a versão 0.15.9 do Prefect.
flowchart LR
api[(API BRT)]
db[(BD PostgreSQL)]
subgraph Flow - Recuperar Dados GPS BRT:
id1[extract_brt_gps_data_json]
id2[transform_json_data_to_df]
id3[transform_identify_empty_values]
id4[transform_epoch_to_datetime]
id5[load_data_to_csv]
id7[load_data_to_bd]
direction TB
id1-->id2-->id3-->id4-->id5-->id7
end
subgraph Transformações DBT:
id8[onibus_velocidade.sql]
end
id1---api
id7---db
id8---db
analysis/
: onde ficam os notebooks de análise de dados, utilizados para detectar quais seriam os campos do banco e quais tratamentos seriam necessários para os dados;database/
: onde ficam os arquivos relacionados ao banco de dados PostgreSQL: o configurador do orquestrador e o arquivo SQL de inicialização do banco;transformations/
: onde fica o projeto DBT, com os modelos e outros arquivos relevantes de transformação de dados;pipelines/
: onde ficam os arquivos relacionado ao pipeline Prefect de ETL.outputs/
: onde fica o arquivo CSV gerado.
- Tenha
docker
edocker-compose
instalados - Entre na pasta
database/
- Rode
docker-compose up
no terminal - O banco de dados Postgres deve estar disponível:
- Host:
localhost
- Port:
5432
- DB Name:
brt_gps
- Usuário:
admin
- Senha:
password
- Host:
- Crie um ambiente virtual usando
venv
- Windows:
python -m venv .\env
- Linux:
python -m venv env
- Windows:
- Ative o ambiente virtual
- Windows:
env\Scripts\Activate.ps1
- Linux:
source env/bin/activate
- Windows:
- Instale as dependências definidas em
requirements.txt
:- Windows:
pip install -r requirements.txt
- Linux:
pip install -r requirements.txt
- Windows:
- Configure os dados do banco em:
- Windows:
C:\Users\[NOME_USUARIO]\.dbt\profiles.yml
- Linux:
~/dbt/profiles.yml
- Windows:
- Garanta que o container docker do banco de dados está ativo (
docker-compose up
) - Ative o ambiente virtual
- Windows:
env\Scripts\Activate.ps1
- Linux:
source env/bin/activate
- Windows:
- Rode na raiz do projeto o comando:
python run.py
- Utilizando VSCode, crie uma pasta na raiz
.vscode
- Crie um arquivo
launch.json
e cole o seguinte conteúdo nele:
{
"version": "0.2.0",
"configurations": [
{
"name": "Projeto",
"type": "python",
"request": "launch",
"program": "run.py",
"console": "integratedTerminal",
"justMyCode": true
}
]
}
- Entre na seção "Run and Debug" na barra lateral esquerda
- Clique em Play