GH GambleHub

数据正常化

1)任命

正常化消除了重复和异常的更新,设置了单个参考书和密钥,使数据保持一致且便宜。在iGaming中,这对GGR/NGR,AML/RG分析,监管报告,防冻剂和ML至关重要。

2)我们归一化的地方

Bronze (raw):我们不能正常化-forenzics的存储原样(只有append-only)。
Silver (clean/conform):基本规范化(3NF/BCNF、参考、密钥、SCD)。
Gold (serve):目标店面-可以进行有管理的非正规化阅读/BI。

3)基本原则

1.Schema-first:所有表均具有显式图和键。
2.单个ID是:'user_pseudo_id','session_id','game_id','provider_id','transaction_id'。
3.统一目录:货币,市场/辖区,KYC/RG状态,游戏提供商,流量渠道。
4.时间和货币:存储"event_time"(UTC)和标准化的"amount_base"+"fx_source"。
5.进化:语义版本,只有不带有"祈祷"间隔的兼容更改。
6.PII最小化:用户-通过伪ID;mapping是单独存储的,访问受到限制。

4)正常形式快速

1NF:原子值,列中没有数组(数组→儿童表)。
2NF:属性取决于整个复合密钥。
3NF:没有传递依赖项(属性仅取决于密钥)。
BCNF:每个行列式都是关键。适用于"内核"(payments/gameplay)。

练习:银支付模式和游戏活动保持最低3NF;更严格的BCNF-用于参考书和参考表。

5)参考域模型(Silver)

5.1个目录

`dim.users'(伪ID,国家,年龄范围,RG状态)。
`dim.游戏(game_id,provider_id,类型,RTP,波动)。
`dim.提供者(provider_id、类型、许可证)。
`dim.markets'(管辖区代码、监管机构)。

`dim.fx_rates` (date, ccy_from, ccy_to, rate, fx_source).

5.2事实(狭窄的事件/事务表)

`fact.payments` (transaction_id, user_pseudo_id, amount_orig, currency, amount_base, market, event_time, psp_ref, method).

`fact.bets` (bet_id, user_pseudo_id, game_id, stake_base, stake_ccy, outcome, event_time).

`fact.payouts` (payout_id, user_pseudo_id, game_id, amount_base, event_time).

联系:关于稳定钥匙的事实↔指南。所有金额均以"原始货币"和"基本货币"(amount_base),记录"fx_source"。

6)缓慢变化的测量(SCD)

I型(重写):拼写/非关键修补程序。
Type II(历史记录):"valid_from/valid_to/is_current",审核更改(例如RG状态更改)。
Type III(备用列):"之前/之后"用于简短的比较。

建议:针对RG/KYC/营销渠道-SCD II;对于游戏指南(RTP)-具有影响验证的SCD II。

SCD II示例(简化):
sql
CREATE TABLE dim. users_scd (
user_pseudo_id STRING,
country STRING,
rg_status STRING,
valid_from TIMESTAMP,
valid_to  TIMESTAMP,
is_current BOOLEAN
);

7)重复数据消除和密钥

内部链接的代理密钥(BIGINT/UUID)。
自然键(例如PSP的"transaction_id")-分别验证和存储。
在Silver的业务密钥上,在ingest+上通过"(event_id,source)"进行演绎。

付款截止日期(示例):
sql
CREATE TABLE silver. payments AS
SELECT EXCEPT(rn) FROM (
SELECT p., ROW_NUMBER() OVER (PARTITION BY transaction_id ORDER BY event_time) rn
FROM bronze. payment_events p
)
WHERE rn = 1;

8)货币标准化与时差

"event_time"-始终为UTC;对于店面,我们添加了市场/时区。
货币:"amount_orig"和"amount_base"(例如EUR)+"fx_source","fx_rate_used"。
每日课程固定:'dim。fx_rates'源和哈希签名。

和标准化(示例):
sql
SELECT t. transaction_id,
t. amount_orig,
t. currency,
r. rate AS fx_rate_used,
t. amount_orig r. rate AS amount_base
FROM bronze. payment_events t
JOIN dim. fx_rates r
ON r. date = DATE(t. event_time) AND r. ccy_from = t. currency AND r. ccy_to = 'EUR';

9)参考书的一致性

统一目录目录(游戏,提供者,市场,货币)。
DQ验证器:"in_set",FK引用,唯一性,SCD一致性。
来自外部来源(游戏提供商,国家/地区,PSP)的"精细"dimension的自我发生。

10)何时去规范化

非正规化在Gold中是允许的:
  • 稳定的"广泛"报告(GGR,风险展示);
  • 加速BI 查询/dashbords;
  • 在SLA阅读下的realtime店面(ClickHouse/Pinot)。
规则:
  • 真理的来源仍然是银。
  • 非归一化字段-从Silver计算/复制;逻辑转换。
  • 任何非正规化都被记录下来并测试为正确。

