## 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 排除规则
3.6 KiB
3.6 KiB
FDW 数据源迁移方案:DWD → Core
创建日期:2026-02-24 状态:已决策(上线后迭代) 关联 SPEC:miniapp-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。
理由
- Core 层当前仅 7 张表(
dim_site、dim_member、dim_assistant、dim_table、dim_goods_category、fact_settlement、fact_payment),小程序需要的 11 张 DWD + 24 张 DWS 远超 Core 覆盖范围 - Core 层字段是精简子集(如
core.dim_member无card_balance、total_consumption等),小程序前期需要 DWD 的完整字段 app视图层本身就是抽象层——后端通过fdw_etl.v_dim_member访问数据,底层视图定义可随时切换,后端代码零改动- 上线关键路径是 P0 阶段(基础设施 → 微信配置 → 后端核心功能),Core 层完善属于 P2 范畴
迁移路径
Phase 0:上线前(当前)
按 SPEC 原样执行:
app.v_dim_member→SELECT * 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_member、dim_assistant等,在 Core 层补全小程序所需的业务字段 - 新增 Core 层缺失的维度表(如
core.dim_member_card_account、core.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,验证通过后再切其他表),降低风险