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.
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.
Fluxo:
- A Cloud Function é acionada (HTTP Trigger ou Scheduler).
- O Extractor consome uma API externa (ex: IBGE).
- O Transformer limpa/normaliza os dados com Pandas.
- O Loader envia para o BigQuery com create-if-not-exists.
- Os dados ficam disponíveis para dashboards no Looker Studio.
.
├── 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- Criar ambiente virtual
Copiar código
python -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate- Instalar dependências
Copiar código
pip install -r requirements.txt- Criar arquivo .env
Copiar código
GCP_PROJECT_ID=seu_projeto
BIGQUERY_DATASET=etl_dataset
BIGQUERY_TABLE=api_data- Executar o ETL
Copiar código
python src/main.py- Autenticar
Copiar código
gcloud auth login- Usar script automático
Copiar código
bash deploy/deploy.sh- 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-unauthenticatedOs testes usam pytest + mocks.
Rodar:
Copiar código
pytest -v
Coverage:Copiar código
pytest --cov=srcAcesse: 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
- 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)
- Criar CI/CD com GitHub Actions
- Implementar CDC com Debezium
- Criar segunda pipeline incremental
- Adicionar Airflow (Composer) como orquestrador opcional
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-featureRui Francisco de Paula Inácio Diniz
Engenheiro de Software • Analista de Dados
- LinkedIn: https://www.linkedin.com/in/
- GitHub: https://github.com/Dev-RuiDiniz
