# Aeolus 字段与下载诊断器
- id: `aeolus-schema-download-doctor`
- kind: `diagnostic-tool`
- risk: `medium`
- value: `high`
## 1.1 摘要
这个主题有效,且不是单次偶发问题:同一组会话里连续出现了字段名获取、Aeolus 自动表不可查、导出按钮不开放、UI 虚拟列表抽取不完整等问题。它适合沉淀成一个诊断工具,把“真实源表定位、元数据字段抽取、导出条件检查、UI 兜底抽取”串成固定流程,减少每次靠人工摸接口和页面状态。
## 1.2 证据
| session_id | cwd | snippet |
| --- | --- | --- |
| 019dfd30-2ad0-7d90-904c-b7294c843ee2 | ~/Documents/job-bu | user: 如何能把这个表所有的字段名拿到?随后 SQL 报 Object aeolus_data_table_8_3509189_prod not found within LF_HL_HIVE.aeolus_data_db_aeolus_tiger_202506。 |
| 019dfd30-2ad0-7d90-904c-b7294c843ee2 | ~/Documents/job-bu | assistant: 这个表名很像 Aeolus 自动生成的数据集/中间表名,不一定是能直接 DESCRIBE 的真实 Hive 表;要回到 Aeolus 数据集编辑页找 Hive-sql-0 背后的真实源表。 |
| 019dfd36-9f28-79a2-9fd0-f51fb1b04ef7 | ~/Documents/job-bu | assistant: 扩展源码确认导出按钮需要 whereList.op === 'in' 的筛选字段,并且要上传 Excel;当前页面只有 partition 时间筛选,所以扩展抓到了请求但仍不开放导出。 |
| 019dfd36-9f28-79a2-9fd0-f51fb1b04ef7 | ~/Documents/job-bu | user: 有啥办法能拿到所有的维度的字段名字?assistant: 最稳的是抓 Aeolus 元数据接口;UI 滚动抽取只能拿展示字段名,是兜底。 |
| 019dfd36-9f28-79a2-9fd0-f51fb1b04ef7 | ~/Documents/job-bu | assistant: AppleScript 直接执行页面 JS 被 Chrome 关掉了,改走可见 UI 抽取;最终通过虚拟列表滚动抽取了 171 个 UI 维度字段,仍缺真实后端字段名对齐。 |
## 1.3 拟议改动
1. 新增工具入口 `data-analysis-workspace/tools/aeolus_doctor.py`,CLI 形态建议为 `python tools/aeolus_doctor.py --dataset-url <Aeolus页面URL> --har <network.har> --sql-error <error.txt> --out <xlsx/md>`;输入来源支持 Aeolus 页面 URL、Chrome DevTools 导出的 HAR、复制的 curl、SQL 报错文本、可选的页面 DOM 快照。
2. 在工具里实现核心检查步骤:先从 SQL 报错识别 `aeolus_data_table_*` 这类自动数据集表,提示不要直接 `DESCRIBE`;再从 HAR/curl 中定位 Aeolus dataset/report/metadata 接口,抽取维度、指标、展示名、后端字段名、字段类型;如果接口缺失,再回退到可见 UI 虚拟列表滚动抽取,并明确标记为 display-name-only。
3. 加入下载诊断模块 `check_download_gate()`:解析请求里的 `whereList`、筛选字段 `op`、上传 Excel 状态、partition 时间筛选等条件;成功信号是存在 `whereList.op === 'in'` 且已绑定上传文件/名单筛选,失败信号是只有 partition 时间筛选、无 in-list 条件、扩展抓到请求但导出按钮仍置灰。
4. 沉淀成 Codex skill `~/.codex/skills/aeolus-schema-download-doctor/SKILL.md` 和项目文档 `data-analysis-workspace/docs/aeolus-field-download-doctor.md`:规定每次遇到 Aeolus 字段/下载问题时,先收集 URL+HAR+报错,再跑 doctor,输出 `schema.xlsx`、`field_mapping.md`、`download_gate_report.md`,最后再决定是否需要 browser-use 做页面兜底。
## 1.4 示例
## Aeolus 字段与下载诊断流程样例
### 输入
| 输入项 | 示例 | 用途 |
|---|---|---|
| Aeolus 页面 URL | `https://.../aeolus/...` | 定位 dataset/report id |
| HAR 或 curl | Chrome DevTools 导出 | 找元数据接口和下载请求 |
| SQL 报错 | `Object aeolus_data_table_8_3509189_prod not found...` | 判断是否误查了 Aeolus 自动表 |
| 可选 DOM 快照 | 页面字段列表 | 接口失败时做 UI 兜底 |
### 执行
```bash
python data-analysis-workspace/tools/aeolus_doctor.py \
--dataset-url "$AEOLUS_URL" \
--har ./network.har \
--sql-error ./sql_error.txt \
--out ./out/aeolus_schema_report
```
### 核心检查
1. 识别 SQL 报错里的表名是否为 `aeolus_data_table_*` 自动表。
2. 从 Aeolus 元数据接口提取字段,优先输出后端字段名,其次输出展示字段名。
3. 回到 dataset 编辑信息,定位 `Hive-sql-0` 背后的真实源表或 SQL。
4. 检查下载按钮前置条件:是否有 `whereList.op === 'in'`、是否上传 Excel、是否只有 partition 时间筛选。
5. 如果元数据接口不可得,启动 UI 虚拟列表滚动抽取,并标记字段可信度为 `ui_display_only`。
### 成功信号
- `schema.xlsx` 中同时包含 `display_name`、`backend_name`、`field_type`、`source`。
- `field_mapping.md` 能说明 Aeolus 自动表和真实 Hive 源表/SQL 的关系。
- `download_gate_report.md` 明确给出导出按钮开放或不开放的原因。
### 失败信号
- 只能拿到 171 个 UI 展示字段,缺少后端字段名。
- SQL 仍在查询 `aeolus_data_table_*`,没有定位真实源表。
- 下载请求被抓到,但筛选条件只有 partition 时间,缺少 in-list 上传名单条件。
### 建议落地
第一次先做成本地 CLI,服务数据分析工作区;稳定后再封装为 Codex skill。真正需要点击页面时,按本项目约定优先用内嵌浏览器,页面抽取只作为接口诊断失败后的兜底。