GH GambleHub

Transportadores de análisis y ETL

(Sección: Tecnologías e Infraestructura)

Resumen breve

El transportador analítico convierte los eventos operativos «crudos» de iGaming (apuestas, depósitos, webhooks de PSP, registros de juegos) en escaparates de métricas sostenibles (GGR/NGR, LTV, retransmisión, señales antifraude). Principios de referencia: modelo de capa única (Bronze/Silver/Gold), disciplina instrumental DQ/lineage, incrementalidad e idempotencia, observabilidad y SLO, control de costos. Las decisiones se toman teniendo en cuenta el perfil de carga (picos de torneos), la capacidad de regulación (PII/localización) y los requisitos de frescura de los datos del negocio.

1) Arquitecturas: ETL vs ELT, batch vs stream

ETL (Extract → Transform → Load): transformaciones anteriores a la descarga en DWH. Es adecuado donde las transformaciones requieren un entorno controlado/secretos hasta la «nube».
ELT (Extract → Load → Transformación): materia prima en Lake/Lakehouse/DWH, en adelante SQL/motor (scripts dbt/SQL). Conveniente para motores de columna e iteraciones flexibles.
Batch: ventanas programadas (cada 5/15/60 minutos, nightly). Barato y previsible.
Stream: почти real-time (Kafka → Flink/ksqlDB → OLAP). Para escaparates near-real-time (5-60 segundos) y señales antifraude/CRM.
Híbrido: Bronze se llena de streaming, Silver/Gold son modelos de batch incrementales.

Recomendación: en iGaming mantener ELT + streaming: eventos a través de CDC/outbox → Bronze (minuto de frescura), transformaciones incrementales en Silver/Gold.

2) Modelo laminado (Medallion)

Bronze (Raw): eventos crudos/CDC sin lógica de negocio. Formatos Parquet/ORC, esquemas tal como son, validación mínima.
Silver (Conformed): limpieza, desduplicación, normalización de identificadores, medición SCD, unificación de divisas/zonas horarias.
Oro (Marts): escaparates de negocios (hechos/medidas, cubos), views materializados, preagrupaciones (días/países/productos).

Pros: reproducibilidad, evolución transparente, diferentes SLO y TTL en capas.

3) Fuentes y carga: CDC, outbox, archivos

CDC (Change Data Capture): flujos de cambios desde OLTP (Postgres/MySQL) con garantía de orden e idempotencia.
Patrón de outbox: los eventos se registran en la tabla/colección de outbox en la transacción del servicio → el conector publica en el bus/lago.
Descarga de archivos: descargas PSP, informes de afiliados; use manifiestos, control de tomas (checksum) y directorios de recepción.

Prácticas: se versionan las fuentes (versión schema), para cada fuente es un contrato de campos y expectativas de calidad.

4) Orquestación: DAG, dependencias, depla

DAGi: dependencias explícitas (raw → staging → dims → facts → marts).
Idempotencia de las tareas: reinicio sin efectos secundarios (partition-overwrite, 'MERGE '/upsert).
Separación del entorno: Dev/Stage/Prod, artefactos de promoción, «puerta manual» (manual approval) para backfill caro.
Planificación: cron/ventanas temporales + activadores de eventos (cuando llegan los archivos/lotes).
Secretos: fuera del secreto del gerente; prohibición de secretos en el código DAG.

Ejemplo de DAG abstracto (pseudocódigo):
python with DAG("dwh_daily", schedule="0  ") as dag:
bronze = ingest_cdc(source="payments", partition=hour())
silver = dedup_normalize(input=bronze)
dims  = build_dimensions(input=silver)
facts = build_facts(input=silver, dims=dims)
marts = build_marts(input=facts)
bronze >> silver >> [dims, facts] >> marts

5) Calidad de los datos (DQ) y lineaje

Cheques DQ: integridad (count, late arrivals), singularidad de claves, rangos/reglas de dominio (suma ≥ 0, moneda en referencia).
Umbral de activación: parada dura/soft-fail con alerta dependiendo de la criticidad de la tabla.
Lineage/catálogo: de report a fuente (tablas, columnas, métricas), propietarios, documentación, clasificación PII.
Control de circuitos: pruebas automáticas de compatibilidad (backward-/forward-compatible), alerta de cambios «rompedores».

