dsq 介绍与选型指南
dsq(multiprocessio/dsq)定位、机制与选型全解:SQLite 方言查询 15 类结构化文件的单二进制 CLI;如实说明官方停更状态(最后版本 v0.23.0/2022-10-20),基于官方 Comparisons/Benchmark 与 2026-11-03 GitHub API 实查的 DuckDB/q/textql/csvq/trdsql/OctoSQL 现状给出量化选型矩阵。
dsq 介绍与选型指南
目标:介绍 dsq(github.com/multiprocessio/dsq)的定位、核心机制、格式支持与真实维护状态(含停更事实),并基于官方 README 对比表、官方 benchmark 与 2026-11-03 联网实查的各竞品仓库现状,给出量化选型结论。动手部分见本专栏另外三篇:安装 《Ubuntu 22.04 安装 dsq 0.23.0 指南》、参数 《dsq 0.23.0 配置参数详解》、实战 《dsq 0.23.0 常用 CLI 命令与工具详解》。
一、dsq 是什么
dsq 是 DataStation(GUI 数据查询客户端)的 CLI 伴生组件:用 SQLite 方言 SQL 直接查询 JSON、CSV、TSV、Parquet、Excel、Avro、YAML、NDJSON、logfmt、nginx/apache 日志等结构化文件,单 Go 二进制、Apache-2.0 许可、无守护进程、零配置文件。文件即表——每个输入文件按命令行序号成为 {N} 引用的表,{} 即 {0}。
一分钟体验(Ubuntu 22.04 实测回显):
$ printf "id,name\n1,Ted\n2,Marjory\n3,Micah\n" > users.csv
$ dsq --pretty users.csv "SELECT * FROM {}"
+----+---------+
| id | name |
+----+---------+
| 1 | Ted |
| 2 | Marjory |
| 3 | Micah |
+----+---------+
(3 rows)
不带查询时它就是格式转换器(CSV→JSON 实测):
$ dsq users.csv | cat
[{"id":"1","name":"Ted"},
{"id":"2","name":"Marjory"},
{"id":"3","name":"Micah"}]
二、核心机制
输入(文件参数 / stdin + -s 类型声明)
→ 格式解析器(按扩展名/MIME 识别,11 类格式)
→ 临时 SQLite 库(默认内存;--cache 持久化到 /tmp/dsq-cache-<sha1>.db)
→ SQLite 方言 SQL 执行(外加 go-sqlite3-stdlib 扩展函数:stddev、best-effort 日期解析、URL 解析等)
→ 输出(默认 JSON 对象流 / --pretty ASCII 表格 / REPL 交互)
实测确认的关键机制事实:
- 引擎链路:dsq 把 DataStation 当库用,DataStation 底层用 SQLite 执行查询(官方 README "Engine" 节原文,查询日期 2026-11-03)。
- 二进制动态依赖 glibc(CGO 链接 SQLite C 库),
ldd实测可见libc.so.6等条目;musl 系发行版不能直接运行官方二进制。 - 缓存文件是标准 SQLite 库,表名
t_0、t_1……可直接用 sqlite3 二次分析(实测.tables回显t_0)。 - 缓存粒度是"导入"而非"结果":文件不变、换查询语句仍命中(官方 README "Caching" 节)。
- 已知缺陷(v0.23.0 实测,仓库停更后不会修复):JSON 模式
>>追加重定向报write /dev/stdout: copy_file_range: bad file descriptor;同一文件第二次进入-iREPL 报table "t_0" already exists。排障细节见《配置参数详解》第六、七章。
三、格式支持一览
官方 README "Supported Data Types" 表(查询日期 2026-11-03):
| 名称 | 扩展名 | MIME | 备注 |
|---|---|---|---|
| CSV | csv | text/csv | |
| TSV | tsv, tab | text/tab-separated-values | |
| JSON | json | application/json | 须为对象数组,或注明数组路径 |
| Newline-delimited JSON | ndjson, jsonl | application/jsonlines | |
| Concatenated JSON | cjson | application/jsonconcat | |
| ORC | orc | orc | |
| Parquet | parquet | parquet | |
| Avro | avro | application/avro | |
| YAML | yaml, yml | application/yaml | |
| Excel | xlsx, xls | application/vnd.ms-excel | 多 sheet 须指定 sheet 路径 |
| ODS | ods | application/vnd.oasis.opendocument.spreadsheet | 多 sheet 同上 |
| Apache Error Logs | — | text/apache2error | 仅支持管道输入 |
| Apache Access Logs | — | text/apache2access | 仅支持管道输入 |
| Nginx Access Logs | — | text/nginxaccess | 仅支持管道输入 |
| LogFmt Logs | logfmt | text/logfmt |
其中 CSV、NDJSON、TSV、YAML、logfmt、cjson、nginx 日志、JSON 嵌套路径等转换与查询能力均已在实测环境逐一验证(回显见《常用 CLI 命令与工具详解》第五、六章)。
四、维护状态(如实说明)
dsq 已停止积极开发。 官方 README 顶部原文(查询日期 2026-11-03):
# Not under active development
While development may continue in the future with a different
architecture, for the moment you should probably instead use
DuckDB, ClickHouse-local, or GlareDB (based on DataFusion).
配套事实链(均 2026-11-03 实查):
| 事实 | 数据 | 来源 |
|---|---|---|
| 最后一次正式发布 | v0.23.0,2022-10-20 | GitHub releases.atom 实测解析 |
| 此后发布间隔 | 约 4 年无任何新版本 | 同上 |
| 仓库最后一次代码推送 | 2023-09-30 | GitHub API repos/multiprocessio/dsq |
| 仓库创建时间 | 2022-01-10 | 同上 |
| Star / Fork | 3860 / 162 | 同上 |
| 许可证 | Apache-2.0(README License 节;API license 字段显示 "Other") | README + API |
选型含义:功能与格式覆盖至今仍是同类单二进制里最全的一档,但不会有安全补丁、兼容性修复或缺陷修复(第二章两条实测缺陷即为例证);官方自己指路的替代方向是 DuckDB、ClickHouse-local、GlareDB。新项目生产选型优先看第五章;已有脚本、轻量一次性查询场景仍可用,注意按《安装指南》第六章规避已知缺陷。
五、量化选型对比
5.1 官方横向对比表(README "Comparisons",2022 年快照,查询日期 2026-11-03)
| 名称 | 缓存 | 引擎 | 支持格式 | 二进制大小 |
|---|---|---|---|---|
| dsq | 有 | SQLite | CSV、TSV、多种 JSON 变体、Parquet、Excel、ODS、ORC、Avro、YAML、日志 | 49M |
| q | 有 | SQLite | CSV、TSV | 82M |
| textql | 无 | SQLite | CSV、TSV | 7.3M |
| octoql | 无 | 自研引擎 | JSON、CSV、Excel、Parquet | 18M |
| csvq | 无 | 自研引擎 | CSV | 15M |
| sqlite-utils | 无 | SQLite | CSV、TSV | 非单二进制 |
| trdsql | 无 | SQLite/MySQL/PostgreSQL | JSON 变体、TSV、LTSV、TBLN、CSV | 14M |
| spysql | 无 | 自研引擎 | CSV、JSON、TEXT | 非单二进制 |
| duckdb | 未标注 | 自研引擎 | CSV、Parquet | 35M |
官方未纳入对比的理由(README 原文归纳):clickhouse-local 最快但体积 2GB 以上不适合通用 CLI;sqlite3、datafusion-cli 摄取 CSV 需多条命令、不适合一行式查询。
5.2 官方 benchmark(README "Benchmark",2022-06-19 运行,OVH 裸金属 4c/8t Xeon E3-1230v6、64GB DDR4、NVMe SoftRAID;NYC Yellow Taxi 2021-04 CSV:200MB、约 200 万行、18 列;查询 SELECT passenger_count, COUNT(*), AVG(total_amount) FROM taxi.csv GROUP BY passenger_count)
(下表为官方原表的 Mean/Relative 两列节选,Min/Max 见来源原文)
| 程序 | 版本 | 均值 [s] | 相对值 |
|---|---|---|---|
| dsq | 0.20.1(开缓存) | 1.151 ± 0.010 | 1.00 |
| duckdb | 0.3.4 | 1.723 ± 0.023 | 1.50 ± 0.02 |
| octosql | 0.7.3 | 2.005 ± 0.008 | 1.74 ± 0.02 |
| q | 3.1.6(开缓存) | 2.028 ± 0.010 | 1.76 ± 0.02 |
| sqlite3 | 3.36.0 | 4.204 ± 0.018 | 3.64 ± 0.04 |
| trdsql | 0.10.0 | 12.972 ± 0.225 | 11.27 ± 0.22 |
| spyql | 0.6.0 | 16.985 ± 0.105 | 14.75 ± 0.16 |
| dsq | 0.20.1(默认) | 15.030 ± 0.086 | 13.06 ± 0.13 |
| textql | fca00ec | 19.148 ± 0.183 | 16.63 ± 0.21 |
| q | 3.1.6(默认) | 24.061 ± 0.095 | 20.90 ± 0.20 |
三个解读要点:
- dsq 开缓存后最快(1.151s),但默认模式 15.03s、慢 13 倍——它的性能优势完全建立在
--cache上,一次性冷查询并不占优(缓存机制实测见《配置参数详解》第五章)。 - 数据是 2022 年快照:DuckDB 彼时仅 0.3.4,2026-10-21 已发布 v2.0.0(GitHub API 实查),列式引擎四年间的迭代差距不会体现在此表内。
- 官方 Notes 自述了架构取舍:dsq/q/textql/trdsql 走"复制进 SQLite"路线,换来成熟稳定的 SQL 方言;自研引擎路线在摄取与列裁剪上更优,但 SQL 子集可能缺语法。
5.3 竞品现状实查(GitHub API,查询日期 2026-11-03)
| 项目 | 语言 | Star | 许可证 | 最后推送 | 最新版本(实查) | 状态结论 |
|---|---|---|---|---|---|---|
| duckdb/duckdb | C++ | 25864 | MIT | 活跃 | v2.0.0(2026-10-21 发布) | 活跃,公司背书 |
| harelba/q | Python | 10361 | GPL-3.0 | 2026-02-06 | —(以仓库 master 滚动发布) | 活跃 |
| dinedal/textql | Go | 9103 | MIT | 2023-10-22 | — | 停滞 |
| cube2222/octosql | Go | 5269 | MPL-2.0 | 2024-05-26 | — | 停滞 |
| multiprocessio/dsq | Go | 3860 | Apache-2.0 | 2023-09-30 | v0.23.0(2022-10-20) | 停更(官方声明) |
| noborus/trdsql | Go | 2176 | MIT | 2026-10-31 | v1.2.3(2026-05-29) | 活跃 |
| mithrandie/csvq | Go | 1630 | MIT | 2024-07-25 | — | 停滞 |
| GlareDB/glaredb | Rust | 1025 | MIT | 2025-11-14 | — | 放缓(约一年无推送) |
5.4 选型结论矩阵
| 场景 | 推荐 | 理由(基于 5.1–5.3 数据) |
|---|---|---|
| 生产级分析、GB 级以上数据 | DuckDB | 活跃 + 公司背书 + v2.0.0 持续迭代;列式引擎,官方 benchmark 中不开缓存也领先 dsq 默认模式 |
| 需要 GUI 探索多源数据 | DataStation(dsq 同门 GUI) | 与 dsq 共享引擎库 |
| 多格式单文件一行式查询(Parquet/Excel/Avro/YAML/日志混合)且接受停更风险 | dsq | 5.1 表中格式覆盖最广的单二进制;SQLite 方言完整;配合 --cache 有 benchmark 最快成绩 |
| 只用 CSV/TSV、要长期维护 | q | 活跃(2026-02 仍有推送)、有缓存;注意 GPL-3.0 与 82M 体积 |
| 多数据库/文件联合查询、要活跃维护 | trdsql | 活跃(2026-10-31 推送、v1.2.3),引擎可挂 SQLite/MySQL/PostgreSQL;格式覆盖窄于 dsq(无 Parquet/Excel) |
| 仅 CSV 的定制 SQL 方言 | csvq | 功能专一但已停滞(2024-07 最后推送) |
| 超大体量、可接受重量级工具 | clickhouse-local | 官方 benchmark 自述"比表中所有都快",但 2GB+ 体积不适合通用 CLI |
六、典型适用场景(实测能力支撑)
- 异构文件 JOIN:CSV×JSON 两文件 join 实测 3 行输出(《常用 CLI 命令与工具详解》4.1/4.2)。
- Web 日志即席分析:nginx access log 管道输入解析 11 列,按状态码过滤实测返回 500/404 两行(同书 2.2)。
- 格式批量转换:YAML/logfmt/NDJSON/TSV/cjson/Parquet → JSON 全部实测通过(同书第五章)。
- Shell 报表流水线:聚合结果经
jq -r取标量进变量,GMV: 381.3实测(同书 9.2)。 - 嵌套 JSON 查询:
{"data.data"}路径引用、"location.city"标量路径、->N数组操作符实测通过(同书 3.2/6.1/6.2)。
不适用:需要长期安全维护的生产链路(停更)、musl 系发行版直接跑官方二进制(glibc 依赖)、JSON 输出追加重定向脚本(v0.23.0 缺陷)。
七、学习路径
- 装:《Ubuntu 22.04 安装 dsq 0.23.0 指南》——官方二进制主方案 + go install 源码备用方案、升降级、卸载。
- 配:《dsq 0.23.0 配置参数详解》——11 个 flag、3 个环境变量、SHA1 缓存机制逐项实测。
- 用:《dsq 0.23.0 常用 CLI 命令与工具详解》——表引用、JOIN、格式转换、嵌套查询、函数、jq/Shell 集成与退出码。
八、参考链接
- dsq 仓库(README 含停更声明、Comparisons、Benchmark):https://github.com/multiprocessio/dsq(GitHub API/releases.atom 实查日期 2026-11-03)
- DataStation:https://github.com/multiprocessio/datastation
- DuckDB(v2.0.0,2026-10-21 发布):https://github.com/duckdb/duckdb
- q:https://github.com/harelba/q
- textql:https://github.com/dinedal/textql
- csvq:https://github.com/mithrandie/csvq
- OctoSQL:https://github.com/cube2222/octosql
- trdsql(v1.2.3):https://github.com/noborus/trdsql
- GlareDB:https://github.com/GlareDB/glaredb
- go-sqlite3-stdlib 扩展函数:https://github.com/multiprocessio/go-sqlite3-stdlib