basedosdados / basedosdados/pipelines
[chore] Isolamento de cota BQ entre desenvolvimento e gate de prod
- Dominant language
- Python
- Stars
- 49
- Forks
- 22
- Avg merge
- 19h 31m
- Merged PRs (30d)
- 165
Description
## Problema
Atualmente, os flows de **produção** no Prefect 3 executam uma etapa de validação em `basedosdados-dev` antes de materializar em `basedosdados`. O fluxo completo é:
1. `dbt run` + `dbt test` em `basedosdados-dev` (billing: `basedosdados-dev`)
2. `dbt run` + `dbt test` em `basedosdados` (billing: `basedosdados`)
Isso significa que flows de prod e desenvolvimento manual compartilham a **mesma cota diária** do projeto `basedosdados-dev`. Se a cota do dia for exaurida por alguém desenvolvendo localmente, **todos os flows de prod travam no passo 1** e nunca chegam a materializar em prod.
## Consumo atual por quem usa a cota de `basedosdados-dev`
| Origem | Destino | Billing |
|---|---|---|
| Desenvolvimento manual | `basedosdados-dev` | `basedosdados-dev` |
| Flow de prod — gate dev | `basedosdados-dev` | `basedosdados-dev` ← problema |
| Flow de prod — prod | `basedosdados` | `basedosdados` |
## Soluções possíveis
### Opção 1 — Separar o billing do gate dev (recomendada)
Criar um terceiro dbt target (`dev_gate`) que materializa em `basedosdados-dev` mas cobra as queries em `basedosdados`, usando `execution_project` do BigQuery:
```yaml
# profiles.yml
dev_gate:
type: bigquery
method: service-account
project: basedosdados-dev # destino dos dados
execution_project: basedosdados # quem paga a query
keyfile: /credentials-prod/prod.json
dataset: "{{ env_var('DBT_DATASET_ID') }}"
threads: 4
```
Nos flows de prod, substituir `target="dev"` por `target="dev_gate"`. O desenvolvimento manual continua usando `target="dev"` sem mudanças.
**Pré-requisito:** confirmar que a SA do `prod.json` tem permissão de escrita em `basedosdados-dev`.
**Resultado:** a cota de `basedosdados-dev` passa a ser usada exclusivamente por desenvolvimento manual. Flows de prod não competem por ela.
---
### Opção 2 — Aumentar a cota diária de `basedosdados-dev`
Solução paliativa no console GCP — não resolve a competição entre desenvolvimento e prod, mas reduz a frequência do problema.
## Escopo afetado
Todos os flows de prod com `materialize_after_dump=True` (padrão) que executam `run_dbt(target="dev")` antes de `run_dbt(target="prod")`.
Contributor guide
Research direction
Locate profiles.yml and the production flows that call run_dbt(target="dev") before the prod run. First verify the prod service account can write to basedosdados-dev, then trace the affected flows with materialize_after_dump=True. Done means production gate queries bill to basedosdados while development continues using the dev target.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- google-cloud, python
- Domain
- cloud, data-engineering
- Issue type
- Feature
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 55/100