GH GambleHub

Равандҳои ETL/ELT

1) Мақсад ва контекст

Қубурҳои ETL/ELT боркунии пешгӯишаванда, тағирот ва нашри маълумотро барои гузориш (GGR/NGR, танзимгарон), таҳлил/ML ва панелҳои амалиётӣ таъмин мекунанд.

ETL: пеш аз бор кардан ба DWH/Lakehouse табдил диҳед (камтар дар стекҳои муосир).
ELT: аввал ба Lakehouse (биринҷӣ/нуқра) бор кунед, баъд SQL/муҳаррикҳоро табдил диҳед (тавсия дода мешавад).

2) Меъмории истинод

1. Instest/Edge: HTTP/GRPC/Batch, CDC аз OLTP, провайдери боргузорӣ S3/FTP.
2. Биринҷӣ (хом, танҳо замима): бори гарони тағйирнопазир, ҳизбҳо аз рӯи сана/бозор/иҷорагир.
3. Нуқра (тоза/мувофиқат): нормализатсия, тарҳ, феҳристҳо, SCD, FX/вақтҳо.
4. Тилло (хизмат): дӯконҳои ғайримуқаррарӣ барои BI/танзимкунанда/моделҳо.
5. Оркестр: Airflow/Dagster/Prefect (DAG 'i, SLA, Retrai, Shifts).
6. DQ/Шартномаҳо: Феҳристи схема + DQ-kak-kod, санҷишҳои истеъмолкунандагон.
7. Мушоҳида: ченакҳои қубур, насл, гузоришҳо, панели хароҷот.

3) интихоби ETL vs ELT

МеъёриETLELT (тавсия дода мешавад)
Тағйирпазирии тақсимотпастбаланд (вақти сафар, коркард)
Арзишҳангоми афзоиш гаронтар астоптималӣ ҳангоми миқёс
Назорати сифатдар бораи inestба Silver/Gold + DQ-as-code
Таърих/криминалистикамаҳдудпурра (Танҳо замимаи биринҷӣ)

Амалия: дар IGaming - ELT + CDC: зуд бор кунед, пас стандартизатсия кунед ва ҳисоб кунед.

4) Афзоиш ва CDC

Равишҳои Delta:
  • CDC (нусхабардории Debezium/log): OLTP тағир меёбад → биринҷӣ → MERGE дар нуқра.
  • Аломати обӣ аз рӯи вақт: 'updated _ at> max_loaded_ts'.
  • Hash diff: 'md5 (сатр)' муқоиса барои муайянкунии тағирот.
  • Upsert/MERGE: номутобиқатии зеркашиҳо.
Намунаи MERGE (Delta/Iceberg):
sql
MERGE INTO silver. payments s
USING stage. payments_delta d
ON s. transaction_id = d. transaction_id
WHEN MATCHED THEN UPDATE SET
WHEN NOT MATCHED THEN INSERT;

5) Шартномаҳо ва нақшаҳо

Схема-аввал: JSON/Avro/Protobuf дар Феҳрист; 'schema _ version' дар рӯйдодҳо/файлҳо.
Эволютсия: бозгашт мувофиқ (иловаҳои беэътибор); шикастан - '/v2 '+ вуруди дугона.
Майдонҳои зарурӣ 'event _ time (UTC)', 'event _ id', 'trace _ id', 'user _ pseudo _ id', 'бозор' мебошанд.

6) DQ-as-code (маҷмӯи ҳадди аққал)

yaml table: silver. payments owner: data-payments slo:
freshness_minutes: 15 completeness_percent: 99. 5 rules:
- name: unique_tx # uniqueness of transactions type: unique columns: [transaction_id]
severity: critical
- name: currency_whitelist type: in_set column: currency set: [EUR,USD,GBP,TRY,BRL]
severity: major
- name: amount_positive type: range column: amount_base min: 0. 01 severity: critical
- name: fk_user type: foreign_key column: user_pseudo_id ref_table: dim. users_scd severity: critical

7) Оркестр: DAG 'ва, вобастагӣ, SLA

Тарҳи DAG: аз манбаъҳо то дӯконҳо; вобастагии возеҳ байни вазифаҳо.
Retrai ва idempotence: бозгашт, такрори "тоза", гузаргоҳҳо.
Catchup: сайди тозаи давраҳои партофташуда.
SLA: Масалан, тилло. ҳамарӯза пеш аз соати 06:00 ба вақти маҳаллӣ омода аст; огоҳӣ дар бораи қонунвайронкуниҳо.
Параметри: бозорҳо/иҷорагирон/санаҳо тавассути вариантҳо; як қолаби ягонаи корӣ.

8) Idempotence ва маҳз як-як

