5.6 KiB
数据流向详解:ODS → DWD → DWS
整体数据流
上游 SaaS API / 离线 JSON
│
▼
┌───────────────────────────────────────┐
│ ODS 层(billiards_ods) │
│ 操作数据存储 — 原始数据落地 │
│ 保留源 payload,便于回溯 │
│ 22 张 ODS 表,对应 22 个 API 端点 │
└───────────────┬───────────────────────┘
│ DWD_LOAD_FROM_ODS
▼
┌───────────────────────────────────────┐
│ DWD 层(billiards_dwd) │
│ 明细数据 — 清洗、标准化、关联 │
│ 维度表走 SCD2(缓慢变化维度) │
│ 事实表按时间增量写入 │
└───────────────┬───────────────────────┘
│ DWS 汇总任务
▼
┌───────────────────────────────────────┐
│ DWS 层(billiards_dws) │
│ 数据服务 — 汇总、指标、指数 │
│ 助教业绩 / 财务日报 / 会员分析 │
│ 工资计算 / 自定义指数算法 │
└───────────────────────────────────────┘
ODS 层(操作数据存储)
- Schema:
billiards_ods - 职责:从上游 SaaS API 抓取原始数据并落地,保留完整源 payload
- 数据来源:在线 API 抓取(
APIClient)或离线 JSON 回放(LocalJsonClient) - 任务模式:每个业务实体对应一个 ODS 任务(如
ORDERS、PAYMENTS、MEMBERS等) - 加载方式:通用 ODS 加载器,批量 upsert + 冲突处理
核心业务实体(16 个)
订单(settlement_records)、支付(payment_transactions)、退款(refund_transactions)、会员(member_profiles)、会员余额变动(member_balance_changes)、储值卡(member_stored_value_cards)、助教(assistant_accounts_master)、助教服务记录(assistant_service_records)、助教作废记录(assistant_cancellation_records)、台桌(site_tables_master)、商品(store_goods_master / tenant_goods_master)、库存变动(goods_stock_movements)、团购套餐(group_buy_packages)、团购核销(group_buy_redemption_records)、台费折扣(table_fee_discount_records)、台费流水(table_fee_transactions)等。
DWD 层(明细数据)
- Schema:
billiards_dwd - 职责:对 ODS 原始数据进行清洗、标准化、关联,生成可分析的明细数据
- 核心任务:
DWD_LOAD_FROM_ODS - 质量检查:
DWD_QUALITY_CHECK
维度处理(SCD2)
维度表采用 SCD2(缓慢变化维度 Type 2)策略,由 scd/ 模块处理:
- 会员维度(
dim_member) - 助教维度(
dim_assistant) - 商品维度(
dim_product) - 台桌维度(
dim_table) - 套餐维度(
dim_package)
每条维度记录包含 effective_from、effective_to、is_current 字段,支持历史版本追溯。
事实表处理
事实表按时间增量写入,由 loaders/facts/ 中的加载器处理:
- 订单事实、支付事实、退款事实、小票明细、充值结算、台费流水等
DWS 层(数据服务)
- Schema:
billiards_dws - 职责:基于 DWD 明细数据进行汇总计算,输出业务指标和分析结果
汇总任务分类
| 类别 | 任务示例 | 建议频率 |
|---|---|---|
| 助教业绩 | DWS_ASSISTANT_DAILY、DWS_ASSISTANT_MONTHLY |
每小时 / 每日 |
| 财务日报 | DWS_FINANCE_DAILY、DWS_FINANCE_INCOME_STRUCTURE |
每小时 |
| 会员分析 | DWS_MEMBER_CONSUMPTION、DWS_MEMBER_VISIT |
每日 |
| 工资计算 | DWS_ASSISTANT_SALARY |
每月(月初) |
| 指数算法 | DWS_WINBACK_INDEX、DWS_NEWCONV_INDEX、DWS_RELATION_INDEX |
每 2-4 小时 |
自定义指数算法
系统实现了六个自定义业务指数,参数存储在 billiards_dws.cfg_index_parameters:
| 指数 | 全称 | 说明 |
|---|---|---|
| WBI | Winback Index | 召回指数 |
| NCI | New Conversion Index | 新客转化指数 |
| RS | Relation Score | 关系评分 |
| OS | Overall Score | 综合评分 |
| MS | Member Score | 会员评分 |
| ML | Manual Ledger | 人工台账 |
公共参数:percentile_lower/upper(分位截断锚点)、ewma_alpha(指数加权移动平均平滑系数)。
ETL 管理层
- Schema:
etl_admin - 职责:调度元数据管理
- 内容:游标(水位)记录、任务运行记录、调度配置
- 关键组件:
cursor_manager.py(水位管理)、run_tracker.py(运行记录)
窗口切分与补偿
大时间范围的数据抓取会按窗口切分执行,避免单次请求数据量过大:
| 配置项 | 默认值 | 说明 |
|---|---|---|
run.window_split.unit |
day |
切分单位:day / week / month / none |
run.window_split.days |
10 |
切分天数 |
run.window_split.compensation_hours |
2 |
补偿小时数(处理跨窗口数据) |
数据质量保障
DWD_QUALITY_CHECK:DWD 层质量检查quality/integrity_service.py:完整性检查服务(余额一致性等)tasks/verification/:ETL 后置校验(ODS/DWD/DWS/指数校验器)