GH GambleHub

Geçmiş Verilerle Çalışma

1) Amaç ve prensipler

Amaç: Geçmiş durumları saklayın ve işleyin, böylece raporlar, modeller ve araştırmalar tekrarlanabilir, doğru ve uyumlu olur.

İlkeler:
  • Zamana duyarlı tasarım-Şemalarda ve sorgularda açık zaman modelleri.
  • Tekrarlanabilirlik: D tarihi için aynı rapor her zaman aynı sonucu verir.
  • Denetlenebilirlik: soy, değişmez katmanlar, gerektiğinde WORM'ler.
  • Maliyet bilincine sahip: arşiv katmanları, sıkıştırma, anlaşılabilir SLA'lara sahip soğuk depolama.
  • Privacy-by-design: Geriye dönük işlemler ve yasal talepler için PII yönetimi.

2) Zaman modelleri

Olay zamanı: Gerçek olayın zamanı (oran, depozito).
Sistemin kaydı işlediği işlem süresi (farklılık gösterebilir).
Bitemporal: Geriye dönük düzenlemeler için hem olay hem de işlem zamanını depolamak.
Geçerlilik aralıkları: 'valid _ from', 'valid _ to', 'is _ current'.

Sorgular olarak: veri örneklemesi "T zamanında bildikleri gibi"

Alan şablonu:
sql event_time TIMESTAMP, -- event time processed_at TIMESTAMP, -- TIMESTAMP valid_from processing time, -- start of version validity valid_to TIMESTAMP, -- end of validity (NULL if current)
is_current   BOOLEAN

3) Depolama katmanları ve formatları

Lakehouse: Bronz (yalnızca ham ekleme) - Gümüş (temiz/SCD/normalleştirme) - Altın (vitrinler).
ACID- форматы: Delta/Iceberg/Hudi (MERGE/Upsert, zaman yolculuğu, anlık görüntüler).
Katmanlı depolama: Düzenleyici eserler için sıcak/sıcak/soğuk + WORM.
Bölümleme: 'event _ date', 'market', 'tenant'; Kümeleme/Z-sipariş sık yüklemeler tarafından (kullanıcı/oyun/sağlayıcı).

4) Ölçüm Geçmişi (SCD)

SCD I: üzerine yaz - kritik olmayan düzenlemeler için.
SCD II: tam hikaye; RG/KYC/trafik kanalları/oyun özellikleri için önerilir.
SCD III:'önce/sonra "- nadir karşılaştırma durumları.

Örnek SCD II:
sql
MERGE INTO dim. users_scd t
USING stage. users u
ON t. user_pseudo_id = u. user_pseudo_id AND t. is_current = TRUE
WHEN MATCHED AND (t. rg_status <> u. rg_status OR t. country <> u. country) THEN
UPDATE SET is_current = FALSE, valid_to = CURRENT_TIMESTAMP
WHEN NOT MATCHED THEN
INSERT (user_pseudo_id, country, rg_status, valid_from, valid_to, is_current)
VALUES (u. user_pseudo_id, u. country, u. rg_status, CURRENT_TIMESTAMP, NULL, TRUE);

5) Gerçek hikaye: anlık görüntüler ve bitemporal

Anlık görüntüler: Gün sonu/ay toplamlarının anlık görüntüsü (cüzdan bakiyesi gibi) - geçmiş raporların yeniden oluşturulmasını hızlandırır.
Bitemporal gerçekler: Geç düzeltmeleri geriye dönük hesaplamalardan ayırmak için olay zamanı ve işleme zamanını düzelt.
Tam olarak bir kez geçmiş: 'event _ id' + idempotent MERGE tarafından dedup.

6) Zaman yolculuğu ve tekrarlanabilirlik

Zaman yolculuğu: hata ayıklama, olaylar, mutabakatlar için "T zamanında" tabloları okumak.
Mantık sürüm oluşturma: çıktı tablolarında dönüştürme dışlayıcıları (SQL/DBT sürümleri, kapsayıcılar) ve "logic_version" etiketleri.
Dondurulmuş çıktılar: Altın raporlama eserleri yakalanır ve yeniden yazılmaz, hash ve ihracat günlüğü mevcuttur.

Talep örneği:
sql
SELECT
FROM silver. fact_bets VERSION AS OF 1678901234567
WHERE event_date = DATE '2025-10-31';

7) Dolgu и Yeniden işleme

Backfill: Birincil/ön yükleme geçmiş aralığı.
Yeniden işleme: Hataları düzelttikten veya iş kurallarını değiştirdikten sonra yeniden hesaplama.

Gardereils:
  • Idempotency (MERGE/upsert), aralıklar, kotalar, metrik karşılaştırma ile kuru çalışma.
  • Sonucun işaretlenmesi: 'recalc _ reason', 'logic _ version', 'repocessed _ at'.