6) Modelado: SCD, llaves de surrogate, normalización

SCD2 para las medidas: 'valid _ from/valid _ to/is _ current', surrogate key ('_ sk') y clave natural ('_ id').
SCD1: sobrescribir para atributos no esenciales (por ejemplo, la interfaz local).
Llaves de surrogate: '_ sk' estables para join, llaves naturales - para la singularidad.
Normalización de las mediciones: snowflake donde las jerarquías son profundas; de lo contrario, star por la velocidad.

7) Modelos incrementales y lotes

Marca de agua ('updated _ at', 'ingest _ ts'): sólo lee las cadenas nuevas/modificadas.
Estrategias incrementales: 'MERGE' por claves de negocio, 'INSERT OVERWRITE' por lotes, 'DELETE + INSERT' por lotes pequeños.
Partido: por fecha/hora/región; clustering (sort keys/Z-order) por claves de filtrado y join.
Representaciones materializadas: preagregación GGR/NGR, caché de secciones populares.
Unidades approx: HLL/approx_distinct para escaparates baratos top-N.

Ejemplo de 'MERGE' incremental (generalizado):
sql
MERGE INTO fact_deposits f
USING staging_deposits s
ON (f. deposit_id = s. deposit_id)
WHEN MATCHED THEN UPDATE SET amount = s. amount, status = s. status, updated_at = s. updated_at
WHEN NOT MATCHED THEN INSERT (...)
VALUES (...);

8) Backfill, reprocessing y gestión de historia

Backfill: DAGs individuales y con límites de recursos y ventanas; una clara «ventana de la verdad» (por ejemplo, 2024-01-01.. 2025-11-05).
Reprocesamiento: las transformaciones deterministas → la repetición producen el mismo resultado. Lógica de versiones de código de modelo.
Time-travel/versiones de tablas: conveniente para investigaciones y DR de «errores lógicos».
Retracción: política de revocación de datos (eliminación/corrección) con protocolo.

9) CLO/SLA/SLO del transportador

Frescura (frescura): Bronce ≤ 1-5 min, Plata ≤ 15 min, Oro ≤ 60 min (ejemplo).
Fiabilidad: porcentaje de carreras exitosas de DAG ≥ 99. x%.
Rendimiento: p95/p99 duración de nodos; Presupuesto de tiempo para el partido.
Lag monitoreo: rezago ingest-stream, profundidad de las colas, fracción «late data».
Alertas: perturbación de la frescura/volumen, DQ-feiles, aumento del costo de los escáneres, degradación del MV.

10) Costo: predicción y optimización

Los lotes y clústeres minimizan el volumen de escáneres.
Materialización de marcadores calientes (días/países/productos).
Caché de resultados/MVs para dashboards de uso frecuente.
Control de frecuencia de reinicio (ninguno «cada 5 minutos» sin motivo).
TTL: retiro agresivo de Bronze, plata media, oro largo (unidades únicas).
Planificación de la capacidad: métricas de catálogo, predicción de picos de torneos/campañas.

11) Seguridad, PII y localización

Clasificación de datos: PII/financiero/operativo.
Cifrado: en reposo y en tránsito; KMS/acceso basado en roles.
De-identificación: hashing/enmascaramiento, columnas individuales con claves.
RLS/pinzas para multi-tenencia (por 'tenant _ id').
Localización: zonas de almacenamiento y procesamiento por región (EU/TR/LATAM); exportar sólo a las ubicaciones permitidas.
Auditoría: lectura/escritura en tablas críticas, acceso al directorio.

12) Observabilidad: métricas, registros, tracks

Métricas de canalización: duración de las tareas, cola, errores, retrés, volumen de bytes/filas procesados, costo.
Registros: estructurados; correlación por 'trace _ id '/' run _ id'.
Treking: desde la fuente hasta el escaparate (ingest → transform → load → BI).
Dashboards: la frescura de las capas, el éxito de los DAGs, las consultas más caras, p95/p99.

