shencangsheng 发表于 2026-06-16 15:13
Tags:txt,csv,xlsx,json,query-editor,sql-assisant,mysql,sql,
EasyDB v2.11.0:把「会写 SQL」变成你处理一切数据的超能力
不用导入数据库,不用写脚本,不用装一堆工具。一份 CSV、一个 Excel、一张 MySQL 表,用一条标准 SQL 就能查、能联、能导出。打开即用,全程离线。
先放结论:如果你经常要从各种文件和数据库里捞数据、对数、做清洗,EasyDB 大概率能帮你省下大量「为了查几行数据而折腾环境」的时间。这篇文章会先讲它能帮你做什么,再讲 v2.11.0 这次更新带来了什么。
一、它到底能帮你解决什么问题?
我们每天都在和数据打交道,但很多场景其实卡在「工具太重」上:
- 想查一份几百 MB 的 CSV 里满足条件的行 → Excel 打不开,命令行
grep又写不出复杂条件 - 想把一个 Excel 报表和数据库里的表对一下账 → 得先把 Excel 导入数据库,建表、定字段类型、写导入脚本……
- 想把清洗后的数据生成 INSERT 语句灌进另一个库 → 手写 SQL 或者临时写个 Python 脚本
- 想用窗口函数、子查询分析本地文件 → 文件不是数据库,根本没法直接跑 SQL
EasyDB 的思路很简单:把文件直接当成数据库表,让你用最熟悉的 SQL 去操作一切数据源。 你已经会的 SQL 技能,在这里能用到 CSV、Excel、JSON、Parquet 上,甚至和 MySQL、PostgreSQL 混在一条语句里查。
-- Excel 报表 × PostgreSQL 库存表,一次 JOIN 对完账
SELECT t1."product_name", t2."inventory_count"
FROM read_excel('/data/products.xlsx') AS t1
INNER JOIN
read_postgres('inventory', host => 'localhost', username => 'postgres', db => 'mydb') AS t2
ON t1."product_id" = t2."id"
WHERE t2."inventory_count" < 100;
没有建表,没有导入,没有 ETL。把文件路径写进 SQL,回车,结果就出来了。
二、它适合谁?几个真实场景
数据分析师 / 运营:拿到一份几十万行的 Excel/CSV,只想筛出符合条件的几行、做个分组统计。拖进 EasyDB,写一句 SQL,⌘Enter 就出结果——比在 Excel 里拉筛选、写公式快得多,文件再大也不卡。
-- 按部门算平均薪资(窗口函数)
SELECT "name", "department", "salary",
AVG("salary") OVER (PARTITION BY "department") AS dept_avg
FROM read_csv('/data/employees.csv');
DBA / 后端工程师:要把一批文件数据导入数据库,或者把一张表的数据迁到另一个库。用 EasyDB 查出来,直接导出成 INSERT / UPDATE 语句(可选 MySQL / PostgreSQL 方言),还能重命名字段、移除多余列、指定每列的目标类型,生成的 SQL 拿来就能执行。
需要跨源核对数据的人:本地文件和线上数据库的数据不一致?不用来回导出导入,一条 JOIN 直接在同一条 SQL 里比对。
任何临时要查数据、又不想搭环境的人:日志文件、导出的报表、第三方给的数据包……拖进来就能查。完全离线,数据不出本机,敏感数据也放心。
-- 在日志文件里用正则筛出错误行(整行作为一列 column_1)
SELECT *
FROM read_text('/data/app.log', has_header => false)
WHERE REGEXP_LIKE("column_1", '^ERROR:\s+\d{3}');
三、为什么是 EasyDB,而不是别的?
- 真·开箱即用:原生桌面应用(macOS / Windows),下载安装就能用,不需要 CLI、不需要写代码、不需要联网加载资源
- 够快、够省:基于 Rust + Apache DataFusion,几百 MB 到数 GB 的文件也能稳定处理,硬件要求不高
- SQL 足够完整:多表 JOIN、子查询、窗口函数、正则匹配……DataFusion 提供的是完整 SQL,不是阉割版
- 拖拽即生成 SQL:文件拖进编辑器自动生成查询语句,配合语法高亮、智能补全(函数名 + 列名)、格式化,写起来很顺
- 数据安全:纯本地运行,全程离线,数据不上传任何服务器
经常有人问:「这不就是 DuckDB 吗?」两者定位不同,各有长短,这里客观对比一下:
| 维度 | EasyDB | DuckDB |
|---|---|---|
| 使用方式 | 原生桌面 GUI,拖文件即查 | CLI / 编程 API,可嵌入程序 |
| 上手门槛 | 会写 SQL 就行 | 需了解其语法与 API |
| 查询性能 | 够用,常规分析流畅 | 更强,向量化引擎在大规模 OLAP 上领先 |
| 生态扩展 | 内置数据源,开箱即用 | 扩展丰富、社区活跃、可编程性强 |
| SQL 导出 | 内置 INSERT/UPDATE,可选方言 | 需自行编程实现 |
| 集成能力 | 独立桌面应用,不便嵌入其他程序 | 可作为库嵌入 Python/Java 等,便于自动化 |
DuckDB 的优势:自研向量化引擎性能更强,尤其在大规模分析查询上;生态成熟、扩展多,能作为库嵌入程序,适合做数据管道和自动化。它的代价是更偏开发者——没有原生 GUI,需要命令行或写代码。
EasyDB 的优势:原生桌面应用、开箱即用、拖拽生成 SQL、内置 SQL 导出,会写 SQL 就能上手,适合临时查数、对账、做清洗。它的不足也很明显——查询性能和生态扩展性不及 DuckDB,也不适合嵌入到其他程序里做自动化。
一句话:要把分析能力嵌进程序、追求极致性能,选 DuckDB;想拖个文件写句 SQL 马上拿结果,选 EasyDB。
四、v2.11.0 这次更新了什么
距离上次在社区分享 v2.8.0,EasyDB 连续迭代了 v2.9、v2.10、v2.11,这里一次性讲清楚。
read_json() 回归,标准 JSON 数组终于支持
早期切换查询引擎时 read_json() 曾被临时移除,只能逐行读 NDJSON。但很多人手上的 JSON 其实是标准数组格式([{...}, {...}])。这次它正式回归,而且更聪明:
- 自动识别格式——按文件内容嗅探,
[开头当标准 JSON 数组,{开头当 NDJSON,嗅探不出再回退扩展名 .json与.ndjson都能直接用,编辑器补全和拖拽模板统一改用read_json()- 修复了带 UTF-8 BOM 的 JSON 数组被误判为 NDJSON 的问题
SELECT * FROM read_json('/data/records.json') WHERE "status" = 'active';
导出 SQL 一键复制到剪贴板
SQL 导出对话框新增**「复制 SQL 语句」,生成的 INSERT / UPDATE 不必再落地成文件,直接复制贴进数据库客户端就能跑。导出 / 复制全流程都加了进行中 / 成功 / 失败**状态提示;复制超过 10,000 行会自动截断并给出警告。
保存常用查询,告别重复粘贴(v2.10)
- 常用 SQL 可命名保存,在左侧栏随时加载,支持搜索筛选与删除
- 查询历史增强:关键词搜索、显示条数配置(50 / 100 / 200 / 500 / 全部)、按时间清理(7 / 30 / 90 天前或全部清空)
- 执行后自动切到结果页签,底部显示本次查询耗时
表头直接显示列类型(v2.9)
查询结果表头会展示每列的 Arrow 类型,一眼看清数据结构;SQL 导出的列类型配置也直接复用查询结果的类型信息,少一次后端请求。
性能与稳定性
- SQL 生成改用 RecordBatch 批处理,显著降低导出内存占用
- Apache DataFusion 升级至 53.1.0
- 优化 Excel 日期时间解析,修复序列号被误当日期字符串、空格分隔日期时间等问题
- 修复注册远程文件路径(HTTP / S3 等 URL)时误报「文件不存在」的问题
数据源一览
| 格式 | 函数 | 说明 |
|---|---|---|
| CSV | read_csv() |
自定义分隔符、表头、Schema 推断 |
| TSV | read_tsv() |
Tab 分隔文件 |
| Text | read_text() |
通用文本文件,自定义分隔符 |
| Excel | read_excel() / read_xlsx() |
.xlsx 支持,可选工作表 |
| JSON | read_json() |
标准 JSON 数组与 NDJSON,自动检测 |
| NdJson | read_ndjson() |
每行一个 JSON 对象 |
| Parquet | read_parquet() |
列式存储格式 |
| MySQL | read_mysql() |
直连 MySQL 数据库表 |
| PostgreSQL | read_postgres() |
直连 PostgreSQL 数据库表 |
技术栈
| 层级 | 技术 |
|---|---|
| 前端 | React 18 + TypeScript + Vite |
| 后端 | Rust + Tauri v2 |
| 查询引擎 | Apache DataFusion 53.1.0 |
| UI 框架 | HeroUI + Tailwind CSS |
| SQL 编辑器 | Ace Editor (react-ace) |
| SQL 解析 | sqlparser-rs (Rust) + node-sql-parser (JS) |
| 历史存储 | SQLite (rusqlite) |
快速开始
- 访问 GitHub Releases 下载安装包
- macOS:下载
.dmg,拖拽到应用程序文件夹 - Windows:下载
.exe,运行安装程序 - 拖拽任意文件到编辑器自动生成 SQL,按
⌘Enter执行
macOS 若提示「应用已损坏」,在终端执行:
xattr -r -d com.apple.quarantine /Applications/EasyDB.app
GitHub:https://github.com/shencangsheng/easydb_app
EasyDB 是我利用业余时间维护的开源项目,如果它能帮你少折腾一点、多省一点时间,欢迎点个 Star,也欢迎到 Issues 提想法和反馈——很多功能就是这么一点点被大家提出来、加进去的。
Ext Link: https://github.com/shencangsheng/easydb_app
评论区
写评论还没有评论