easydb_app
用 SQL 直接查询本地 CSV/Excel/JSON/Parquet 等文件,内置 DataFus
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
用 SQL 直接查询本地 CSV/Excel/JSON/Parquet 等文件,内置 DataFus
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
「每次想分析一个 Excel 文件,都要先打开 Excel → 另存为 CSV → 导入数据库→ 才能写 SQL。EasyDB 说:不需要。」
你有没有过这样的经历:运营同学发来一份 300MB 的 CSV 日志,分析师丢给你一个 Parquet 文件,产品经理给你一个 TSV——每次都要折腾半天才能开始真正的数据分析。而 EasyDB 这款开源工具,正在用一种极其优雅的方式解决这个问题:让所有本地文件直接变成「数据库表」,用你最熟悉的 SQL 去查询它们。
在数据分析领域,有一个长期被忽视的中间地带:当你需要查询的不是一个数据库,而是一堆格式各异的本地文件时,市面上几乎找不到趁手的工具。
Excel 用户可以排序筛选,但面对多表关联、复杂聚合时力不从心;专业数据库用户需要先把文件导入,动辄十几分钟;Python 程序员可以用 pandas 搞定,但每次都要写脚本、跑代码。非技术背景的同事更是两眼一抹黑。
EasyDB 精准地切入了这个场景。它不追求替代 Excel,也不打算挑战数据库,而是**重新定义「零门槛数据查询」**的边界:只要你懂一点 SQL,就可以查询任何格式的本地文件。
EasyDB 的技术选型相当有诚意。它的后端由 Rust 语言编写,这意味着内存安全、高性能和极低的运行时开销——对于一个桌面数据处理工具来说,这些都是关键指标。
核心引擎是 Apache DataFusion 53.1.0。DataFusion 是 Apache 基金会的顶级项目,本身就是一个用 Rust 实现的可扩展 SQL 查询引擎,在 Arrow 列式存储基础上构建,具备完整的 SQL 支持能力,包括 JOIN、子查询、窗口函数、正则匹配等高级特性。EasyDB 将 DataFusion 封装为本地查询服务,通过 Tauri 的 IPC 机制与前端 React 应用通信。
Rust 后端的模块划分非常清晰:
commands/ — Tauri IPC 命令层,暴露 fetch(执行查询)、fetch_page(分页)、fetch_column_types(获取列类型)等前端可调用的命令reader/ — 文件格式读取,excel.rs 负责 Excel 解析(依赖 calamine 库),其他格式由 DataFusion 原生支持sql/ — SQL 生成与解析,generator.rs 处理拖拽生成 SQL 逻辑,parse.rs 做 SQL 语法解析(依赖 sqlparser)context/ — 查询上下文管理,处理 Schema 推断和文件→表映射关系前端则采用 React 18 + TypeScript,通过 @tauri-apps/api 与 Rust 通信,SQL 编辑器使用 ace-builds,UI 组件库选用 @heroui/react(原 CloudUI),动画使用 framer-motion。整体技术栈现代、简洁,没有历史包袱。
EasyDB 远不止是一个格式转换工具。它的野心是成为本地数据的「统一查询层」。
多格式直读是其最核心的能力。它将每种文件格式视为一个「表」,自动推断 Schema:CSV 的列名和类型从表头推断,Parquet 的列信息从元数据读取,JSON/NDJSON 按行解析,Excel 则调用 Rust 的 calamine 库解析 .xlsx。这意味着用户完全不需要手动指定格式,拖进去就能查。
完整的 SQL 支持。DataFusion 底层对 SQL 的覆盖相当全面,JOIN(包括多表、LEFT/RIGHT/INNER)、子查询、聚合函数(COUNT、SUM、AVG、GROUP BY)、窗口函数(ROW_NUMBER、RANK、LEAD/LAG)、正则表达式匹配——这些在普通工具里需要写 Python 脚本才能完成的功能,在 EasyDB 里只需要一行 SQL。
数据库直连。除了本地文件,EasyDB 还能直连 MySQL 和 PostgreSQL(通过 datafusion-table-providers 插件)。这意味着你可以在一条 SQL 里 JOIN 本地 CSV 和远程 MySQL 表——这在数据探索场景里极其有用。
智能编辑器。前端 SQL 编辑器支持语法高亮、自动补全(函数名 + 列名联想)、格式化(sql-formatter),以及拖拽文件到编辑器自动生成 SELECT 语句的「懒人模式」。查询结果以虚拟滚动表格展示(@tanstack/react-table),支持分页和导出。
作为一款 Tauri 桌面应用,EasyDB 不提供服务端部署方式,也不支持 Docker。它需要用户在本地编译运行。
构建步骤:安装 Rust 1.89+、Node.js 18+,通过 yarn install 安装前端依赖,再执行 cargo build --release 编译 Rust 后端(编译时间取决于机器性能,通常 3-10 分钟)。生成物是一个可分发的二进制文件,支持 macOS 和 Windows 双平台。
硬件需求极低:512MB 内存、200MB 磁盘空间,无需 GPU。对于经常需要处理本地数据的分析师、产品经理来说,这比安装一个 MySQL 实例要轻便得多。
值得注意的是,项目目前没有提供预编译的安装包,需要用户自行编译才能使用。这对于非技术用户是一个门槛,但考虑到项目的技术定位(开发者/分析师工具),这个设计取舍是合理的。
尽管 EasyDB 解决了文件查询的痛点,但它并非银弹。
性能边界。DataFusion 是内存计算引擎,查询超大型文件时性能高度依赖可用内存。对于 GB 级别的 Parquet 文件,如果机器内存不足,查询可能变慢甚至 OOM。这一点在文档中没有明确说明,容易让新用户产生过高预期。
缺少写入能力。目前 EasyDB 是只读的,只能查询现有数据,不能写入或创建新表。如果需要将查询结果写回文件,只能通过导出功能实现,不支持 CREATE TABLE 或 INSERT 操作。
编译门槛。没有提供预编译二进制包是当前最大的用户体验问题。非 Rust 开发者需要安装完整的 Rust 工具链才能运行,对于只想快速查询数据的用户来说,这个门槛可能劝退不少人。
EasyDB 的出现反映了一个趋势:SQL 作为数据查询语言的正统地位,正在从数据库扩展到所有结构化数据载体。
近年来,DuckDB、Polars、DataFusion 等 Rust 原生 OLAP 引擎的崛起,让「在任意数据源上跑 SQL」变得前所未有地轻量和高效。EasyDB 踩在这个技术浪潮上,用一个精心设计的 UI 把 DataFusion 的能力普惠化,让不懂代码的人也能享受高性能 SQL 的威力。
从 GitHub 625 颗星、33 个 Fork 的数据来看,这个项目已经积累了可观的用户关注。随着数据文件分析需求的持续增长,EasyDB 有望成为数据工作者桌面上的「瑞士军刀」。