GH GambleHub

Қубурҳои таҳлилӣ ва ETL

(Қисм: Технология ва инфрасохтор)

Хулосаи мухтасар

Лӯлаи таҳлилӣ чорабиниҳои амалиётии "хом" -и IGR (гаравҳо, амонатҳо, вебхукҳои PSP, гузоришҳои бозӣ) -ро ба намоиши устувори метрикӣ табдил медиҳад (GGR/NGR, LTV, нигоҳдорӣ, сигналҳои зидди қаллобӣ). Принсипҳои дастгирӣ: як модели қабати ягона (биринҷӣ/нуқра/тилло), интизоми инструменталии DQ/насл, афзоиш ва аблаҳӣ, мушоҳида ва SLO, назорати хароҷот. Қарорҳо бо назардошти профили сарборӣ (қуллаҳои мусобиқа), танзимкунанда (PII/маҳаллисозӣ) ва талаботи тиҷорат барои тозагии маълумот қабул карда мешаванд.

1) Меъморӣ: ETL vs ELT, партия vs ҷараён

Пеш аз бор кардан ба DWH, Extract → Transform → Transform-Transform. Мувофиқ он ҷое, ки дигаргуниҳо муҳити назоратшавандаро пеш аз "абр" талаб мекунанд.
ELT (Extract → Load → Transform): ашёи хом дар Лейк/Лейкхаус/DWH, баъд SQL/муҳаррик (скриптҳои dbt/SQL). Қулай барои муҳаррикҳои сутун ва такрори фасеҳ.
Гурӯҳ: тирезаҳои ба нақша гирифташуда (ҳар 5/15/60 дақиқа, шабона). Арзон ва пешгӯишаванда.
Ҷараён: pochti дар вақти воқеӣ (Kafka → Flink/ksqlDB → OLAP). Барои тирезаҳои вақти воқеӣ (5-60 сония) ва сигналҳои зидди қаллобӣ/CRM.
Гибрид: Биринҷӣ бо ҷараён пур мешавад, нуқра/тилло - моделҳои афзояндаи партия.

Тавсия: дар IGaming ҷараёни ELT + -ро нигоҳ доред: чорабиниҳо тавассути CDC/outbox → биринҷӣ (тару тозаи дақиқа), тағироти афзоянда дар нуқра/тилло.

2) Медали

Биринҷӣ (хом): Чорабиниҳои хом/CDC бидуни мантиқи тиҷорат. Форматҳои Parquet/ORC, схемаҳо, мисли санҷиши ҳадди аққал.
Нуқра (Мутобиқшуда): тозакунӣ, такрорӣ, нормализатсияи ID, андозагирии SCD, муттаҳидсозии минтақаи асъор/вақт.
Тилло (Мартҳо): парвандаҳои корӣ (далелҳо/андозаҳо, мукаабҳо), нуқтаи назари моддӣ, прегрегатсияҳо (рӯзҳо/кишварҳо/маҳсулот).

Тарафдор: такрористеҳсолкунӣ, таҳаввулоти шаффоф, SLO-ҳои гуногун ва TTL-ҳо аз рӯи қабат.

3) Манбаъҳо ва боркунӣ: CDC, outbox, файлҳо

CDC (Тағйир додани сабти маълумот): ҷараёни тағирот аз OLTP (Postgres/My

Намунаи Outbox: рӯйдодҳо ба ҷадвали/коллексияи outbox дар транзаксияи хидматрасонӣ § пайвасткунанда ба автобус/кӯл нашр карда мешаванд.
Боркунии файл: Боркунии PSP, гузоришҳои шарик; зуҳурот, санҷиш ва қабули феҳристҳоро истифода баред.

Амалияҳо: манбаъҳо санҷида мешаванд (нусхаи схема), барои ҳар як манбаъ - шартномаи майдонҳо ва интизориҳои сифат.

4) Оркестр: DAG, вобастагӣ, ҷойгиркунӣ

DAG-ҳо: вобастагии возеҳ (хом → марҳилавӣ → dims → facts → marts).
Idempotency вазифа: rerun бе таъсири тараф (қисмбандӣ-навиштан, 'MERGE '/upsert).
Ҷудосозии муҳитҳо: Dev/Stage/Prod, таблиғи артефактҳо, "тасдиқи дастӣ" барои баргардонидани гаронбаҳо.
Банақшагирӣ: тирезаҳои крон/вақт + триггерҳои ҳодиса (тибқи омадани файлҳо/тарафҳо).
Асрҳо: аз мудири махфӣ; манъ кардани асрори рамзи DAG.

Намунаи DAG абстрактӣ (псевдокод):
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) Сифати маълумот (DQ) ва насл

