GH GambleHub

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.

Mücərrəd DAG (psevdokod) nümunə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.

«MERGE» inkremental nümunəsi (ümumiləşdirilmiş):
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.

Contact

Bizimlə əlaqə

Hər hansı sualınız və ya dəstək ehtiyacınız varsa — bizimlə əlaqə saxlayın.Həmişə köməyə hazırıq!

İnteqrasiyaya başla

Email — məcburidir. Telegram və ya WhatsApp — istəyə bağlıdır.

Adınız istəyə bağlı
Email istəyə bağlı
Mövzu istəyə bağlı
Mesaj istəyə bağlı
Telegram istəyə bağlı
@
Əgər Telegram daxil etsəniz — Email ilə yanaşı orada da cavab verəcəyik.
WhatsApp istəyə bağlı
Format: ölkə kodu + nömrə (məsələn, +994XXXXXXXXX).

Düyməyə basmaqla məlumatların işlənməsinə razılıq vermiş olursunuz.