Skip to content

Pipeline ETL automatizado em Python com Google Cloud. Extrai dados de APIs, realiza transformações com Pandas e armazena no BigQuery. Arquitetura serverless, escalável e integrada a dashboards no Looker Studio.

License

Notifications You must be signed in to change notification settings

Dev-RuiDiniz/gcp-serverless-etl-pipeline

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

GCP Serverless ETL Pipeline

Pipeline ETL Serverless usando Google Cloud Functions, BigQuery e Python
Extração de dados de API pública → Transformação com Pandas → Carga otimizada no BigQuery → Visualização no Looker Studio.


📌 Sobre o Projeto

Este projeto implementa um ETL totalmente Serverless na Google Cloud, utilizando:

  • Google Cloud Functions → execução sob demanda
  • Requests + Retry → extração resiliente
  • Pandas → transformação e limpeza
  • BigQuery → armazenamento analítico
  • Looker Studio → dashboards automatizados
  • Logging estruturado (JSON) → Cloud Logging
  • Secret Manager → gestão segura de credenciais

Ideal para portfólio de Engenharia de Dados, mostrando domínio prático do ecossistema GCP.


🏛️ Arquitetura

Fluxo:

  1. A Cloud Function é acionada (HTTP Trigger ou Scheduler).
  2. O Extractor consome uma API externa (ex: IBGE).
  3. O Transformer limpa/normaliza os dados com Pandas.
  4. O Loader envia para o BigQuery com create-if-not-exists.
  5. Os dados ficam disponíveis para dashboards no Looker Studio.

🗂️ Estrutura do Projeto

.
├── README.md
├── estrutura.txt
├── requirements.txt
├── requirements-dev.txt
├── .gitignore

├── src/
│   ├── main.py
│   ├── cloud_function_handler.py
│   ├── core/
│   │   ├── config.py
│   │   ├── logger.py
│   │   └── exceptions.py
│   ├── etl/
│   │   ├── extractor.py
│   │   ├── transformer.py
│   │   └── loader.py
│   ├── services/
│   │   ├── api_service.py
│   │   ├── bigquery_service.py
│   │   └── secrets_service.py
│   ├── models/
│   │   ├── record_model.py
│   │   └── schema_definition.py
│   └── utils/
│       ├── validators.py
│       └── serializers.py

├── tests/
│   ├── test_extractor.py
│   ├── test_transformer.py
│   ├── test_loader.py
│   ├── test_bigquery_service.py
│   ├── test_api_service.py
│   └── test_cloud_handler.py

├── deploy/
│   ├── deploy.sh
│   ├── gcloud_instructions.md
│   └── architecture_diagram.png

└── docs/
    ├── architecture.md
    ├── bigquery_schema.md
    ├── api_reference.md
    └── looker_setup.md

🚀 Executando Localmente

  1. Criar ambiente virtual
Copiar código
python -m venv venv
source venv/bin/activate  # Windows: venv\Scripts\activate
  1. Instalar dependências
Copiar código
pip install -r requirements.txt
  1. Criar arquivo .env
Copiar código
GCP_PROJECT_ID=seu_projeto
BIGQUERY_DATASET=etl_dataset
BIGQUERY_TABLE=api_data
  1. Executar o ETL
Copiar código
python src/main.py

☁️ Deploy no Google Cloud Functions

  1. Autenticar
Copiar código
gcloud auth login
  1. Usar script automático
Copiar código
bash deploy/deploy.sh
  1. Deploy manual
Copiar código
gcloud functions deploy gcp_etl_pipeline \
  --runtime python311 \
  --trigger-http \
  --entry-point main \
  --region southamerica-east1 \
  --set-env-vars GCP_PROJECT_ID=xxx,BIGQUERY_DATASET=xxx,BIGQUERY_TABLE=xxx \
  --allow-unauthenticated

🧪 Testes

Os testes usam pytest + mocks.

Rodar:

Copiar código
pytest -v
Coverage:
Copiar código
pytest --cov=src

📊 Visualização no Looker Studio

Acesse: https://lookerstudio.google.com/

Crie uma nova fonte → BigQuery

Conecte ao dataset/tabela do pipeline

Publique seu dashboard

Documentação completa em: docs/looker_setup.md


🔒 Segurança

  • Secrets nunca ficam no código
  • Uso de Secret Manager (services/secrets_service.py)
  • Logging em formato JSON (compatível com Cloud Logging)
  • BigQuery com schema fixo (models/schema_definition.py)

🧭 Roadmap

  • Criar CI/CD com GitHub Actions
  • Implementar CDC com Debezium
  • Criar segunda pipeline incremental
  • Adicionar Airflow (Composer) como orquestrador opcional

🤝 Contribuição

Pull requests são bem-vindos! Para contribuir:

Copiar código
git checkout -b feature/nome-da-feature
git commit -m "Descrição"
git push origin feature/nome-da-feature

📧 Contato

Rui Francisco de Paula Inácio Diniz

Engenheiro de Software • Analista de Dados

🔥 Serverless, escalável e pronto para produção!

```

About

Pipeline ETL automatizado em Python com Google Cloud. Extrai dados de APIs, realiza transformações com Pandas e armazena no BigQuery. Arquitetura serverless, escalável e integrada a dashboards no Looker Studio.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published