Neste teste, o objetivo é transformar e carregar os dados contidos no arquivo zip (presente neste repositório nomeado como data.zip
) para um banco de dados PostgreSQL.
Os arquivos contêm informações sobre códigos e eventos de rastreamento de compras em plataformas de e-commerce.
Cada arquivo representa um batch de transações a serem executadas em um banco de dados, onde cada linha é uma transação diferente, identificada pela coluna "Op". Essas transações podem incluir operações de INSERT (identificada pela letra I) ou UPDATE (identificada pela letra U).
O processo envolve a extração dos dados dos arquivos do zip e o carregamento desses dados para tabelas apropriadas no banco de dados PostgreSQL.
Utilize a seguinte docker image do PostgreSQL: postgres:12.16
-
Elaborar um processo de ETL que realize extração, transformação e carregamento dos dados presentes nos arquivos fornecidos, conforme as transações especificadas em cada linha.
-
Realizar a normalização e modelagem do banco de dados, bem como suas tabelas, conforme for apropriado.
-
O processo de ETL deve ser desenvolvido para ser executado utilizando o Docker, garantindo que todas as etapas sejam executadas dentro de containers.
-
IMPORTANTE: Em um cenário real, os arquivos seriam disponibilizados à medida em que são criados. Portanto, é obrigatório que os arquivos sejam extraídos, transformados e carregados para o banco de dados no máximo de 5 em 5 por vez, isto é, o processamento direto de todos os dados não é permitido.
-
Documentar o passo a passo de como executar a pipeline, bem como pontos importantes do desenvolvimento, funcionalidades e decisões de implementação.
-
Disponibilizar o código do projeto em um repositório git público e enviar o link para avaliação do teste.
-
Desenvolver 3 queries como forma de relatório para validação dos dados:
- Total de rastreamentos criados por minuto
- Total de eventos por código de rastreamento
- TOP 10 descrições de eventos mais comuns e seus totais
-
O arquivo zip contém diversos arquivos
.csv
representando os dados de transações as quais precisam ser processadas pela ETL. -
Os arquivos possuem o seguinte padrão de nome:
YYYMMDD-HHMMSSsss
. O nome do arquivo representa a data e horário de criação do arquivo e deve ser levado em consideração para que os dados produzidos pela ETL sejam consistentes. -
Podem ocorrer casos onde uma transação venha com o tipo de operação de UPDATE porém o id da mesma não possua uma operação de INSERT anterior representada nesse conjunto de dados. Quando isso ocorrer, a linha deve apenas ser inserida no banco de dados.
- Op: tipo de operação da transação
- oid__id: identificador do rastreamento
- createdAt: data de criação do rastreamento
- updatedAt: data de atualização do rastreamento
- lastSyncTracker: data da última sincronização do rastreamento
- array_trackingEvents: contém informações sobre os eventos de rastreamento
- createdAt: data de criação do evento
- trackingCode: código de rastreamento
- status: status do evento
- description: descrição do evento
- trackerType: código da transportadora
- from: agência de partida do evento
- to: agência de destino do evento
- O Amazon Redshift (Data Warehouse) possui uma interface similar ao PostgreSQL mas não implementa alguns comandos e funcionalidades. Um destes comandos é
INSERT ... ON CONFLICT
. Desenvolva a lógica de inserção com update (upsert) dos dados sem a utilização deste comando nativo do PostgreSQL.