Linhas de montagem de analistas e ETL
(Secção Tecnologia e Infraestrutura)
Resumo curto
A linha de montagem analítica transforma os eventos operacionais «crus» (taxas, depósitos, webhooks PSP, logs de jogos) em vitrines sustentáveis de métricas (GGR/NGR, LTV, retenha, antifrode). Princípios de referência: Modelo de camadas unificado (Bronze/Silver/Gold), disciplina de ferramentas DQ/lineage, incorporação e idempotidade, observabilidade e SLO, controle de custo. As decisões são tomadas com base no perfil de carga (picos de torneios), regulação (PII/localização) e exigências do negócio para a frescura de dados.
1) Arquiteturas: ETL vs ELT, batch vs stream
ETL (Extract → G7 → Load): transformações antes do download em DWH. Aproxima-se onde as transformações exigem um ambiente controlado/segredos para «nuvem».
ELT (Extract → Load → G7): Matéria-prima em Lake/Lakehouse/DWH, a seguir SQL/motor (dbt/SQL). Conveniente para motores de colinvertebração e iterações flexíveis.
Batch: janelas programadas (a cada 5/15/60 minutos, nightly). Barato e previsível.
Stream: почти real-time (Kafka → Flink/ksqlDB → OLAP). Para vitrines near-real-time (5-60 segundos) e sinais de antifrode/CRM.
O Bronze é cheio de striam, o Silver/Gold é um modelo batch incorporativo.
Recomendação: iGaming manter o ELT + streaming: eventos via CDC/outbox → Bronze (frescor de minutos), transformações incorporativas em Silver/Gold.
2) Modelo camada (Medallion)
Bronze (Raw): eventos crus/CDC sem lógica empresarial. Formatos Parquet/ORC, esquemas como são, validade mínima.
Silver (Conformed): limpeza, dedução, normalização de identificadores, medidas SCD, unificação de moedas/fusos horários.
Gold (Marts): Vitrines de negócios (factos/medidas, cubos), materializações views, pré-agremiações (dias/países/produtos).
Os benefícios são reprodução, evolução transparente, SLO e TTL diferentes por camadas.
3) Fontes e carregamento: CDC, outbox, arquivos
CDC (Mudança Data Capture): fluxos de alterações do OLTP (Postgres/MySQL) com garantia de ordem e idempotação.
Outbox Pattern: eventos são gravados na tabela/coleção de outbox na transação do serviço → o conector é publicado no pneu/lago.
Download de arquivos: downloads PSP, relatórios de parcerias; use manifestos, controle de duplicação (checksum) e diretórios de recepção.
Práticas: fontes são versionizadas (schema version), cada fonte tem contrato de campos e expectativas de qualidade.
4) Orquestra: DAG, dependentes, depor
DAGI: Dependências claras (raw → staging → dims → facts → marts).
Idempotidade de tarefas: reativação sem efeitos colaterais (partition-overwrite, 'MERGE '/upsert).
Separação de ambientes: Dave/Stand/Prod, promoção de artefatos, «porta manual» (manual approval) para backfill caro.
Planejamento: cron/janelas de tempo + eventos-desencadeadores (por chegada de arquivos/partituras).
Segredos, de um gerente secreto; proibição de segredos no código DAG.
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) Qualidade de dados (DQ) e lineage
Cheques DQ: totalidade (count, late arrivals), exclusividade de chaves, faixas/regras de domínio (soma ≥ 0, moeda no guia).
Limite de ativação: parada rígida/soft-fail com alerte, dependendo da criticidade da tabela.
Lineage/diretório: de reporte para origem (tabelas, colunas, métricas), proprietários, documentação, classificação PII.
Controle de esquema: testes automáticos de compatibilidade (backward-/forward-compatível), alert para alterações «quebra».
6) Simulação: SCD, surrogate keys, normalização
SCD2 para medições: 'valid _ from/valid _ to/is _ current', surrogate key ('_ sk') e chave natural ('_ id').
SCD1: reinicie para atributos irrelevantes (por exemplo, interface local).
Surrogate keys: estável '_ sk' para join, natural keys para exclusividade.
Normalização de medidas: snowflake onde as hierarquias são profundas; senão, por ser rápido.
7) Modelos incorporados e particionamento
Marca d' água ('updated _ at', 'ingest _ ts'): leia apenas as linhas novas/modificadas.
Estratégias incorporativas: 'MERGE' sobre chaves de negócio, 'INSERT OVERWRITE' sobre partituras, 'DELETE + INSERT' para pequenas partituras.
Particionamento por data/hora/região; clusterização (sort keys/Z-order) por chave de filtragem e join.
Representações materializadas: pré-regulação GGR/NGR, caixa de seções populares.
Aparelhos Approx: HLL/approx _ distinct para vitrines top-N.
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 e gerenciamento de histórico
Backfill: DAGI individuais com limites de recursos e janelas; «janela da verdade» (por exemplo, 2024-01-01.. 2025-11-05).
Reprocessing: Transformações determinadas → reaproveitamento tem o mesmo resultado. Configura as versões do código de modelo.
Time-travel/versões de tabelas: conveniente para investigação e DR. «erros lógicos».
Retração: política de reversão de dados (remoção/correção) com protocolo.
9) CLO/SLA/SLO da linha de montagem
Frescura (freshness): Bronze ≤ 1-5 min, Silver ≤ 15 min, Gold ≤ 60 min (exemplo).
Confiabilidade: taxa de sucesso do DAG ≥ 99. x%.
Desempenho: p95/p99 duração de nós; O orçamento do tempo para a partida.
Lag Monitoring: atraso do ingest strim, profundidade das filas, late data.
Alerts: perturbação de frescura/volume, DQ-feel, aumento do valor das raias, degradação do MV.
10) Custo: previsão e otimização
Partições e clusters minimizam o volume de raias.
Materialização de marcadores quentes (dias/países/produtos).
Dinheiro de resultados/MVs para dashboards frequentemente usados.
Controle de frequência de reinício (nenhum «a cada 5 minutos» sem motivo).
TTL: Retensno Bronze agressivo, médio Silver, longo Gold (apenas aparelhos).
Capacity planning: métricas catalãs, previsão de picos de torneios/campanhas.
11) Segurança, PII e localização
Classificação de dados PII/financeiro/operacional.
Criptografia em paz e em trânsito; KMS/rol-baseado.
Identificação: hash/camuflagem, colunas individuais com chaves.
RLS/buches para multi-tenência (por 'tenant _ id').
Localização: áreas de armazenamento e processamento por região (EU/TR/LATAM); exportar apenas para locais permitidos.
Auditoria: leitura/grafia em tabelas críticas, acesso ao diretório.
12) Observabilidade: métricas, logs, trailers
Métricas da linha de montagem: duração das tarefas, fila, erros, retais, quantidade de bytes/linhas processados, custo.
Logs: estruturados; correlação por 'trace _ id '/' run _ id'.
Tracing: desde a fonte até a vitrine (ingest → → load → BI).
Dashboards: camadas frescas, sucesso DAGov, pesquisas de alto custo, p95/p99.
13) Ferramentas (orientações de papel)
Orquestração: Orquestradores DAG (com planeador, retais, alertas, segredos).
Transformações: simulação SQL («modelos como código»), testes de modelo unit, documentação.
DQ/contratos: quadros de verificação e SLA para conjuntos de dados.
Lineidge/catálogo: construção automática do gráfico de dependências, busca o dono.
Estêncil: Processadores de janelas/agregações, conectores de sink/fonte.
(Os vendedores específicos são selecionados sob a pilha da empresa e os requisitos de segurança.)
14) Exemplos de modelos
Modelo de vitrine GGR (SQL genérico)
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 modificado com «marca d' água»
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
Verificação DQ (ideia)
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) Folha de cheque de implementação
1. Defina o dicionário de métricas (GGR/NGR/LTV/Retenção) e os proprietários.
2. Fixe o SLO de frescura nas camadas Bronze/Silver/Gold.
3. Normalize os contratos de fontes (esquema, DQ, SLA).
4. Construa um grafo DAG com passos idimpotentes e segredos isolados.
5. Implemente a incorporabilidade (MERGE/overwrite em partituras) e a «marca d' água».
6. Inclua DQ (verificações críticas/suaves), lineage e catálogo de dados.
7. Ajuste a observabilidade (métricas, logs, trailers) e alertas.
8. Digite a retenha/TTL e a política backfill/reprocessing.
9. Forneça controle PII, criptografia, RLS e localização.
10. Execute o game-day para simular a queda da fonte, os circuitos «quebradores», o backfill em massa.
16) Antipattern
«Um ETL noturno para tudo», sem partituras ou intensificações.
A falta de DQ e lineage → relatórios conflitantes e «caça-fantasmas».
Processamento completo de tabelas a cada início (explosão de custo).
Laço rígido em tempo real sem buffers/retrações.
Mistura PII e vitrines públicas sem segmentação e disfarce.
Nenhuma política de retração/remoção (não é possível corrigir erros).
Resumo
Uma linha de montagem sustentável de analistas em iGaming é a carga ELT + streaming em um modelo camada com DQ rígido/lineage, modelos incorporativos, orquestrador transparente e SLO mensurável. Adicione o controle de custo, a política PII/localização, os regulares backfill/DR-exercício - e sua plataforma de análise irá escalar fielmente para os picos de torneio, atendendo ao negócio com os dados de frescura e qualidade desejados.