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
db/ — 数据库资产目录
当前状态(2026-04-06 更新)
项目 v1,DDL 不存在迭代更新。完整 schema 定义在 schemas/ 目录(按 schema 分文件,从测试库导出)。
同一份 DDL 也保留在 docs/database/ddl/(文档视角)。
目录结构
db/
├── etl_feiqiu/
│ ├── schemas/ — 六层完整 DDL(meta/ods/dwd/core/dws/app)
│ ├── migrations/ — 未来增量迁移(v1 已全部归档)
│ ├── ods/ — ODS 补充脚本
│ └── scripts/
│ └── create_test_db.sql
├── zqyy_app/
│ ├── schemas/ — 三层完整 DDL(public/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 生成/验证/一致性检查) |