API — BigQuery e Dataform¶
📋 Visão Geral¶
A camada de API do Motor de Pricing é responsável por toda comunicação com o Google Cloud Platform. Ela compreende:
- Leitura de dados via BigQuery (queries parametrizadas)
- Escrita de dados processados de volta ao BigQuery
- Orquestração de pipelines via Dataform
🔄 Fluxo de Dados¶
graph LR
subgraph Leitura
A[fetch_data.py] -->|SELECT| B[BigQuery - gold_pricing]
end
subgraph Processamento
C[Usuário configura na UI] --> D[send_data.py]
D -->|INSERT| B
D --> E[dataform_trigger.py]
E -->|Trigger| F[Pipeline Dataform]
F -->|Processa| B
end
subgraph Resultado
B --> G[fetch_data.py]
G --> H[Tabela de Preços na UI]
end
style B fill:#4285F4,color:#fff
style F fill:#34A853,color:#fff
📦 Módulos da API¶
bigquery_client.py — Cliente Centralizado¶
Provê a instância do cliente BigQuery utilizada por todos os outros módulos. Centraliza configuração de projeto e credenciais.
fetch_data.py — Leitura de Dados¶
838 linhas — módulo mais extenso da API.
| Aspecto | Detalhe |
|---|---|
| Função principal | fetch_data(table_name, filter, user_id) |
| Projeto GCP | GCP_PROJECT_ID (dev) ou driven-strength-374020 (prod) |
| Dataset | GCP_DATASET_ID (dev) ou gold_pricing (prod) |
| Performance | Suporte a ThreadPoolExecutor para fetches paralelos |
Tabelas consultadas incluem:
| Tabela | Uso |
|---|---|
parametrization |
Parametrizações de data |
cost |
Custos dos produtos |
gross_margin |
Margem bruta |
products |
Cadastro de produtos |
packaging |
Perfis de embalagem |
regionalization |
Perfis regionais |
current_price_list |
Lista de preços vigente |
product_strategy |
Estratégia de produtos |
product_strategy_architecture |
Arquitetura de produtos |
regionalization_strategy |
Estratégia de regionalização |
rotated_market |
Mercado rotacionado |
vs_sales_suggestion |
VS Sugestão de vendas |
caps_vs_last_price_list |
CAPS vs última lista |
min_margin |
Margem mínima |
base_index |
Índice base |
painel_qualidade_alertas |
Alertas de qualidade |
cc_posicionamento_produtos |
Posicionamento de produtos |
price_decomposition |
Decomposição do preço |
send_data.py — Envio de Parametrização¶
Envia os dados configurados pelo usuário na Arquitetura de Preços para o BigQuery.
| Aspecto | Detalhe |
|---|---|
| Função principal | send_data(parametrization_data, variables_data, user_id) |
| Retorno | {"status": True/False, "message": "...", "request_id": "UUID"} |
| Processo | 1. Deserializa JSON → 2. Aplica schema → 3. Limpa DataFrame → 4. Filtra colunas → 5. Insere no BigQuery → 6. Trigger Dataform |
| Auxiliar | filter_dataframe_columns() — remove colunas que não existem no schema da tabela destino |
save_price_list.py — Salvamento de Lista de Preços¶
Salva a lista de preços final no BigQuery, filtrando apenas os itens marcados para salvar.
| Aspecto | Detalhe |
|---|---|
| Função principal | save_price_list(data, price_list_id, user_id) |
| Filtro | Apenas linhas com salvar_preco == "Sim" |
| Auxiliar | filter_and_prepare_data() — adiciona price_list_id e user_id |
| Auxiliar | clean_dataframe_for_parquet() — corrige tipos mistos, objetos aninhados e NaN |
send_preco_ponta_data.py — Preço Ponta¶
Envia dados de parametrização para a tabela de preço ponta, dispara o pipeline Dataform e retorna os dados processados.
| Aspecto | Detalhe |
|---|---|
| Função principal | send_preco_ponta_data(parametrization_data, user_id) |
| Retorno | {"status": True/False, "message": "...", "request_id": "UUID", "data": [...]} |
| Diferença | Diferente do send_data, este módulo retorna os dados gerados pela pipeline |
dataform_trigger.py — Orquestração de Pipelines¶
601 linhas — Classe DataformTrigger que orquestra execuções do Dataform.
sequenceDiagram
participant App as Motor Pricing
participant DF as Dataform API
participant BQ as BigQuery
App->>DF: trigger_pipeline(pipeline_name)
DF->>DF: Criar CompilationResult
DF->>DF: Criar WorkflowInvocation
App->>DF: wait_for_workflow_completion(timeout=300s)
loop A cada 10s
App->>DF: get_workflow_status()
DF-->>App: Status (RUNNING/SUCCEEDED/FAILED)
end
DF->>BQ: Executa transformações
BQ-->>App: Dados processados
| Método | Finalidade |
|---|---|
__init__(project_id, location, repository_id) |
Inicializa cliente Dataform |
trigger_pipeline(pipeline_name) |
Compila e executa pipeline |
get_workflow_status(workflow_name) |
Consulta status de execução |
wait_for_workflow_completion(timeout=300) |
Monitora com polling a cada 10s |
list_compilation_actions(compilation_result) |
Lista ações disponíveis |
list_workspaces() |
Lista workspaces do repositório |
get_repository_info() |
Informações do repositório |
trigger_pipeline_with_workspace(workspace) |
Executa via workspace específico |
schema_utils.py — Validação de Schema¶
Utilitários para garantir que os DataFrames estejam compatíveis com os schemas das tabelas BigQuery antes do envio.
dataframe_utils.py — Limpeza de DataFrames¶
Funções para limpeza e preparação de DataFrames para formato Parquet, corrigindo problemas comuns como tipos mistos, objetos aninhados e NaN em colunas de texto.
Última atualização: Março 2026 | Versão 1.0