Ҳангоми ворид кардан: нусхабардорӣ аз рӯи '(event_id, манбаъ) имконпазир аст.
Ҳангоми коркард: upsert/merge; функсияҳои табдилдиҳии "пок".
Дар танӯр: супоришҳои транзаксионӣ ё idempotent менависанд; назорати "ҳисобкунии дукарата".
Outbox/Inbox: нашри транзаксионии рӯйдодҳои домейн аз OLTP.

9) Backfill i коркард

Backfill: диапазонҳои ибтидоии пуркунӣ/таърихӣ.
Коркард - ҳисобкунии дубора ҳангоми тағир додани мантиқ/ислоҳ.
Муҳофизаҳо: маҳдудиятҳои диапазон, квотаҳо, тирезаҳои вақт, хушккунӣ бо муқоисаи метрӣ.
Ишора: 'мантиқ _ версия', 'коркард _ at', 'recalc _ reason'.

10) Моделсозии нуқра/тиллоӣ

Силвер (3NF/BCNF): далелҳои 'fact _ bets/пардохтҳо/пардохтҳо', андозаҳои 'dim _ users/бозиҳо/провайдерҳо/бозорҳо (SCD II)', стандартикунонии асъор/вақтҳо.
Тилло: дӯконҳои ғайримуқаррарӣ барои BI/танзимкунанда/моделҳо; бастаҳои содиротии тағйирнопазир (WORM) + имзо.

Намунаи тилло: GGR Daily

sql
CREATE OR REPLACE VIEW gold. ggr_daily AS
SELECT
DATE(b. event_time) AS event_date,
b. market,
g. provider_id,
SUM(b. stake_base) AS stakes_eur,
SUM(p. amount_base) AS payouts_eur,
SUM(b. stake_base) - SUM(p. amount_base) AS ggr_eur
FROM silver. fact_bets b
LEFT JOIN silver. fact_payouts p
ON p. user_pseudo_id = b. user_pseudo_id
AND p. game_id = b. game_id
AND DATE(p. event_time) = DATE(b. event_time)
JOIN dim. games g ON g. game_id = b. game_id
GROUP BY 1,2,3;

11) Махфият ва иқомат

Кам кардани PII: токенизатсия; харитасозии шаҳодатномаҳои воқеӣ дар ҳалқаи ҷудошуда.
RLS/CLS: сиёсати дастрасӣ аз рӯи нақш/қаламрав, ниқоб.
Резидентура: феҳристҳо/калидҳои алоҳида барои EEA/UK/BR; манъ кардани ҳамроҳшавии байниминтақавӣ бе сабаб.
DSAR/RTBF & Hold Legal: таҳрирҳои интихобӣ, бойгонии WORM барои ҳисоботдиҳӣ, аудити содиротӣ.

12) Мушоҳида ва SLO

Нишондиҳандаҳои SLI/SLO:
  • Тару тоза нуқра p95 ≤ 15 дақ; Ҳар рӯз тилло то соати 06:00 баста мешавад. вақт.
  • Пуррагӣ ≥ 99. 5%, Эътибор (схема) ≥ 99. 9%.
  • Муваффақияти ҷойҳои корӣ ≥ 99. 0%, ҳодисаҳои MTTR ≤ 24-48 соат.

Панели панелҳо: Харитаи гармидиҳӣ, харитаи талафоти DQ, арзиш/дархост ва арзиш/ГБ, графикаи насл.

13) Иҷро ва арзиши

Тақсимот: сана/бозор/иҷорагир; кластерӣ/Z-фармоиш аз ҷониби филтрҳо.
Форматҳо: Parquet + ACID (Delta/Iceberg/Hudi), фишурдасозӣ ва омор.
Фишурдасозӣ: мубориза бо файлҳои хурд (OPTIMIZE/VACUUM).
Материализатсия: агрегатҳои устувор; канорагирӣ кунед.
Баргардонидани маблағ: буҷетҳо, квотаҳои такрорӣ/backfill; банақшагирӣ дар тирезаҳои сарбории кам.

14) Намунаҳои вазифаҳои маъмулии DAG (псевдокоди ҳавоӣ)

python with DAG("elt_payments_daily", schedule="@daily", start_date=..., catchup=True) as dag:
extract = BashOperator(task_id="extract_cdc", bash_command="run_cdc_to_bronze. sh {{ ds }}")
load  = BashOperator(task_id="load_to_silver", bash_command="sql/run_merge_silver. sql {{ ds }}")
dq   = BashOperator(task_id="dq_checks", bash_command="dq/run_checks. sh silver. payments {{ ds }}")
gold  = BashOperator(task_id="build_gold_ggr", bash_command="sql/build_gold_ggr. sql {{ ds }}")
export = BashOperator(task_id="export_regulator", bash_command="export/run_worm_pack. sh {{ ds }}")

