Desafio de Engenharia de Dados - Coco Bambu

Desafio de Engenharia de Dados — Coco Bambu

Este repositório apresenta a solução completa para o Desafio de Engenharia de Dados do Coco Bambu, abordando ingestão, processamento, validação e armazenamento de dados JSON em um Data Lake na AWS, com foco em escalabilidade, qualidade dos dados e boas práticas de arquitetura.

Visão Geral do Projeto

A solução foi projetada para simular um ambiente real de ingestão de dados provenientes de sistemas ERP e APIs transacionais, aplicando um pipeline de ETL robusto, validado e resiliente a mudanças de esquema.

O pipeline utiliza serviços gerenciados da AWS como S3, API Gateway, Lambda e RDS, garantindo automação, rastreabilidade e organização dos dados.

Estrutura do Repositório

desafio-coco-bambu/
├── scripts/
│   ├── create_folders_s3.py
│   ├── create_tables.py
│   ├── etl_process.py
│   ├── api_fetch.py
│
├── data/
│   └── exemplos/
│       ├── ERP.json
│       ├── ERP_ADICIONAL.json
│       └── ERP_TAXATION.json
│
├── .env
├── requirements.txt
├── README.md
├── CHALLENGE_DETAILS.md
├── KANBAN.md
├── API_DOCUMENTATION.md
  

A estrutura foi organizada para facilitar manutenção, versionamento e entendimento do pipeline completo.

Configuração do Ambiente

Pré-requisitos

  • Python 3.12
  • AWS CLI configurado
  • Permissões para S3, API Gateway e RDS

Instalação das Dependências

pip install -r requirements.txt

Arquivo de Variáveis de Ambiente (.env)

BUCKET_NAME=coco-bambu-data-lake2
API_BASE_URL=https://<api-gateway-id>.execute-api.us-east-1.amazonaws.com/default
DB_HOST=coco-bambu-rds.chqcsweg0oqw.us-east-1.rds.amazonaws.com
DB_NAME=coco_bambu_db
DB_USER=postgre
DB_PASSWORD=YourSecurePassword
DB_PORT=5432
  

As variáveis permitem desacoplar configuração e código, facilitando deploys e mudanças de ambiente.

Arquitetura do Data Lake

Estrutura do Bucket S3

raw/
├── erp/
├── api_responses/
│   ├── getFiscalInvoice/
│   ├── getGuestChecks/
│   ├── getChargeBack/
│   ├── getTransactions/
│   └── getCashManagementDetails/
processed/
logs/
  

A separação entre raw, processed e logs garante organização, governança e facilidade de auditoria dos dados.

Scripts Implementados

Criação de Tabelas no RDS

O script create_tables.py cria tabelas normalizadas e índices para otimizar consultas e garantir integridade relacional.

  • guest_checks — índice em guest_check_id
  • taxes — índice em guest_check_id
  • detail_lines — índice em guest_check_id
  • menu_items — índice em menu_item_id
python scripts/create_tables.py

Ingestão de APIs

O script api_fetch.py consome APIs simuladas e armazena as respostas no S3, organizadas por endpoint e data de operação.

python scripts/api_fetch.py

Processo de ETL

O script etl_process.py realiza leitura, validação e carga dos dados no banco PostgreSQL (RDS).

  • Validação por schema JSON
  • Suporte a campos dinâmicos (ex: taxestaxation)
  • Logs detalhados de erro no S3
  • Mensagens de progresso e sucesso
python scripts/etl_process.py

APIs Simuladas

  • /bi/getFiscalInvoice
  • /res/getGuestChecks
  • /org/getChargeBack
  • /trans/getTransactions
  • /inv/getCashManagementDetails

Cada endpoint recebe parâmetros como data de operação (busDt) e identificador da loja (storeId), retornando dados JSON estruturados.

Kanban e Organização

O arquivo KANBAN.md foi utilizado para acompanhar o progresso do projeto, dividido em:

  • A Fazer
  • Em Progresso
  • Concluído

Essa abordagem facilitou entregas incrementais e ajustes rápidos durante o desenvolvimento.

Considerações Finais

Este projeto demonstra uma solução completa e madura de Engenharia de Dados, com foco em:

  • Flexibilidade: adaptação a mudanças de esquema
  • Organização: Data Lake estruturado e logs auditáveis
  • Automação: ingestão via APIs e processamento ETL
  • Escalabilidade: arquitetura pronta para expansão

A solução está preparada para evoluções futuras, como inclusão de novos endpoints, integração com ferramentas analíticas ou migração para arquiteturas distribuídas.