Shinkansen · Payout results (→ BigQuery)
De punta a punta: del webhook de Shinkansen (evento con
payout_order_results) a la tabla crudashinkansen.shinkansen_payout_resultsen BigQuery. Comparte el Cloud Run clasificador con la metadata, pero usa su propio topic (sin fan-out).
¿Llegaste hasta acá desde…?
Usa esta tabla para entrar en sentido inverso (lo que ves → de dónde sale):
| Si ves… | Eso sale de… | La lógica está en… |
|---|---|---|
La tabla shinkansen.shinkansen_payout_results en BigQuery / Metabase |
solvento-data-prod.shinkansen.shinkansen_payout_results (RAW) |
Ingesta (sin lógica de negocio); ver "Paso a paso" |
| Un resultado de payout que no aparece en la tabla | Clasificación del webhook | webhook_shinkansen → cloud_run/main.py (detect_event_type → payout_results) |
Resumen
| Campo | Valor |
|---|---|
| Origen | Webhook de Shinkansen, evento con document.payout_order_results[] |
| Patrón | Event-driven (Cloud Run clasifica → Pub/Sub → Dataflow → BigQuery) |
| Tabla RAW | solvento-data-prod.shinkansen.shinkansen_payout_results |
| Frecuencia | Streaming |
| Criticidad | 🟡 Media |
| Dueño | Martin (data eng) |
| Repos | webhook_shinkansen · templates-dataflow |
Diagrama de linaje
graph LR
SHK[["📨 Shinkansen<br/>webhook (payout_results)"]]
CR["Cloud Run<br/>webhook-shinkansen-inline-prod<br/><i>clasifica por tipo</i>"]
TOP(["Pub/Sub<br/>shinkansen-payout-results-prod"])
SUB(["sub<br/>shinkansen-payout-results-prod-sub"])
DF["Dataflow<br/>shinkansen-payout-results-webhook-prod-20260112-195635"]
BQ[("solvento-data-prod<br/>shinkansen.shinkansen_payout_results")]
MB["Metabase / análisis"]
SHK -->|HTTP| CR -->|"SHINKANSEN_PAYOUT_RESULTS_TOPIC"| TOP --> SUB --> DF --> BQ --> MB
classDef src fill:#fde68a,stroke:#b45309,color:#000;
classDef store fill:#bfdbfe,stroke:#1e40af,color:#000;
class SHK src;
class BQ store;
Paso a paso
- Shinkansen emite un webhook por cada actualización de payout. Cuando trae
document.payout_order_results[], es un evento de resultados de payout. - Cloud Run
webhook-shinkansen-inline-prod(webhook_shinkansen,cloud_run/main.py) recibe el POST en/shinkansen, lo clasifica condetect_event_typey, al detectarpayout_results, lo publica en el topic configurado enSHINKANSEN_PAYOUT_RESULTS_TOPIC. - Pub/Sub desacopla: topic
shinkansen-payout-results-prod→ suscripciónshinkansen-payout-results-prod-sub. - Dataflow
shinkansen-payout-results-webhook-prod-20260112-195635(templates-dataflow, carpetashinkansen-payout-results-webhook;INPUT_SUBSCRIPTION=…/shinkansen-payout-results-prod-subyOUTPUT_TABLEen suprod.env) consume la suscripción. - BigQuery: el Dataflow escribe el dato crudo en
solvento-data-prod.shinkansen.shinkansen_payout_results(OUTPUT_TABLE=solvento-data-prod:shinkansen.shinkansen_payout_results). No hay lógica de negocio en la ingesta.
El mismo Cloud Run clasifica los tres tipos de evento (
payout_metadata,payout_results,response); este proceso es la ramapayout_results. La ramapayout_metadataestá enshinkansen-payout-metadata.md.
Tablas que alimenta
| Tabla | Contenido | Job que la carga |
|---|---|---|
solvento-data-prod.shinkansen.shinkansen_payout_results |
Resultados crudos de payout orders de Shinkansen | Dataflow shinkansen-payout-results-webhook-prod-20260112-195635 |
Consumo aguas abajo
- Metabase / análisis de resultados de payout leen directamente de
solvento-data-prod.shinkansen.shinkansen_payout_results. - Si existe una capa de staging sobre esta tabla, vive en
dbt-analytics(models/staging/shinkansen— (confirmar)). Por criticidad media no se rastrean los modelos aquí.
Si falla 🛠️
Impacto: deja de actualizarse shinkansen.shinkansen_payout_results en BigQuery (queda desactualizado el análisis de resultados de dispersiones). Pub/Sub retiene los mensajes hasta que el Dataflow los consuma.
| Síntoma | Dónde mirar | Acción |
|---|---|---|
| No llegan eventos nuevos a ninguna tabla de Shinkansen | Logs Cloud Run webhook-shinkansen-inline-prod |
Si fue un deploy → rollback; verificar que SHINKANSEN_PAYOUT_RESULTS_TOPIC esté configurado |
| Llega al topic pero la RAW no avanza | Dataflow shinkansen-payout-results-webhook-prod-…: watermark; backlog de la sub shinkansen-payout-results-prod-sub |
Transitorios se recuperan solos consumiendo la misma suscripción; si hay duda, relanzar/escalar |
Eventos clasificados como UNKNOWN |
Logs del webhook (detect_event_type) |
Revisar si Shinkansen cambió el esquema; ajustar la detección en cloud_run/main.py |
| Datos en BQ pero "raros" en Metabase | Capa dbt en dbt-analytics (si aplica) |
Revisar la transformación en el repo, no la ingesta |
Escalación: lógica SQL / Metabase → Diego · resto (ingesta, Cloud Run, Dataflow, Pub/Sub) → Martin.
Enlaces
- 📊 Estado en vivo: dashboard "Data Processes" (Cloud Monitoring)
- 📦 Ingesta:
webhook_shinkansen· template Dataflow entemplates-dataflow→ carpetashinkansen-payout-results-webhook - 🔗 Vista que unifica los payouts (este flujo + metadata + treasury): Shinkansen · Payouts unificado
- 🔀 Otra rama del mismo webhook:
shinkansen-payout-metadata.md
Última actualización: 2026-06-21 · Si cambia el flujo o el esquema del webhook, actualizar esta ficha en el mismo MR.