Runbook:

1. Mevcut Altını dondurun; 2) DLQ/DQ doğrulaması; 3) Gümüş koşu; 4) metriklerin karşılaştırılması; 5) Altın yeniden inşa; 6) Yayın ve imza.

8) Uzlaşma

Checksums: satış hacimlerinin/miktarlarının OLTP, PSP/sağlayıcılar ile mutabakatı.
Döngü kontrolü: numune üzerinde bağımsız boru hattı (A/B karşılaştırması).
GGR ≤ 0 tutarsızlığı gibi toleranslar. Günlük %2.

SQL örnekleri:
sql
-- Duplicates
SELECT transaction_id, COUNT() c
FROM silver. payments
GROUP BY transaction_id
HAVING COUNT() > 1;

-- Unknown Currencies/Markets
SELECT p. currency
FROM silver. payments p
LEFT JOIN ref. currencies r ON r. code = p. currency
WHERE r. code IS NULL;

9) Para birimleri, zaman, takvim: tarihsel doğruluk

Olay tarihinde FX: fix 'fx _ rate _ used've' fx _ source '.
Yerel Piyasa Saati: Takvim Dizini aracılığıyla DST/Zaman Dilimleri.
Tatiller/mevsimsellik: modellerde ve raporlarda kullanılan ayrı bir takvim tablosu.

FX normalleştirme örneği:
sql
SELECT p. transaction_id,
p. amount_orig,
r. rate AS fx_rate_used,
p. amount_orig r. rate AS amount_base,
r. fx_source
FROM bronze. payment_events p
JOIN dim. fx_rates r
ON r. date = DATE(p. event_time) AND r. ccy_from = p. currency AND r. ccy_to = 'EUR';

10) PII, Uyumluluk ve Yasal Bekletme

PII minimizasyonu: takma ad, ayrı korumalı eşleme.
DSAR/RTBF: hesaplanabilir projeksiyonlar ve tarihsel katmanların seçici düzenlemeleri; Yasal depolama istisnaları belgelenmiştir.
Yasal Tutma: aralıklar/nesneler üzerinde "dondurma" silme bayrakları, raporlanabilir eserler için WORM.
Denetim: değişmez erişim ve dışa aktarma günlükleri.

11) Tarih için DQ ve soy

DQ-as-code (örnek):
yaml table: silver. fact_bets slo:
completeness_percent: 99. 5 freshness_minutes: 60 rules:
- name: unique_bet type: unique columns: [bet_id]
severity: critical
- name: market_known type: in_set column: market set_ref: ref. markets
- name: ts_in_range type: temporal expression: "event_time BETWEEN date_sub(now(), interval 5 year) AND now()"

Lineage: girdilerin/dönüşümlerin/çıktıların sürümlerini düzeltmek; Retroformasyonlar için bağımlılık grafiği gereklidir.

12) Performans ve maliyet

Bölümleme: tarihe/pazara/kiracıya göre; Sık sık filtre uygularsak, 'user _ pseudo _ id'/' game _ id'ile agresif kümeleme.
Formatlar: Parke + istatistik/sıkıştırma; Düzenli vakum/optimize.
Materyalizasyon: "pahalı" tarihsel toplamalar için ön hesaplama; Üç aylık/yıllık raporlama için anlık görüntüler.
Arşivleme: Eski yığınları soğuk depoya dönüştürme (kurtarma için SLA'lar belgelenmiştir).
Örnekleme: sadece araştırma görevleri için, düzenleme/finans için değil.

13) ML için Tarihsel Özellikler

Özellik kaydı: Her özelliğin bir formülü, sahibi, SLO, 'model _ sürüm' vardır.
Çevrimiçi/çevrimdışı tutarlılık: bir dönüşüm kod tabanı, tekrarlanabilirlik testleri.
Karakteristik sürüklenme: Döneme göre PSI/KS, tarihsel dağılımların depolanması.

14) Sorgu desenleri

As-of: raporların tekrarlanabilirliği.
Kohort analizi: kayıtların kohortları/ilk depozitler, yuvarlanan pencereler.
Yavaş değişen gerçekler: корректные join'ы с SCD II ('event _ time BETWEEN valid_from AND COALESCE (valid_to,' 9999-12-31 ')').

SCD II ile join'a örneği:
sql
SELECT b. bet_id, u. rg_status
FROM silver. fact_bets b
JOIN dim. users_scd u
ON u. user_pseudo_id = b. user_pseudo_id
AND b. event_time >= u. valid_from
AND (u. valid_to IS NULL OR b. event_time < u. valid_to);

15) Süreçler ve RACI

