Analitik ve ETL boru hatları
(Bölüm: Teknoloji ve Altyapı)
Kısa Özet
Analitik boru hattı, "ham" iGaming operasyonel olaylarını (bahisler, depozitolar, PSP web kitapları, oyun günlükleri) istikrarlı metrik vitrinlere (GGR/NGR, LTV, tutma, sahtekarlık karşıtı sinyaller) dönüştürür. Destekleyici ilkeler: Tek katmanlı bir model (Bronz/Gümüş/Altın), enstrümantal disiplin DQ/soy, artıcılık ve idempotans, gözlemlenebilirlik ve SLO, maliyet kontrolü. Kararlar, veri tazeliği için yük profili (turnuva zirveleri), düzenleyici (PII/yerelleştirme) ve iş gereksinimleri dikkate alınarak verilir.
1) Mimariler: ETL vs ELT, parti vs akış
Extract - Transform - DWH'ye yüklemeden önce Load-Transforms. Dönüşümlerin "bulut'tan önce kontrollü bir ortam/sırlar gerektirdiği durumlarda uygundur.
ELT (Extract - Load - Transform): Lake/Lakehouse/DWH'deki hammaddeler, daha sonra SQL/motor (dbt/SQL betikleri). Sütun motorları ve esnek yinelemeler için uygundur.
Toplu iş: Zamanlanmış pencereler (her 5/15/60 dakikada, gece). Ucuz ve tahmin edilebilir.
Akış: почти gerçek zamanlı (Kafka ^ Flink/ksqlDB ^ OLAP). Gerçek zamanlıya yakın pencereler (5-60 saniye) ve dolandırıcılıkla mücadele/CRM sinyalleri için.
Hibrit: Bronz akışla doldurur, Gümüş/Altın - artımlı parti modelleri.
Öneri: IGaming'de ELT + akışını sürdürün: CDC/outbox üzerinden olaylar - Bronz (dakika tazeliği), Gümüş/Altın'daki artımlı dönüşümler.
2) Madalyon
Bronz (Ham): İş mantığı olmadan ham olaylar/CDC. Parke/ORC formatları, şemaları olduğu gibi, minimal doğrulama.
Gümüş (Uyumlu): temizleme, veri tekilleştirme, kimlik normalleştirme, boyut SCD, para birimi/saat dilimi birleştirme.
Altın (Mart): iş durumları (gerçekler/boyutlar, küpler), materyalize görünümler, ön toplamalar (günler/ülkeler/ürünler).
Artıları: tekrarlanabilirlik, şeffaf evrim, farklı SLO'lar ve TTL'ler katman katman.
3) Kaynaklar ve yükleme: CDC, giden kutusu, dosyalar
CDC (Change Data Capture): değişim OLTP'den (Postgres/MySQL) garantili sipariş ve idempotency ile akar.
Giden kutusu deseni: olaylar servis işlemindeki giden kutusu tablosuna/koleksiyonuna yazılır - bağlayıcı veri yoluna/göle yayınlar.
Dosya yükleme: PSP yüklemeleri, iş ortağı raporları; Manifestoları, sağlama toplamını ve alma dizinlerini kullanın.
Uygulamalar: Kaynaklar, her bir kaynak için (şema sürümü) - alanların ve kalite beklentilerinin bir sözleşmesi - versiyonlanır.
4) Orkestrasyon: DAG, bağımlılıklar, dağıtım
DAGs: explicit dependencies (raw - staging - dims - facts - marts).
Görev idempotensi: yan etkiler olmadan yeniden çalıştırma (partition-overwrite, 'MERGE'/upsert).
Ortamların ayrılması: Dev/Stage/Prod, eserlerin tanıtımı, pahalı dolgu için "manuel onay".
Zamanlama: cron/time pencereleri + olay tetikleyicileri (dosyaların/tarafların gelişine göre).
Sırlar: gizli yöneticiden; DAG kodunda sırların engellenmesi.
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) Veri kalitesi (DQ) ve soy
DQ kontrolleri: bütünlük (sayım, geç gelenler), anahtarların benzersizliği, aralıklar/etki alanı kuralları (tutar ≥ 0, dizindeki para birimi).
Tetikleme eşiği: tablonun kritikliğine bağlı olarak uyarı ile sert durdurma/yumuşak başarısız.
Soy/katalog: rapordan kaynağa (tablolar, sütunlar, metrikler), sahipler, belgeler, PII sınıflandırması.
Şema kontrolü: otomatik uyumluluk testleri (geri/ileri uyumlu), "kırma" değişiklikleri için uyarı.
6) Simülasyon: SCD, vekil anahtarlar, normalleştirme
Boyutlar için SCD2 'valid _ from/valid _ to/is _ current', vekil anahtar ('_ sk') ve doğal anahtardır ('_ id').
Küçük nitelikler için SCD1-Overwrites (örneğin, arabirim yerel ayarı).
Vekil anahtarlar: birleştirme için kararlı '_ sk', benzersizlik için doğal anahtarlar.
Boyut normalleştirme: hiyerarşilerin derin olduğu kar tanesi; Aksi takdirde hız için yıldız.
7) Artımlı modeller ve bölümleme
Filigran ('updated _ at', 'ingest _ ts'): yalnızca yeni/değiştirilmiş satırları okuyun.
Artımlı stratejiler: Işletme anahtarlarına göre 'BIRLEŞTIRME', lotlara göre 'ÜZERINE YAZMA EKLE', küçük lotlara göre 'DELETE + INSERT'.
Bölümleme: tarih/saat/bölgeye göre; Filtreleme ve birleştirme tuşları ile kümeleme (sıralama tuşları/Z-sırası).
Materyalize görünümler: GGR/NGR ön toplama, popüler bölümlerin önbelleği.
Yaklaşık birimler: Ucuz top-N vitrinler için HLL/approx_distinct.
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) Dolgu, yeniden işleme ve hikaye yönetimi
Dolgu: Kaynak sınırları ve pencereleri olan bireysel DAG'ler; açık bir "hakikat penceresi" (örn. 2024-01-01.. 2025-11-05).
Yeniden işleme: deterministik dönüşümler - tekrarlanan işler aynı sonucu verir. Model kodunun günlükleme sürümleri.
Zaman yolculuğu/tablo sürümleri: araştırmalar ve DR "mantıksal hatalar" için uygundur.
Geri çekme: Günlüğe kaydetme ile geri çekme (silme/düzeltme) ilkesi.
9) Konveyör CLO/SLA/SLO
Tazelik: Bronz ≤ 1-5 dk., Gümüş ≤ 15 dk., Altın ≤ 60 dk. (Örnek).
Güvenilirlik: DAG ≥ 99 geçiş oranı % x.
Performans: P95/p99 düğüm süresi; parti zamanı bütçesi.
Gecikme izleme: yutulan akışın gecikmesi, kuyruk derinliği, "geç veri" paylaşımı.
Uyarılar: Tazelik/hacim ihlali, DQ dosyaları, taramaların maliyetinde artış, MV'nin bozulması.
10) Maliyet: tahmin ve optimizasyon
Bölümler ve kümeler tarama hacmini en aza indirir.
Sıcak işaretleyicilerin maddeleştirilmesi (günler/ülkeler/ürünler).
Sık kullanılan gösterge tabloları için sonuç önbelleği/MV'leri.
Monitör yeniden başlatma frekansı (sebepsiz yere'her 5 dakikada bir "yok).
TTL: Agresif Bronz tutma, orta Gümüş, uzun Altın (sadece agregalar).
Kapasite planlaması: katalog metrikleri, turnuva/kampanya zirvelerinin tahmini.
11) Güvenlik, PII ve yerelleştirme
Veri sınıflandırması: PII/finansal/operasyonel.
Şifreleme: dinlenme ve geçiş sırasında; KMS/rol tabanlı erişim.
Kimlik tespiti: karma/maskeleme, anahtarlı ayrı sütunlar.
Çoklu kiracılık için RLS/kar fırtınaları ('tenant _ id'ile).
Lokalizasyon: Bölgelere göre depolama ve işleme alanları (EU/TR/LATAM); Yalnızca izin verilen yerlere ihracat yapın.
Denetim: kritik tablolara okur/yazar, dizin erişimi.
12) Gözlemlenebilirlik: metrikler, günlükler, izler
Boru hattı metrikleri: görev süresi, kuyruk, hatalar, retrays, işlenen bayt/satır, maliyet.
Günlükler: yapılandırılmış; 'trace _ id'/' run _ id' üzerindeki korelasyon.
İzleme: kaynaktan vitrine (ingest - transform - load - BI).
Panolar: katmanların tazeliği, DAG'lerin başarısı, en pahalı istekler, p95/p99.
13) Araçlar (rol ölçütleri)
Orkestrasyon: DAG orkestratörleri (zamanlayıcı, retrays, uyarılar, sırlar ile).
Dönüşümler: SQL modelleme ("kod olarak modeller"), modellerin birim testleri, dokümantasyon.
DQ/sözleşmeler: veri kümeleri üzerinde doğrulama çerçeveleri ve SLA'lar.
Lineage/Catalog: otomatik bağımlılık grafiği, sahibini bul.
Akış: pencere/toplama işlemcileri, lavabo/kaynak konnektörleri.
(Şirketin yığını ve güvenlik gereksinimleri için belirli satıcılar seçilir.)
14) Örnek şablonlar
GGR Vitrin Şablonu (Genel SQL)
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;
Artımlı filigranlı model
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
DQ kontrolleri (fikir)
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) Uygulama kontrol listesi
1. Metrik sözlüğünü (GGR/NGR/LTV/Retention) ve sahiplerini tanımlayın.
2. Bronz/Gümüş/Altın katmanları arasında SLO tazeliğini kaydedin.
3. Kaynak sözleşmeleri standartlaştırın (şemalar, DQ, SLA).
4. Idempotent adımlar ve izole edilmiş sırlarla bir DAG grafiği oluşturun.
5. Artımlılığı (MERGE/overwrite by party) ve filigranları uygulayın.
6. DQ (kritik/yumuşak kontroller), soy ve veri dizini ekleyin.
7. Gözlemlenebilirliği (metrikler, günlükler, izler) ve uyarıları ayarlayın.
8. Saklama/TTL ve geri doldurma/yeniden işleme politikasını girin.
9. PII denetimi, şifreleme, RLS ve yerelleştirme sağlayın.
10. Oyun gününü geçirin: Bir kaynak damlasının taklit edilmesi, şemaların "kırılması", kitlesel geri doldurma.
16) Antipatterns
"Her Şey İçin Bir Gece ETL", partiler ve artışlar olmadan.
DQ ve soy eksikliği - çelişkili raporlar ve hayalet avcılığı.
Her başlatmada tabloların tam revizyonu (maliyet patlaması).
Tamponlar/geri çekmeler olmadan gerçek zamanlı olarak sabit paket.
PII ve genel vitrinleri segmentasyon ve maskeleme olmadan harmanlama.
Geri çekme/silme politikası yok (hatalar düzeltilemez).
Özet
IGaming'deki sağlam analitik boru hattı, sert DQ/soy, artımlı modeller, şeffaf orkestratör ve ölçülebilir SLO'larla katmanlı bir modele ELT + akış yüklemesidir. Maliyet kontrolü, PII/yerelleştirme politikası, düzenli geri doldurma/DR alıştırmaları ekleyin; analitik platformunuz turnuva zirvelerine güvenilir bir şekilde ölçeklenecek ve işinize istenen tazelik ve kalitedeki verilerle yanıt verecektir.