Files
Neo-ZQYY/db
Neo 421e193041 fix(ai): F1-5a 沙箱 batch-run 接入 runtime_context (W1 / 阶段 A 主体)
Neo F1-5 反馈: "让沙箱起到其真正的作用. 真正的模拟日期, 仅能看到沙箱设定日期
及之前日期的数据, 并运行 AI 的各个业务."

调研发现 (4 个并行子代理): batch-run 端点 _run_batch 是空壳 stub
(只 logger.info, 实际不跑 AI), GUC apply_runtime_session_vars 0 处调用
(dead code), 7 张业务表 6 张有 runtime 复合索引唯独 ai_run_logs 漏建,
App2/2a 3 行 _calc_date_range 漏传 ref_date.

本 commit (F1-5a 阶段 A 主体, F1-5b 后续完整 zqyy_app RLS 视图层):

后端核心:
- admin_service.py: _run_batch 真实化 (Semaphore(5)+asyncio.gather+
  return_exceptions=True+ctx_snapshot 防漂移); estimate 入口抓
  RuntimeContext 快照, confirm 取出传给 worker
- admin_ai.py: confirm_batch_run lazy 注入 dispatcher
- admin_service.retry_trigger_job: INSERT 落 runtime_mode +
  sandbox_instance_id 列 (用 runtime_insert_columns helper)
- runtime_context.py: get_runtime_context 加 bind_to_session 参数,
  激活 GUC app.current_business_date / app.current_runtime_mode
- run_log_service.create_log: 启用 bind_to_session=True 试点

App2/2a 3 行 ref_date 修复:
- app2_finance_prompt.py:817 储值卡余额变化板块
- app2_finance_prompt.py:841 日粒度 series + 异常检测窗口
- app2a_finance_area_prompt.py:466 区域日粒度 series

DB:
- migrations/20260505__ai_run_logs_runtime_index.sql:
  补 (site_id, runtime_mode, sandbox_instance_id, created_at DESC) 复合索引

前端:
- AIOperations.tsx: 顶部加 sandbox 模式提示条 (Alert 显示 sandbox_date +
  sandbox_instance_id + 影响范围 + 切回 live 入口)

未做 (留 F1-5b 完整 zqyy_app RLS 视图层一并):
- B1 admin_service 6 处 CURRENT_DATE -> business_date
- B2 fdw_queries 异常分支兜底
- GUC 完整传递 (fdw_queries / page_context 等)
- 测试 3 套 (.gitignore:71 排除, F2-2 入仓时 commit)
- P20 SPEC \xa76/\xa710/\xa711/\xa715 (F1-5b 完整收口后同步更准确)

Neo 决策: docs/_overview/wave1-findings/F1-5-impl-decisions.md

详见 docs/audit/changes/2026-05-05__wave1_f1_5a_sandbox_batch_run.md
2026-05-05 03:01:48 +08:00
..

db/ — 数据库资产目录

当前状态2026-04-06 更新)

项目 v1DDL 不存在迭代更新。完整 schema 定义在 schemas/ 目录(按 schema 分文件,从测试库导出)。 同一份 DDL 也保留在 docs/database/ddl/(文档视角)。

目录结构

db/
├── etl_feiqiu/
│   ├── schemas/          — 六层完整 DDLmeta/ods/dwd/core/dws/app
│   ├── migrations/       — 未来增量迁移v1 已全部归档)
│   ├── ods/              — ODS 补充脚本
│   └── scripts/
│       └── create_test_db.sql
├── zqyy_app/
│   ├── schemas/          — 三层完整 DDLpublic/auth/biz
│   ├── migrations/       — 未来增量迁移v1 已全部归档)
│   └── scripts/
│       └── create_test_db.sql
├── fdw/                  — FDW 跨库映射配置
│   ├── setup_fdw.sql              — 正向zqyy_app → etl_feiqiu.app
│   ├── setup_fdw_test.sql         — 正向(测试环境)
│   ├── setup_fdw_reverse.sql      — 反向etl_feiqiu → zqyy_app.member_retention_clue
│   └── setup_fdw_reverse_test.sql — 反向(测试环境)
└── _archived/            — 归档
    ├── ddl_baseline_2026-02-22/       — 旧基线
    └── migrations_v1_merged/          — v1 全部迁移39 个,已合并进 schemas/
        ├── etl_feiqiu/   — 11 个迁移
        └── zqyy_app/     — 28 个迁移

Schema 文件

db/etl_feiqiu/schemas/db/zqyy_app/schemas/ 是权威的完整 DDL包含建表、索引、约束、种子数据。

文件 数据库 Schema 对象数
etl_feiqiu/schemas/meta.sql etl_feiqiu meta 3 表
etl_feiqiu/schemas/ods.sql etl_feiqiu ods 23 表
etl_feiqiu/schemas/dwd.sql etl_feiqiu dwd 42 表
etl_feiqiu/schemas/core.sql etl_feiqiu core 7 表(跨平台统一维度层,由 CORE_DIM_SYNC 任务从 DWD 同步)
etl_feiqiu/schemas/dws.sql etl_feiqiu dws 38 表
etl_feiqiu/schemas/app.sql etl_feiqiu app 仅视图
zqyy_app/schemas/public.sql zqyy_app public 12 表
zqyy_app/schemas/auth.sql zqyy_app auth 9 表
zqyy_app/schemas/biz.sql zqyy_app biz 21 表

重新生成:PYTHONUTF8=1 python tools/db/gen_consolidated_ddl.py

迁移管理

v1 阶段的 39 个迁移已全部合并进 schemas/ 完整 DDL原文件归档在 _archived/migrations_v1_merged/

后续新增迁移放 migrations/,文件名格式 YYYY-MM-DD__描述.sql。 执行后重新运行 DDL 生成脚本刷新 schemas/ 基线。

文档分工

位置 管辖范围
docs/database/ 业务库(zqyy_app) BD_Manual + 跨模块(FDW/RLS) + DDL 基线副本
apps/etl/connectors/feiqiu/docs/database/ ETL 专属(ODS/DWD/DWS 表级文档)
db/(本目录) 权威 DDL + 运行时资产(迁移/FDW/建库脚本)
tools/db/ 数据库工具(DDL 生成/验证/一致性检查)