extract >> load >> dq >> gold >> export

15) Равандҳо ва RACI

R (Масъул): Муҳандисии маълумот (DAG, моделҳои нуқра/тиллоӣ), Платформаи маълумот (инфра, регистр, DQ).
A (Ҳисоботдиҳанда): Роҳбари маълумот/CDO.
C (Машварат): Мутобиқат/Ҳуқуқӣ/DPO (PII/истиқомат/Нигоҳдории ҳуқуқӣ), Молия (FX/GGR), Хавф (RG/AML), SRE (SLO/stoimostel).
I (Маълумот): BI/Маҳсулот/Маркетинг/Амалиёт.

16) Харитаи роҳсозӣ

MVP (3-5 ҳафта):

1. Lakehouse биринҷӣ/нуқра (ACID) + CDC/афзоиш барои пардохт/бозӣ.

2. DQ-like-code (қоидаҳои 10-15) ва панелҳои асосии Freshness/пуррагӣ.

3. Аввалин намоиши тиллоӣ (GGR Daily) бо SLA "то соати 06:00", содироти WORM бо имзо.

4. DAG ва оркестри ҳушдор дар SLA/DQ.

Марҳилаи 2 (5-10 ҳафта):
  • Тамдиди домейн, SCD II барои корбарон/бозиҳо/провайдерҳо.
  • Қабати семантикии ченакҳо; таҳлили насл/таъсир; расмиёти backfill/коркард.
  • Минтақасозӣ (EEA/UK), RLS/CLS, назорати хароҷот (квота/пардохт).
Марҳилаи 3 (10-16 ҳафта):
  • Такрори симулятор (чӣ-агар), тавлиди худкори ҳуҷҷатҳои намоишӣ/ченакҳо.
  • Оптимизатсияи хароҷот (кластерӣ, материализатсия, TTL, фишурдасозӣ).
  • Машқҳои DR ва барқароркунии вақти сафар.

17) Рӯйхати санҷиши пеш аз фурӯш

  • Шартномаҳо/схемаҳо дар Феҳрист, мутобиқат сабзро месанҷад.
  • CDC/афзоиш ва MERGE idempotent мебошанд; dedup ба indest.
  • Қоидаҳои DQ фаъоланд (интиқодӣ → ноком + DLQ), панелҳои SLA танзим карда шудаанд.
  • Намоишҳои тиллоӣ ҳуҷҷатгузорӣ шудаанд, формулаҳои метрӣ дар қабати семантикӣ.
  • RBAC/ABAC, рамзгузорӣ, иқомат, DSAR/RTBF/Hold Legal тасдиқ карда шуд.
  • Фишурдасозӣ/ОПТИМИЗАТСИЯ/ВАКУУМ аз рӯи ҷадвал; маҳдудиятҳои backfill/такрорӣ.
  • Дафтарчаи корӣ ва ҳодисаҳо ва коркард, содироти аудит (WORM + hash).

18) Анти-намунаҳо ва хатарҳо

Боркунии пурраи "танҳо дар ҳолати": CDC/афзоишро истифода баред.
Омезиши маълумоти хом ва гузоришшуда: Биринҷӣ/нуқра/тиллоро алоҳида нигоҳ доред.
Набудани DQ ва насл: исбот ва такрористеҳсолкунӣ нест.
PII дар қабатҳои таҳлилӣ: харитасозии изолятсия, истифодаи CLS/RLS.
Ҷабҳаҳои "шабона" -и монолитӣ: пошидан, параллел дар партияҳо.
Арзишро нодида гиред: файлҳои хурдро аз назар гузаронед, агрегатҳоро ҷобаҷо кунед, квотаҳоро ҷорӣ кунед.

19) Луғат (мухтасар)

ETL/ELT - истихроҷ/табдилдиҳӣ/боркунӣ (пеш аз/пас аз боркунӣ).
CDC - Тағирот.
SCD - таърихнигории андозагирӣ (I/II/III).
WORM - нигоҳдории тағйирнопазири бастаҳои ҳисоботӣ.
Вақти сафар - хондани версияҳои таърихии ҷадвалҳо.

20) Сатри поён

ETL/ELT муосир скриптҳо нест, балки платформаи идорашаванда аст: шартномаҳо ва DQ, афзоишҳои номатлуб/CDC, интизоми қабати биринҷӣ/нуқра/тиллоӣ, мушоҳида ва SLO, махфият ва иқтисодиёт. Бо риояи ин дастур, шумо қубурҳои такроршаванда ва аудиториро мегиред, ки пайваста ҳисобот, маҳсулот ва моделҳоро дар миқёс ва бидуни ногаҳонӣ ба даст меоранд.

Contact

Тамос гиред

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

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

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

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

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