11)"星星"和"雪花"模型"

明星:一个事实+平面测量-更容易和更快地阅读,更昂贵的写入/匹配。
雪花:测量标准化(连接目录下)-重复较少,更难查询。

建议:黄金更常见的是"明星",银色更常见的是正常化的"雪花"。

12)方案的演变(安全变化)

背对背兼容:添加不可分割的专栏;新的标志参考值。
破解:重命名/类型修改/语义转移-仅通过"/v2"和迁移期间的双重记录。
合同:JSON/Avro计划注册,消费者兼容性测试。

13)用于正常化的DQ控制

最小集合:
  • 键的唯一性是:"transaction_id","bet_id"。
  • 参考完整性:FK在"dim"上。
  • 货币:whitelist的"currency","fx_rate_used"不是NULL,"amount_base>=0"。
  • 时间:智能窗口中的"event_time";没有"未来"事件。
  • SCD正确:非相交范围"valid_from/valid_to"。

14) SQL模型示例

费率事实(3NF):
sql
CREATE TABLE silver. fact_bets (
bet_id STRING PRIMARY KEY,
user_pseudo_id STRING NOT NULL,
game_id STRING NOT NULL,
stake_ccy DECIMAL(18,2) NOT NULL,
currency CHAR(3) NOT NULL,
stake_base DECIMAL(18,2) NOT NULL,
market CHAR(2) NOT NULL,
event_time TIMESTAMP NOT NULL
);
GGR(黄金)的明星:
sql
CREATE VIEW gold. ggr_daily AS
SELECT
DATE(b. event_time) AS event_date,
m. 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. markets m ON m. code = b. market
JOIN dim. games g  ON g. game_id = b. game_id
GROUP BY 1,2,3;

15)隐私和合规性

将用户别名化为Silver;与实际ID的关联-在单独的受保护环路中。
RLS/CLS和字段掩码(分析中没有电子邮件/PAN)。
目录/密钥区域化,DPO控制以扩展电路。

16)可观察性和线性

Bronze → Silver → Gold的数据线,转换版本和合同。
度量标准:完全无效,validity, FK错误,重复,时间漏洞,请求成本。
当参考书和FX来源中断时的Alerts。

17) RACI

R:数据工程(Silver/Gold模型),数据平台(电路寄存器,DQ)。

A: Head of Data/Architecture.

C: Compliance/DPO (PII/retention), Finance (FX/GGR), Risk (RG/AML).

I: BI/产品/营销/运营。

18)实施路线图

MVP(2-4周):

1.参考目录(市场,货币,提供者,游戏)。

2.银模型的事实。payments`, `fact.bets","dim。"(3NF),SCD II代表'dim。users`.

3.货币正常化/时区,基本DQ规则(FK/uniqueness/in_set)。

4.第一个黄金展示柜(GGR Daily)和焊接测试。

第二阶段(4-8周):
  • SCD扩展,游戏事件覆盖,提供者保形模型。
  • 图形兼容性自动测试,迁移模拟器,元数据目录。
  • 按键/批次优化,聚类/Z顺序。
第三阶段(8至12周):
  • 黄金,SLA/成本的非正规化政策;"星星/雪花"节奏。
  • 自动生成文档,行列中的线性图。
  • 区域目录和加密密钥,DR演习。

19)质量检查表

  • 单一密钥和手册已获得批准。
  • Silver in 3NF,SCD应用于"慢速"测量。
  • 货币/时间段已归一化;"fx_source"已固定。
  • DQ规则(FK/uniqueness/range/in_set)是活跃的。
  • 非正规化已经记录下来,正确性测试已经通过。
  • 在行车记录仪上可以看到线条和新鲜度/完整度度量。

20)频繁的错误以及如何避免错误

在分析中溷合PII:拆分mappings,应用CLS/RLS。
Silver正常化不足:导致3NF,否则昂贵的支持和焊接错误。
FX"关于报告的事实":课程必须记录在事件中,而不是"追溯"。
关键维度没有SCD:RG/KYC/通道历史丢失。
黄金重新归一化:多余的加入→受控的非归一化。
模式的不透明演变:使用注册和消费者测试。

21)结果

正常化是银级学科:单键和参考书,用于事实和测量3NF/BCNF,正确历史(SCD)和时间/货币标准化。有了这样的"骨架",金色店面变得可预测,报告是可比的,拥有成本是可控制的。

Contact

联系我们

如需任何咨询或支持,请随时联系我们。我们随时准备提供帮助!

Telegram
@Gamble_GC
开始集成

Email — 必填。Telegram 或 WhatsApp — 可选

您的姓名 可选
Email 可选
主题 可选
消息内容 可选
Telegram 可选
@
如果填写 Telegram,我们也会在 Telegram 回复您。
WhatsApp 可选
格式:+国家代码 + 号码(例如:+86XXXXXXXXX)。

点击按钮即表示您同意数据处理。