basedosdados / basedosdados/pipelines

[chore] Isolamento de cota BQ entre desenvolvimento e gate de prod

Open
#1,767 0 comments 0 reactions 0 assignees View on GitHub
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

Open the contributing 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.