Skip to content

feat: text2sql 查询修复 + 大宽表自动构建#10

Merged
henrylin99 merged 4 commits into
masterfrom
feat/text2sql-fix-and-wide-table-builder
Jun 7, 2026
Merged

feat: text2sql 查询修复 + 大宽表自动构建#10
henrylin99 merged 4 commits into
masterfrom
feat/text2sql-fix-and-wide-table-builder

Conversation

@henrylin99

Copy link
Copy Markdown
Owner

概述

text2sql 页面查询失败修复 + 大宽表(stock_business.parquet)自动构建功能。

text2sql 查询修复

根因QueryExecutor 直接在 SQLite 执行 SQL,但 stock_business/stock_factor/stock_moneyflow 表不存在(数据在 Parquet 文件中)。加上 NLP 和 SQL 生成器多层 bug。

修改

文件 修复内容
app/services/text2sql_engine.py QueryExecutor 自动从 Parquet 加载最新日数据到 SQLite 临时表,支持列名别名
app/services/nlp_processor.py 添加资金流/ROE 字段识别、修复排序提取、修复 % 预处理
app/services/sql_generator.py 路由技术/资金流查询到多表 JOIN builder、修复排序和 golden_cross

修复前后对比

查询 修复前 修复后
MACD金叉的股票 ❌ 无金叉条件,无 JOIN ✅ 20行,JOIN + WHERE DIF>DEA
资金净流入最多的10只 ❌ 无字段/无排序/无 JOIN ✅ 10行,ORDER BY DESC
成交量前20名的股票 ❌ 列不存在,无排序 ✅ 20行,ORDER BY DESC
ROE大于15%的股票 ❌ 返回错误数据 ⚠️ 提示"字段不存在"(数据源无 ROE)

大宽表自动构建

stock_business.parquet317 MB 全历史 改为 1.4 MB 最新一天(226 倍压缩)。

新建文件

文件 功能
app/utils/wide_table_builder.py 核心合并脚本(daily_basic + stk_factor + moneyflow + stock_basic)
app/services/wide_table_status.py 状态检查 + 18:00 校验逻辑

修改文件

文件 改动
registry.py 注册 wide_table_builder 为 derived job
data_jobs_api.py 添加 /wide-table/status + /wide-table/build 端点
data_reader.py 添加 invalidate_stock_business_cache()
data_jobs_tasks.py 构建成功后自动清缓存
index.html 数据中心页面添加大宽表状态卡片
data_jobs.js 宽表状态加载和构建提交 JS
startup_runtime.py PARQUET_ASSETS 添加 stock_business.parquet
run.py 启动时打印宽表状态

功能

  • 🟢 数据中心页面显示宽表状态 badge(正常/需更新/缺失)
  • 🔨 手动构建/更新按钮(18:00 前禁用)
  • 🔄 构建后自动清缓存,后续请求立即读到新数据
  • 📋 启动时打印宽表状态到终端

测试

pytest — 295 passed, 1 skipped
(唯一 FAIL 是已有的 README 测试,与本次无关)

🤖 Generated with Claude Code

henrylin99 and others added 4 commits June 7, 2026 08:56
## text2sql 查询修复

- QueryExecutor: 自动从 Parquet 加载最新日数据到 SQLite 临时表,
  支持列名别名(vol/factor_vol 双列兼容)
- NLP Processor: 添加 money_flow_fields 和 ROE 字段识别,
  修复排序提取(最多/前N名), 修复 % 预处理, 扩展金叉模式匹配
- SQL Generator: 技术指标/资金流查询路由到多表 JOIN builder,
  添加 golden_cross 处理, 修复排序和 stock_name JOIN

## 大宽表自动构建

- 新建 wide_table_builder.py: 从 daily_basic/stk_factor/moneyflow/
  stock_basic 合并最新交易日数据(317MB → 1.4MB)
- 新建 wide_table_status.py: 状态检查 + 18:00 校验逻辑
- 注册为 derived job, 数据中心页面添加状态卡片和构建按钮
- 启动时打印宽表状态, 构建成功后自动清除缓存

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
1. Text2SQL 缓存失效: QueryExecutor.invalidate_cache() 清除已加载的
   SQLite 临时表, 在 data_jobs_tasks 和 API build 端点均调用
2. 后端 18:00 校验: /wide-table/build 和 /submit 两个路径都检查
   past_cutoff, 防止绕过 UI 提前构建
3. net_mf_vol 列: 宽表构建器和 QueryExecutor 列映射都补充该列

🤞 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
QueryExecutor 在每次查询前检测 Parquet 文件 mtime,
文件被重建后自动重载,无需跨进程信号。
解决 Celery worker 清缓存不影响 web 进程的问题。

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
stock_business/stock_factor/stock_moneyflow 三个虚拟表共享
stock_business.parquet。mtime 改为按 (table_name, parquet_path)
独立追踪,检测到任一虚拟表 stale 时重置所有共享同一源文件的
已加载虚拟表,避免 JOIN 查询混合新旧数据。

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@henrylin99 henrylin99 merged commit 7a9d48b into master Jun 7, 2026
0 of 16 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant