Files
Neo-ZQYY/docs/roadmap/2026-02-24__fdw-dwd-to-core-migration-plan.md
Neo b25308c3f4 feat: P1-P3 全栈集成 — 数据库基础 + DWS 扩展 + 小程序鉴权 + 工程化体系
## P1 数据库基础
- zqyy_app: 创建 auth/biz schema、FDW 连接 etl_feiqiu
- etl_feiqiu: 创建 app schema RLS 视图、商品库存预警表
- 清理 assistant_abolish 残留数据

## P2 ETL/DWS 扩展
- 新增 DWS 助教订单贡献度表 (dws.assistant_order_contribution)
- 新增 assistant_order_contribution_task 任务及 RLS 视图
- member_consumption 增加充值字段、assistant_daily 增加处罚字段
- 更新 ODS/DWD/DWS 任务文档及业务规则文档
- 更新 consistency_checker、flow_runner、task_registry 等核心模块

## P3 小程序鉴权系统
- 新增 xcx_auth 路由/schema(微信登录 + JWT)
- 新增 wechat/role/matching/application 服务层
- zqyy_app 鉴权表迁移 + 角色权限种子数据
- auth/dependencies.py 支持小程序 JWT 鉴权

## 文档与审计
- 新增 DOCUMENTATION-MAP 文档导航
- 新增 7 份 BD_Manual 数据库变更文档
- 更新 DDL 基线快照(etl_feiqiu 6 schema + zqyy_app auth)
- 新增全栈集成审计记录、部署检查清单更新
- 新增 BACKLOG 路线图、FDW→Core 迁移计划

## Kiro 工程化
- 新增 5 个 Spec(P1/P2/P3/全栈集成/核心业务)
- 新增审计自动化脚本(agent_on_stop/build_audit_context/compliance_prescan)
- 新增 6 个 Hook(合规检查/会话日志/提交审计等)
- 新增 doc-map steering 文件

## 运维与测试
- 新增 ops 脚本:迁移验证/API 健康检查/ETL 监控/集成报告
- 新增属性测试:test_dws_contribution / test_auth_system
- 清理过期 export 报告文件
- 更新 .gitignore 排除规则
2026-02-26 08:03:53 +08:00

3.6 KiB
Raw Blame History

FDW 数据源迁移方案DWD → Core

创建日期2026-02-24 状态:已决策(上线后迭代) 关联 SPECminiapp-db-foundation


背景

当前 miniapp-db-foundation SPEC 中FDW 外部表映射的数据源链路为:

ETL 库 dwd.dim_* / dws.dws_*
    → app.v_dim_* / app.v_dws_*RLS 视图site_id 过滤)
    → 业务库 fdw_etl.v_dim_* / fdw_etl.v_dws_*FDW 外部表)

ETL 六层 Schema 中,core 层的定位是"跨门店标准化维度/事实",是 DWD 层的精简子集。长远来看,小程序读取的维度数据应从 core 层获取,而非直接读 dwd 层。

决策

上线时保持现状(app 视图指向 dwd.* / dws.*),上线后再迭代切换到 core

理由

  1. Core 层当前仅 7 张表(dim_sitedim_memberdim_assistantdim_tabledim_goods_categoryfact_settlementfact_payment),小程序需要的 11 张 DWD + 24 张 DWS 远超 Core 覆盖范围
  2. Core 层字段是精简子集(如 core.dim_membercard_balancetotal_consumption 等),小程序前期需要 DWD 的完整字段
  3. app 视图层本身就是抽象层——后端通过 fdw_etl.v_dim_member 访问数据,底层视图定义可随时切换,后端代码零改动
  4. 上线关键路径是 P0 阶段(基础设施 → 微信配置 → 后端核心功能Core 层完善属于 P2 范畴

迁移路径

Phase 0上线前当前

按 SPEC 原样执行:

  • app.v_dim_memberSELECT * FROM dwd.dim_member WHERE site_id = ...
  • app.v_dws_*SELECT * FROM dws.dws_* WHERE site_id = ...
  • FDW 通过 IMPORT FOREIGN SCHEMA app 映射

Phase 1上线后 — 补齐 Core 层表

  • 盘点小程序实际用到的维度表,确认 Core 层需要补齐哪些字段
  • 对照 DWD 层的 dim_memberdim_assistant 等,在 Core 层补全小程序所需的业务字段
  • 新增 Core 层缺失的维度表(如 core.dim_member_card_accountcore.dim_staff 等)

Phase 2上线后 — ETL 填充任务

  • 在 ETL Connector 中新增 DWD → Core 的填充任务
  • 确保 Core 层数据与 DWD 层保持同步
  • 验证 Core 层数据完整性和正确性

Phase 3上线后 — 切换视图定义

  • 修改 app 视图定义,将维度表从 dwd.* 切换到 core.*
    -- 修改前
    CREATE OR REPLACE VIEW app.v_dim_member AS
    SELECT * FROM dwd.dim_member
    WHERE site_id = current_setting('app.current_site_id')::bigint;
    
    -- 修改后
    CREATE OR REPLACE VIEW app.v_dim_member AS
    SELECT * FROM core.dim_member
    WHERE site_id = current_setting('app.current_site_id')::bigint;
    
  • DWS 汇总表保持不变(它们本身就在 DWS 层Core 层不涉及汇总)
  • 重新执行 IMPORT FOREIGN SCHEMA app INTO fdw_etl 同步外部表
  • 后端和小程序代码无需任何改动

风险与缓解

风险 缓解措施
Core 层字段不全导致小程序功能缺失 Phase 1 先盘点再补齐,确保字段覆盖
DWD → Core 填充任务引入数据延迟 Core 填充任务纳入 ETL 调度链,与 DWD 同步执行
切换视图时短暂不可用 使用 CREATE OR REPLACE VIEW 原子替换,无停机
Core 层数据与 DWD 不一致 切换前运行数据一致性校验脚本

关键设计优势

app 视图层是整个方案的"切换开关"

  • 后端只看到 fdw_etl.v_dim_member,不关心底层是 DWD 还是 Core
  • 切换只需修改视图 SQL + 重新 IMPORT零代码改动
  • 可以逐表切换(先切 dim_member,验证通过后再切其他表),降低风险