Analitik və ETL konveyerləri
(Bölmə: Texnologiya və Infrastruktur)
Qısa xülasə
Analitik konveyer davamlı metrik vitrinlərə (GGR/NGR, LTV, retenshn, antifrod siqnalları) «xam» iGaming əməliyyat hadisələrini (dərəcələr, depozitlər, PSP vebhukları, oyun loqləri) çevirir. Dayaq prinsipləri: vahid təbəqə modeli (Bronze/Gümüş/Qızıl), DQ/lineage instrumental intizam, inkrementlik və idempotentlik, müşahidə və SLO, dəyər nəzarəti. Qərarlar yükün profili (turnirlərin zirvəsi), tənzimləyicilər (PII/lokalizasiya) və məlumatların təzəliyi üçün biznes tələbləri nəzərə alınmaqla qəbul edilir.
1) Memarlıq: ETL vs ELT, batch vs stream
ETL (Extract → Transform → Load): DWH download əvvəl transformasiya. Transformasiyaların "bulud 'a nəzarət edilə bilən mühit/sirr tələb etdiyi yerlərə uyğundur.
ELT (Extract → Load → Transform): Lake/Lakehouse/DWH xammal, sonra SQL/motor (dbt/SQL-script). Sütun mühərrikləri və çevik iterasiyalar üçün əlverişlidir.
Batch: planlı pəncərələr (hər 5/15/60 dəqiqə, nightly). Ucuz və proqnozlaşdırıla bilən.
Stream: почти real-time (Kafka → Flink/ksqlDB → OLAP). vitrinlər üçün near-real-time (5-60 saniyə) və antifrod/CRM siqnalları.
Hibrid: Bronze axınla doldurulur, Silver/Gold - inkremental batch modelləri.
Tövsiyə: iGaming-də ELT + axını saxlamaq: CDC/outbox → Bronze (dəqiqəlik təravət) vasitəsilə hadisələr, Silver/Gold-da inkremental transformasiyalar.
2) Laylı model (Medallion)
Bronze (Raw): İş məntiqi olmadan xam hadisələr/CDC. Parquet/ORC formatları, sxemlər olduğu kimi, minimum validasiya.
Silver (Conformed): təmizləmə, dekuplikasiya, identifikatorların normallaşdırılması, SCD ölçmələri, valyuta/saat zonalarının unifikasiyası.
Gold (Marts): iş vitrinləri (faktlar/ölçülər, kublar), materialized views, pre-aqreqasiya (günlər/ölkələr/məhsullar).
Artıları: reproduktivlik, şəffaf təkamül, müxtəlif SLO və TTL layları.
3) Mənbələr və yükləmə: CDC, outbox, fayllar
CDC (Change Data Capture): nizam və idempotentlik zəmanəti ilə OLTP (Postgres/MySQL) dəyişiklik axını.
Outbox-pattern: hadisələr Service → konnektor bir şin/göl dərc əməliyyat outbox cədvəl/kolleksiya qeyd.
Fayl yükləmə: PSP yükləmələri, tərəfdaşlıq hesabatları; manifestlər istifadə edin, cüt nəzarət (checksum) və qəbul kataloqları.
Təcrübələr: mənbələr version (schema version), hər bir mənbə üçün - sahələr və keyfiyyət gözləntiləri müqaviləsi.
4) Orkestrasiya: DAG, asılılıq, deploy
DAGi: açıq asılılıqlar (raw → staging → dims → facts → marts).
Missiyaların idempotentliyi: yan təsirsiz yenidən başlamaq (partition-overwrite, 'MERGE '/upsert).
Mühitin bölünməsi: Dev/Stage/Prod, artefaktların təşviqi, bahalı backfill üçün «əl qapısı» (manual approval).
Planlaşdırma: cron/vaxt pəncərələri + event-tetikleyicilər (fayllar/partiyalar gəldikdə).
Sirləri: gizli menecerdən; DAG kodunda sirlərin qadağan edilməsi.
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) Data keyfiyyəti (DQ) və lineage
DQ çekləri: doluluq (count, late arrivals), açarların unikallığı, diapazonlar/domen qaydaları (cəmi ≥ 0, referentdə valyuta).
Əməliyyat həddi: cədvəlin kritikliyindən asılı olaraq alert ilə sərt dayanma/yumşaq-fail.
Lineage/kataloq: reportdan mənbəyə (cədvəllər, sütunlar, metriklər), sahibləri, sənədləşmə, PII təsnifatı.
Sxemlərə nəzarət: avtomatik uyğunluq testləri (backward-/forward-compatible), «sındırıcı» dəyişikliklərə alert.
6) Modelləşdirmə: SCD, surrogate keys, normallaşdırma
Ölçmə üçün SCD2: 'valid _ from/valid _ to/is _ current', surrogate key ('_ sk') və natural açar ('_ id').
SCD1: əhəmiyyətsiz atributlar üçün yenidən yazma (məsələn, interfeys lokalı).
Surrogate keys: sabit '_ sk' join üçün, natural keys - unikallıq üçün.
Ölçmələrin normallaşdırılması: hiyerarxiyaların dərin olduğu yerlərdə snowflake; əks halda star sürət üçün.
7) Artım modelləri və partizan
Filigran ('updated _ at', 'ingest _ ts'): yalnız yeni/dəyişdirilmiş sətirləri oxumaq.
İnkremental strategiyalar: biznes açarları üzrə 'MERGE', partiyalar üzrə 'INSERT OVERWRITE', kiçik partiyalar üçün 'DELETE + INSERT'.
Partizanlaşdırma: tarix/saat/region üzrə; klaster (sort keys/Z-order) filtrasiya açarları və join.
Materiallaşdırılmış performans: GGR/NGR ön aqreqasiyası, populyar kəsiklərin önbelləyi.
Approx aqreqatları: ucuz vitrin top-N üçün 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) Backfill, reprocessing və tarixi idarə
Backfill: resurs limitləri və pəncərələri olan ayrı-ayrı DAGlar; aydın «həqiqət pəncərəsi» (məsələn, 2024-01-01.. 2025-11-05).
Reprocessing: determinated transformasiya → təkrar run eyni nəticə verir. Model kodu versiyalarının loqosu.
Time-travel/cədvəllər versiyası: araşdırmalar və DR «məntiqi səhvlər» üçün əlverişlidir.
Retraction: protokol ilə məlumatların geri çağırılması (silinməsi/düzəldilməsi) siyasəti.
9) CLO/SLA/SLO konveyer
Təravət (freshness): Bronze ≤ 1-5 dəq, Silver ≤ 15 dəq, Gold ≤ 60 dəq (nümunə).
Etibarlılıq: DAĞ ≥ 99 uğurlu qaçış faizi. x%.
Məhsuldarlıq: p95/p99 düyün uzunluğu; partiya üçün vaxt büdcəsi.
Lag monitorinq: ingest axını gecikməsi, xətlərin dərinliyi, pay «late data».
Alertlər: təravətin/həcmin pozulması, DQ-fayllar, skanların dəyərinin artması, MV deqradasiyası.
10) Qiymət: proqnozlaşdırma və optimallaşdırma
Partiyalar və klasterlər skanların həcmini minimuma endirir.
Qaynar markerlərin materiallaşdırılması (günlər/ölkələr/məhsullar).
Tez-tez istifadə olunan dashboard üçün/MVs cache nəticələri.
Yenidən başlamaq tezliyinə nəzarət (heç bir səbəb olmadan «hər 5 dəqiqə»).
TTL: aqressiv retenshn Bronze, orta gümüş, uzun qızıl (yalnız aqreqatlar).
Capacity planning: kataloq metrikləri, turnirlərin/kampaniyaların zirvələrinin proqnozu.
11) Təhlükəsizlik, PII və lokalizasiya
Məlumatların təsnifatı: PII/maliyyə/əməliyyat.
Şifrələmə: dinc və tranzit; KMS/rola əsaslanan giriş.
De-identifikasiya: hash/maskalama, açarları olan ayrı-ayrı sütunlar.
Çox tenantlıq üçün RLS/çubuqlar ('tenant _ id').
Lokalizasiya: regionlar üzrə saxlama və emal zonaları (EU/TR/LATAM); yalnız icazə verilən yerlərə ixrac.
Audit: kritik cədvəllərə oxunma/yazma, kataloqa giriş.
12) Müşahidə qabiliyyəti: metriklər, loqlar, treys
Konveyer metrikası: tapşırıqların müddəti, növbə, səhvlər, retralar, işlənmiş bayt/sətirlərin həcmi, dəyəri.
Log: strukturlaşdırılmış; 'trace _ id '/' run _ id' ilə korrelyasiya.
Trace: mənbədən vitrinə (ingest → transform → load → BI).
Daşbordlar: qatların təravəti, DAG-ların uğuru, ən bahalı sorğular, p95/p99.
13) Alətlər (rollar üzrə göstəricilər)
Orkestrasiya: DAG-orkestratorlar (planlayıcı, retralar, alertlər, sirlərlə).
Transformasiyalar: SQL-modelləşdirmə («kod kimi modellər»), vahid model testləri, sənədləşdirmə.
DQ/müqavilələr: audit çərçivələri və məlumat dəsti üçün SLA.
Lineage/kataloq: asılılıq qrafikinin avtomatik qurulması, sahibinin axtarışı.
Streaming: pəncərə/aqreqasiya prosessorları, sink/source konnektorları.
(Xüsusi satıcılar şirkət yığını və təhlükəsizlik tələbləri üçün seçilir.)
14) Nümunə nümunələri
GGR vitrin şablonu (ümumiləşdirilmiş 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;
«Su nişanlı» inkremental 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-yoxlama (ideya)
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) Giriş çek siyahısı
1. Metrik lüğəti (GGR/NGR/LTV/Retention) və sahiblərini müəyyən edin.
2. Bronze/Silver/Gold qatlarında SLO təravətini düzəldin.
3. Mənbə müqavilələrini (sxemlər, DQ, SLA) standartlaşdırın.
4. İdempotent addımları və təcrid olunmuş sirləri olan DAG qrafı qurun.
5. Inkrementallığı (MERGE/overwrite partisents) və «su işarələri» həyata keçirin.
6. DQ (kritik/yumşaq yoxlamalar), lineage və məlumat kataloqunu daxil edin.
7. Müşahidə qabiliyyətini (metriklər, loglar, treyslər) və alertləri konfiqurasiya edin.
8. Retenshn/TTL və backfill/reprocessing siyasətini daxil edin.
9. PII nəzarət, şifrələmə, RLS və lokalizasiya təmin edin.
10. Oyun gününü keçirin: mənbənin düşməsi, «sındırma» sxemləri, kütləvi backfill təqlidi.
16) Antipattern
«Bütün bir gecə ETL» heç bir partiya və inkrementallıq.
DQ və lineage → münaqişə hesabatları və «xəyal ovu» yoxdur.
Hər başlanğıcda cədvəllərin tam emalı (dəyər partlayışı).
Tamponlar/retrajlar olmadan real vaxt sərt bağlantı.
PII və ictimai vitrinləri seqmentasiya və maskalanmadan qarışdırın.
Retraction/silinmə siyasəti yoxdur (səhvləri düzəltmək mümkün deyil).
Nəticələr
iGaming-də davamlı analitik konveyer ELT + sərt DQ/lineage, inkremental modellər, şəffaf orkestrator və ölçülə bilən SLO ilə laylı modelə axın yükləməsidir. Dəyər nəzarətini, PII/lokalizasiya siyasətini, müntəzəm backfill/DR təlimlərini əlavə edin - və analitik platformanız etibarlı şəkildə turnir zirvələrinə doğru genişlənəcək, biznesə lazımi təzəlik və keyfiyyət məlumatları ilə cavab verəcəkdir.