Санҷиши DQ: пуррагӣ (ҳисоб кардан, дер омадан), вижагии калидҳо, диапазонҳо/қоидаҳои домейн (маблағ ≥ 0, асъор дар феҳрист).
Ҳадди триггер: таваққуфи сахт/мулоим бо ҳушдор вобаста ба танқиди ҷадвал.
Насаб/каталог: аз гузориш то манбаъ (ҷадвалҳо, сутунҳо, ченакҳо), соҳибон, ҳуҷҷатгузорӣ, таснифи PII.
Назорати схема: санҷишҳои мутобиқати автоматӣ (қафо -/ба пеш мувофиқ), ҳушдор барои тағироти "шикастан".

6) Моделиронӣ: SCD, калидҳои суррогатӣ, нормализатсия

SCD2 барои андозаҳо 'дуруст _ аз/дуруст _ ба/аст _ ҷорӣ', калиди суррогатӣ ('_ sk') ва калиди табиӣ ('_ id') мебошанд.
SCD1-Overwrites барои хусусиятҳои хурд (масалан, маҳалли интерфейс).
Калидҳои суррогатӣ: '_ sk' барои пайвастшавӣ, калидҳои табиӣ барои беҳамто.
Меъёри андоза: барфпӯше, ки дар он иерархияҳо амиқанд; вагарна барои суръат ситора мешавад.

7) Моделҳои афзоянда ва тақсимот

Нишонаи обӣ ('updated _ at', 'infest _ ts'): танҳо хатҳои нав/тағирёфтаро хонед.
Стратегияҳои афзоянда: 'MERGE' бо калидҳои корӣ, 'INSERT OVERWRITE' аз рӯи қуръа, 'НЕСТ + INSERT' барои лотҳои хурд.
Тақсимот: аз рӯи сана/соат/минтақа; кластерӣ (ҷудо кардани калидҳо/Z-фармоиш) тавассути филтр ва ҳамроҳ кардани калидҳо.
Андешаҳои моддӣ: preaggregation GGR/NGR, кэши бахшҳои маъмул.
Воҳидҳои тақрибан: HLL/approx_distinct барои намоиши арзони боло-N.

Намунаи афзояндаи 'MERGE' (умумӣ):
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, коркард ва идоракунии ҳикояҳо

Backfill: DAG-ҳои инфиродӣ бо маҳдудиятҳои захираҳо ва тирезаҳо; як "равзанаи ҳақиқат" (масалан. 2024-01-01.. 2025-11-05).
Коркард: дигаргуниҳои детерминистӣ → даврҳои такрорӣ натиҷаи якхела медиҳанд. Версияҳои сабти рамзи модел.
Версияҳои вақт-сафар/ҷадвал: барои тафтишот ва DR "хатогиҳои мантиқӣ" мувофиқанд.
Бозсозӣ: сиёсати бозпас гирифтан (нест кардан/ислоҳ кардан) бо сабти ном.

9) Конвейер CLO/SLA/SLO

тару тоза: биринҷӣ ≤ 1-5 дақ, нуқра ≤ 15 дақ, тилло ≤ 60 дақ (мисол).
Эътимоднокӣ: DAG ≥ 99 дараҷаи гузариш x%.
Иҷро: давомнокии гиреҳи p95/p99; буҷети вақти ҳизбӣ.
Мониторинги ақибмонӣ: ақибмонии ҷараёни воридшаванда, умқи навбат, ҳиссаи "маълумоти дер".
Огоҳиҳо: вайрон кардани тару тоза/ҳаҷм, файлҳои DQ, афзоиши арзиши сканҳо, таназзули MV.

10) Арзиш: пешгӯӣ ва оптимизатсия

Қисмҳо ва кластерҳо ҳаҷми сканро кам мекунанд.
Материализатсияи аломатҳои гарм (рӯзҳо/кишварҳо/маҳсулот).
Натиҷаҳо кэш/MV барои панелҳои зуд-зуд истифодашаванда.
Мониторинги басомади бозоғозӣ (бе ягон сабаб "ҳар 5 дақиқа").
TTL: нигоҳдории хашмгинонаи биринҷӣ, нуқраи миёна, тиллои дароз (танҳо агрегатҳо).
Банақшагирии қобилият: ченакҳои каталог, пешгӯии қуллаҳои мусобиқа/маъракаҳо.

11) Бехатарӣ, PII ва маҳаллисозӣ

Таснифи маълумот: PII/молиявӣ/амалиётӣ.
Рамзгузорӣ: ҳангоми истироҳат ва транзит; Дастрасии KMS/нақш.
Муайянкунии муайян: хэш/ниқоб, сутунҳои алоҳида бо калидҳо.
RLS/борон барои бисёрҳуҷрагӣ (аз ҷониби 'иҷорагир _ ид').
Маҳаллисозӣ: минтақаҳои нигоҳдорӣ ва коркард аз рӯи минтақа (EU/TR/LATAM); содирот танҳо ба ҷойҳои иҷозатдодашуда.
Аудит: ба ҷадвалҳои интиқодӣ мехонад/менависад, дастрасии феҳрист.

