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ı.
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.
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.
- Idempotency (MERGE/upsert), aralıklar, kotalar, metrik karşılaştırma ile kuru çalışma.
- Sonucun işaretlenmesi: 'recalc _ reason', 'logic _ version', 'repocessed _ at'.
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
-- 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.
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 ')').
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.
- "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.