Files
Neo-ZQYY/docs/audit/changes/2026-03-20__h2-fdw-to-direct-etl-unification.md
Neo 14a12342b5 chore(audit): 补追 96 份未入仓审计孤本 — 覆盖 2026-02-26 ~ 2026-04-08
这些审计记录原本堆积在 docs/audit/changes/changes/ 嵌套误产物目录下(由开发机迁移
79d3c2e 前后的不明批量操作产生)。由于同期 .gitignore 屏蔽了 docs/audit/ 全目录,
它们从未入过 git 任何分支 history。删除即永久丢失。

按 docs/specs/audit-gap-recovery/tasks.md 阶段 1 执行,将全部 96 份 D 类孤本
(主目录无同名、git history 亦无记录)复制到 docs/audit/changes/ 主目录入仓。

涵盖主题: P1-P18 全栈集成 / 多模块累积变更 / ETL bug 修复 / 业务日切 /
   召回与任务引擎改造 / 租户管理与审批 / 董事会财务 / 客户与助教详情 /
   DDL 基线合并 / Kiro 到 Claude Code 迁移

阶段 2(B 类内容漂移 1 份)和阶段 4(嵌套目录删除)独立推进。

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-20 06:35:42 +08:00

53 lines
2.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# H2 修复FDW → 直连 ETL 架构统一
| 维度 | 内容 |
|------|------|
| 日期 | 2026-03-20 |
| 关联问题 | RNS1 审计报告 H2AI 自主决策架构级修改) |
| 决策方式 | 用户确认方案 A全部统一直连 ETL后执行 |
## 背景
RNS1.1 期间AI 自行将 `fdw_queries.py`47 个函数)从 FDW 外部表改为直连 ETL 库,
但其他 4 个文件仍使用旧 FDW 模式(`fdw_etl.*`),造成架构不一致。
核心技术问题:`postgres_fdw` 不传递自定义 GUC 参数(`app.current_site_id`
旧 FDW 模式下 RLS 视图的门店隔离实际失效。
## 改造范围
| 文件 | 改造点 | 风险等级 |
|------|--------|----------|
| `matching.py` | `fdw_etl.v_dim_assistant/v_dim_staff/v_dim_staff_ex``app.v_*``scd2_is_current = TRUE``= 1`;连接改为 `_fdw_context(None, site_id)` | 低 |
| `task_generator.py` | 3 处 `fdw_etl.v_dws_member_winback/newconv/relation_index``app.v_*`WBI/NCI 全表扫描RLS 是唯一门店过滤 | 高 |
| `recall_detector.py` | `fdw_etl.v_dwd_assistant_service_log``app.v_*`;列名映射:`assistant_id→site_assistant_id``member_id→tenant_member_id``service_time→create_time` | 低 |
| `task_manager.py` | 4 处:`v_dim_member``member_name→nickname``member_phone→mobile`+ 3 处 RS 指数 | 中 |
## 列名映射速查
| FDW 外部表列名 | RLS 视图实际列名 | 涉及视图 |
|---|---|---|
| `assistant_id` | `site_assistant_id` | `v_dwd_assistant_service_log` |
| `member_id` | `tenant_member_id` | `v_dwd_assistant_service_log` |
| `service_time` | `create_time` | `v_dwd_assistant_service_log` |
| `member_name` | `nickname` | `v_dim_member` |
| `member_phone` | `mobile` | `v_dim_member` |
| `scd2_is_current = TRUE` | `scd2_is_current = 1` | `v_dim_assistant``v_dim_staff``v_dim_staff_ex` |
## 验证结果
- MCP 验证 ✅7 个改造后的 SQL 查询在 `test_etl_feiqiu` 上执行成功
- 语法检查 ✅4 个文件零 diagnostics
- E2E 测试 ✅:`test_e2e_board.py` 25 passed in 121.26s
- `performance_service.py` 确认无需改造(已使用 `_fdw_context`
## 未变更项
- FDW 外部表 DDL 暂不清理(用户确认保留)
- `fdw_queries.py` 无需改动(已在 RNS1.1 中完成改造)
## 回滚方案
将 4 个文件中的 `_fdw_context` 调用改回 `get_connection()` + `fdw_etl.*` 查询,
恢复 FDW 外部表列名。注意:回滚后 RLS 门店隔离将再次失效。