高效提取数据库分析上下文:如何使用 Parquet 文件为大模型提供数据理解能力
在利用大语言模型(LLM)自动生成分析代码时,我们经常面临一个问题:无法将完整的数据库数据作为提示词提供给模型,因为数据量太大、隐私敏感或成本高。
本文将介绍一种高效、结构化的数据摘要方法,帮助将数据库数据导出并转换为结构描述 + 示例数据,以便 LLM 快速理解上下文,从而生成正确的数据处理代码。
场景背景
开发过程中可能正处于如下场景中:
- 从数据库中查询了大量数据(百万行以上)
- 想让大模型帮你写分析代码
- 但无法把全部数据放进提示词(Token 受限)
- 我们只想告诉模型:“这个文件包含哪些字段?每列什么类型?长什么样?”
于是,我们需要一种方法来:
✨ 快速保存查询数据,并提取 schema 和部分示例,生成简洁的上下文描述供 LLM 使用。
为什么不用 CSV?
虽然 CSV 是最常见的数据导出格式,但它存在很多局限:
问题 | 说明 |
---|---|
无数据类型信息 | 所有内容都是字符串,模型不知道哪些是数字、时间等 |
文件大 | 无压缩,占空间大,加载慢 |
不支持嵌套结构 | 如果有 JSON 列、数组列,几乎无法兼容 |
不利于筛选 | 无列式存储,不方便快速读取前几行 |
解决方案:使用 Parquet 格式
Parquet 是一种高性能、列式存储格式,广泛用于大数据与分析场景。
优势:
- 自动保存 schema(列名 + 数据类型)
- 支持压缩,文件更小
- 可快速读取前几行做数据预览
- 与 Pandas、DuckDB、Polars、PyArrow 等工具无缝配合
- 易于写脚本提取结构摘要
从数据库导出为 Parquet 文件
你可以使用 Pandas + SQLAlchemy 查询数据库,并分批写入 Parquet 文件,避免内存爆炸:
import pandas as pd |
如何提取结构信息供 LLM 使用
使用 pyarrow
和 pandas
,你可以快速提取:
- 文件名
- schema(字段名 + 数据类型)
- 前几行数据样例
示例代码如下:
import pyarrow.parquet as pq |
输出结构如下(可直接用于提示词):
{ |
批量处理多个 Parquet 文件
可以扩展上面的函数批量提取一个目录下所有 Parquet 文件的摘要:
import glob |
如果使用 DuckDB 也可以这么做
DuckDB 支持 SQL 操作 Parquet,也可以将查询结果直接存入自己的 .duckdb
文件:
import duckdb |
然后也可以从中提取 schema 和前几行:
schema = con.execute("DESCRIBE my_table").fetchall() |
推荐的 LLM Prompt 模板
你正在分析以下数据文件:users.parquet |
附加对比:CSV vs Parquet 性能简表(10 万行示例)
操作 | CSV(10 万行) | Parquet(10 万行) |
---|---|---|
文件大小 | 25MB | 3MB |
读取耗时(Pandas) | 1.5 秒 | 0.3 秒 |
获取 schema 是否方便 | 手动推断 | 自动获取 |
是否支持部分列读取 | 否 | 支持 |
是否支持压缩 | 无 | 内建 |
实际表现视数据列数与类型不同而略有差异,但 Parquet 通常在 IO 和内存方面明显优于 CSV。
推荐工作流
[数据库查询] |
写在最后
借助 Parquet 文件的结构化能力和 Python 脚本的自动化,可以轻松实现:
- 从海量数据库数据中提取关键摘要
- 为大模型提供最小上下文
- 触发高质量、上下文感知的数据分析代码生成
未来甚至可以将这套流程封装为命令行工具或 Web 服务,实现一键摘要生成和提示上下文注入。
参考内容:
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 SunnyALion!
评论