R (Sorumlu): Veri Mühendisliği (modeller/SCD/dolgu), Veri Platformu (ACID/arşiv), Finans/Uyumluluk (mutabakatlar/depolama gereksinimleri).
A (Sorumlu): Veri/CDO Başkanı.
C (Consulted): Yasal/DPO (DSAR/RTBF/Yasal Bekletme), SRE (maliyet/SLA), Mimari.
I (Bilgilendirilmiş): BI/Ürün/Pazarlama/Operasyonlar.

16) Uygulama Yol Haritası

MVP (3-5 hafta):

1. Zaman yolculuğu (Delta/Iceberg/Hudi) ve temel bölümleme ile ACID tabloları.

2. Önemli boyutlar için SCD II (kullanıcılar/oyunlar/sağlayıcılar).

3. Kritik agregaların günlük anlık görüntüleri (GGR Daily).

4. DQ-as-code (uniqueness/in_set/temporal) + lineage-graph.

Faz 2 (5-10 hafta):
  • Bitemporal gerçekler, API/SQL şablonları, runbooks backfill/yeniden işleme.
  • FX/takvim/DST-zenginleştirme, OLTP↔DWH/provaydery mutabakatlar.
  • Soğuk depolama arşivleme, paketleri bildirmek için WORM, Yasal Bekletme.
Faz 3 (10-16 hafta):
  • "Replay & what-if", metriklerin karşılaştırılması ve regresyon uyarılarının tam otomasyonu.
  • Tarihsel özellikler ve sürüklenme kontrolü ML, depolama maliyetinde geri ödeme.
  • Dokümantasyon "as-of" metrikleri ve tekrarlanabilir raporlar.

17) Satış öncesi kontrol listesi

  • Tablolar zaman yolculuğunu destekler; VAKUM/TUTMA politikaları tutarlıdır.
  • SCD II kritik ölçümler için uygulanır; Join test edildi.
  • D/M'deki anahtar birimlerin resimleri mevcuttur ve ışıltılarla kontrol edilir.
  • DQ kuralları aktiftir; Lineage, giriş/çıkışları ve mantık sürümlerini görüntüler.
  • DSAR/RTBF/Legal Hold tarihsel katmanlar üzerinde test edilmiştir.
  • Soğuk depolama arşivleme ve kurtarma belgelenmiş ve doğrulanmıştır.
  • Maliyet/GB, soğuk pay, kurtarma SLA

18) Sık yapılan hatalar ve bunlardan nasıl kaçınılacağı

Açık bir zaman modeli yok: olay/işleme/geçerlilik ekleyin.
FX "retroactive": her zaman olay sırasındaki kurs, 'fx _ source' depolayın.
SCD ile geçersiz birleştirme: 'is _ current'değil, geçerlilik aralığını kullanın.
Mutasyona uğrayan Altın vitrinler: raporlanabilir çıktılar değişmez (veya sürümlü) olmalıdır.
Soy/DQ yok: kanıtlanabilirlik ve kontrol noktaları yok - onları ilk günden girin.
Yönetilemez maliyet: sıcak partileri kapatın, vakumlu, soğuğa dönüştürün.

19) Sözlük

As-of Query - veri isteği "T. zamanında baktıkları gibi"

Bitemporal - olayın eşzamanlı fiksasyonu ve işlem süresi.
Snapshot: Dönem sonunda durum/kümelerin materyalize edilmiş anlık görüntüsü.
Zaman yolculuğu - tabloların tarihsel versiyonlarını okumak.
WORM - Bir Kez Yaz Çok Oku.

20) Alt satır

Geçmiş verilerle çalışmak sadece "uzun depolama'değil, zaman disiplinidir: açık olay/işleme/bitemporal, SCD ve anlık görüntüler modelleri, istek olarak tekrarlanabilir, titiz mutabakatlar ve uyumluluk kontrolleri, gözlemlenebilirlik ve uygun maliyetli bir depolama mimarisi. Bu kılavuzu izleyerek, denetim ve iş mantığındaki değişikliklere dayanıklı raporlama, analitik ve ML için sağlam bir tarihsel temele sahip olacaksınız.

Contact

Bizimle iletişime geçin

Her türlü soru veya destek için bize ulaşın.Size yardımcı olmaya her zaman hazırız!

Telegram
@Gamble_GC
Entegrasyona başla

Email — zorunlu. Telegram veya WhatsApp — isteğe bağlı.

Adınız zorunlu değil
Email zorunlu değil
Konu zorunlu değil
Mesaj zorunlu değil
Telegram zorunlu değil
@
Telegram belirtirseniz, Email’e ek olarak oradan da yanıt veririz.
WhatsApp zorunlu değil
Format: +ülke kodu ve numara (örneğin, +90XXXXXXXXX).

Butona tıklayarak veri işlemenize onay vermiş olursunuz.