12) Мушоҳидаҳо: ченакҳо, гузоришҳо, роҳҳо

Андозагирии қубур: давомнокии вазифа, навбат, хатогиҳо, бозхонд, байт/сатр коркард, арзиш.
Гузоришҳо: сохторӣ; таносуб дар 'trace _ id '/' run _ id'.
Пайгирӣ: аз манбаъ то намоиш (instest → transform → load → BI).
Панели панелҳо: тару тозаи қабатҳо, муваффақияти DAG-ҳо, дархостҳои гаронбаҳо, p95/p99.

13) Асбобҳо (нишондиҳандаҳои нақш)

Оркестр: Оркестри DAG (бо нақшакашӣ, бозсозӣ, огоҳӣ, асрори).
Тағирот: Моделсозии SQL ("моделҳо ҳамчун код"), санҷишҳои воҳиди моделҳо, ҳуҷҷатгузорӣ.
DQ/шартномаҳо: чаҳорчӯбаи тасдиқкунӣ ва SLA-ҳо дар маҷмӯаҳо.
Lineage/Каталог: графикаи вобастагии худкор, соҳиби пайдо кунед.
Ҷараён: протсессори равзана/агрегатсия, пайвасткунакҳои ғалтак/манбаъ.

(Фурӯшандагони мушаххас барои талабот ба анбор ва амнияти ширкат интихоб карда мешаванд.)

14) Намунаҳои намуна

Қолаби намоиши GGR (Generic 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;

Модели афзояндаи обӣ

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 (идея)

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) Рӯйхати назорати амалисозӣ

1. Луғати ченакҳоро муайян кунед (GGR/NGR/LTV/Нигоҳ доштан) ва соҳибон.
2. Тару тозаи SLO-ро дар қабатҳои биринҷӣ/нуқра/тиллоӣ сабт кунед.
3. Стандартикунонии шартномаҳои манбаъ (схемаҳо, DQ, SLA).
4. Сохтани графикаи DAG бо қадамҳои номуайян ва сирри ҷудогона.
5. Татбиқи афзоиш (MERGE/roverrite by party) ва нишонаҳои обӣ.
6. Дохил кардани DQ (санҷишҳои интиқодӣ/нарм), насаб ва феҳристи маълумот.
7. Танзими мушоҳидаҳо (ченакҳо, гузоришҳо, роҳҳо) ва огоҳиҳо.
8. Сиёсати нигоҳдорӣ/TTL ва backfill/коркард ворид кунед.
9. Таъмини назорати PII, рамзгузорӣ, RLS ва маҳаллисозӣ.
10. Рӯзи бозиро гузаронед: тақлид кардани тарки манбаъ, нақшаҳои "шикастан", пур кардани омма.

16) Антипаттернҳо

"Як шаб ETL барои ҳама чиз" бидуни зиёфат ва афзоиш нест.
Набудани DQ ва насл → гузоришҳои ихтилофӣ ва шикори арвоҳ.
Таҷдиди пурраи ҷадвалҳо ҳангоми ҳар як парвоз (таркиши арзиш).
Бастаи сахт дар реҷаи вақти воқеӣ бе буферҳо/кашишҳо.
Омезиши PII ва мағозаҳои ҷамъиятӣ бидуни тақсимот ва ниқоб.
Ягон сиёсати бозхонд/несткунӣ (хатогиҳо ислоҳ карда намешаванд).

Хулоса

Лӯлаи мустаҳками таҳлилӣ дар I Gaming ин ELT + ҷараёни боркунӣ ба модели қабати бо DQ/наслҳои сахт, моделҳои афзоянда, оркестри шаффоф ва SLO-ҳои андозагирифташуда мебошад. Назорати хароҷот, сиёсати PII/маҳаллисозӣ, машқҳои мунтазами бозгашт/DR - ва платформаи таҳлилии шумо ба қуллаҳои мусобиқа боэътимод миқёс дода, ба тиҷорат бо маълумоти тару тоза ва сифати дилхоҳ посух медиҳад.

Contact

Тамос гиред

Барои саволҳо е дастгирӣ ба мо муроҷиат кунед.Мо ҳамеша омодаем!

Оғози интегратсия

Email — муҳим аст. Telegram е WhatsApp — ихтиерӣ.

Номи шумо ихтиерӣ
Email ихтиерӣ
Мавзӯъ ихтиерӣ
Паем ихтиерӣ
Telegram ихтиерӣ
@
Агар Telegram нависед — ҷавобро ҳамон ҷо низ мегиред.
WhatsApp ихтиерӣ
Формат: рамзи кишвар + рақам (масалан, +992XXXXXXXXX).

Бо фиристодани форма шумо ба коркарди маълумот розӣ ҳастед.