在准备环境前提交次全部更改。

This commit is contained in:
Neo
2026-02-19 08:35:13 +08:00
parent ded6dfb9d8
commit 4eac07da47
1387 changed files with 6107191 additions and 33002 deletions

View File

@@ -0,0 +1,126 @@
# 数据流向详解ODS → DWD → DWS
## 整体数据流
```
上游 SaaS API / 离线 JSON
┌───────────────────────────────────────┐
│ ODS 层ods
│ 操作数据存储 — 原始数据落地 │
│ 保留源 payload便于回溯 │
│ 23 张 ODS 表,对应 23 个 API 端点 │
└───────────────┬───────────────────────┘
│ DWD_LOAD_FROM_ODS
┌───────────────────────────────────────┐
│ DWD 层dwd
│ 明细数据 — 清洗、标准化、关联 │
│ 维度表走 SCD2缓慢变化维度
│ 事实表按时间增量写入 │
└───────────────┬───────────────────────┘
│ DWS 汇总任务
┌───────────────────────────────────────┐
│ DWS 层dws
│ 数据服务 — 汇总、指标 │
│ 助教业绩 / 财务日报 / 会员分析 │
│ 工资计算 │
└───────────────┬───────────────────────┘
│ INDEX 指数任务
┌───────────────────────────────────────┐
│ INDEX 层dws
│ 自定义指数算法 │
│ WBI / NCI / RS / OS / MS / ML │
└───────────────────────────────────────┘
```
## ODS 层(操作数据存储)
- Schema`ods`
- 职责:从上游 SaaS API 抓取原始数据并落地,保留完整源 payload
- 数据来源:在线 API 抓取(`APIClient`)或离线 JSON 回放(`LocalJsonClient`
- 任务模式:每个业务实体对应一个 ODS 任务(如 `ODS_PAYMENT``ODS_MEMBER``ODS_SETTLEMENT_RECORDS` 等),由 `BaseOdsTask` + `OdsTaskSpec` 声明式配置驱动,通过 `_build_task_class()` 工厂函数动态生成任务类
- 加载方式:`_insert_records_schema_aware` schema-aware 写入——运行时从 `information_schema` 读取目标表结构,按列名自动匹配,批量 upsert + 冲突处理(`ON CONFLICT` 策略可配置)
### 核心业务实体23 个 ODS 任务)
助教账号档案assistant_accounts_master、结账记录settlement_records、台费计费流水table_fee_transactions、助教服务流水assistant_service_records、助教废除记录assistant_cancellation_records、门店商品销售流水store_goods_sales_records、支付流水payment_transactions、退款流水refund_transactions、平台/团购券核销platform_coupon_redemption_records、会员档案member_profiles、会员储值卡member_stored_value_cards、会员余额变动member_balance_changes、充值结算recharge_settlements、团购套餐定义group_buy_packages、团购套餐核销group_buy_redemption_records、库存汇总goods_stock_summary、库存变化记录goods_stock_movements、台桌维表site_tables_master、库存商品分类树stock_goods_category_tree、门店商品档案store_goods_master、台费折扣/调账table_fee_discount_records、租户商品档案tenant_goods_master、结账小票详情settlement_ticket_details
## DWD 层(明细数据)
- Schema`dwd`
- 职责:对 ODS 原始数据进行清洗、标准化、关联,生成可分析的明细数据
- 核心任务:`DWD_LOAD_FROM_ODS`
- 质量检查:`DWD_QUALITY_CHECK`
### 维度处理SCD2
维度表采用 SCD2缓慢变化维度 Type 2策略`scd/` 模块处理:
- 会员维度(`dim_member`
- 助教维度(`dim_assistant`
- 商品维度(`dim_product`
- 台桌维度(`dim_table`
- 套餐维度(`dim_package`
每条维度记录包含 `valid_from``valid_to``is_current` 字段,支持历史版本追溯。
### 事实表处理
事实表按时间增量写入,由 `loaders/facts/` 中的加载器处理:
- 订单事实、支付事实、退款事实、小票明细、充值结算、台费流水等
## DWS 层(数据服务)
- Schema`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 小时 |
### 自定义指数算法
系统实现了六个自定义业务指数,参数存储在 `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`meta`
- 职责:调度元数据管理
- 内容:游标(水位)记录、任务运行记录、调度配置
- 关键组件:`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/指数校验器)