13) Herramientas (puntos de referencia para los roles)

Orquestación: Orquestadores DAG (con planificador, retrés, alertas, secretos).
Transformaciones: simulación SQL («modelos como código»), pruebas unitarias de modelos, documentación.
DQ/contratos: marcos de verificación y SLA para conjuntos de datos.
Lineage/directorio: creación automática de grafos de dependencia, búsqueda del propietario.
Streaming: procesadores de ventanas/agregaciones, conectores sink/source.

(Los vendedores específicos se seleccionan bajo la pila de la empresa y los requisitos de seguridad).

14) Ejemplos de plantillas

Plantilla de escaparate GGR (SQL generalizado)

sql
CREATE OR REPLACE TABLE mart_ggr_daily AS
SELECT
DATE(b. ts) AS d,
c. country_code,
SUM(b. stake) AS stake_sum,
SUM(b. win)  AS win_sum,
SUM(b. stake - b. win) AS ggr
FROM fact_bets b
JOIN dim_country c ON c. country_sk = b. country_sk AND c. is_current
WHERE b. ts >= DATE_SUB(CURRENT_DATE, INTERVAL 60 DAY)
GROUP BY d, c. country_code;

Modelo incremental con «marca de agua»

sql
INSERT INTO fact_bets PARTITION (dt)
SELECT
FROM staging_bets
WHERE updated_at > (SELECT COALESCE(MAX(watermark), '1970-01-01') FROM _meta_watermarks WHERE table='fact_bets');
-- then update watermark

Comprobaciones DQ (idea)

sql
-- 1) key uniqueness
SELECT deposit_id FROM fact_deposits GROUP BY deposit_id HAVING COUNT()>1;

-- 2) negative amounts (error)
SELECT FROM fact_deposits WHERE amount < 0;

15) Lista de verificación de implementación

1. Definir diccionario de métricas (GGR/NGR/LTV/Retention) y propietarios.
2. Fije el SLO de frescura en las capas Bronze/Silver/Gold.
3. Estandarice los contratos de origen (esquemas, DQ, SLA).
4. Construye un gráfico DAG con pasos idempotentes y secretos aislados.
5. Implemente la incrementalidad (MERGE/overwrite por lotes) y las «marcas de agua».
6. Habilite el DQ (comprobaciones críticas/suaves), el lineage y el directorio de datos.
7. Ajuste la observabilidad (métricas, registros, tracks) y alertas.
8. Escriba Retén/TTL y la política backfill/reprocessing.
9. Proporcione control PII, cifrado, RLS y localización.
10. Pase un día de juego: simulando la caída de la fuente, «rompiendo» circuitos, backfill masivo.

16) Antipattern

«Una ETL nocturna para todo» sin partidos e incrementalidad.
La ausencia de DQ y lineaje → informes conflictivos y «caza fantasma».
Reciclaje completo de las tablas en cada lanzamiento (explosión de valor).
Ligamento rígido en tiempo real sin buffers/retraídas.
Mezcla de PII y escaparates públicos sin segmentación ni enmascaramiento.
No hay ninguna directiva de eliminación/retracción (no se pueden corregir los errores).

Resultados

La canalización de análisis sostenible en iGaming es una descarga en streaming ELT + en un modelo en capas con DQ/lineage rígido, modelos incrementales, orquestador transparente y SLO medibles. Agregue control de costos, políticas de PII/localización, ejercicios regulares de backfill/DR, y su plataforma de análisis se escalará de manera confiable bajo los picos del torneo, respondiendo al negocio con datos de la frescura y calidad deseadas.

Contact

Póngase en contacto

Escríbanos ante cualquier duda o necesidad de soporte.¡Siempre estamos listos para ayudarle!

Iniciar integración

El Email es obligatorio. Telegram o WhatsApp — opcionales.

Su nombre opcional
Email opcional
Asunto opcional
Mensaje opcional
Telegram opcional
@
Si indica Telegram, también le responderemos allí además del Email.
WhatsApp opcional
Formato: +código de país y número (por ejemplo, +34XXXXXXXXX).

Al hacer clic en el botón, usted acepta el tratamiento de sus datos.