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 现状给出量化选型矩阵。

dsqdsqSQLSQLiteDuckDB2026/11/03

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;同一文件第二次进入 -i REPL 报 table "t_0" already exists。排障细节见《配置参数详解》第六、七章。

三、格式支持一览

官方 README "Supported Data Types" 表(查询日期 2026-11-03):

名称扩展名MIME备注
CSVcsvtext/csv
TSVtsv, tabtext/tab-separated-values
JSONjsonapplication/json须为对象数组,或注明数组路径
Newline-delimited JSONndjson, jsonlapplication/jsonlines
Concatenated JSONcjsonapplication/jsonconcat
ORCorcorc
Parquetparquetparquet
Avroavroapplication/avro
YAMLyaml, ymlapplication/yaml
Excelxlsx, xlsapplication/vnd.ms-excel多 sheet 须指定 sheet 路径
ODSodsapplication/vnd.oasis.opendocument.spreadsheet多 sheet 同上
Apache Error Logs—text/apache2error仅支持管道输入
Apache Access Logs—text/apache2access仅支持管道输入
Nginx Access Logs—text/nginxaccess仅支持管道输入
LogFmt Logslogfmttext/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-20GitHub releases.atom 实测解析
此后发布间隔约 4 年无任何新版本同上
仓库最后一次代码推送2023-09-30GitHub API repos/multiprocessio/dsq
仓库创建时间2022-01-10同上
Star / Fork3860 / 162同上
许可证Apache-2.0(README License 节;API license 字段显示 "Other")README + API

选型含义:功能与格式覆盖至今仍是同类单二进制里最全的一档,但不会有安全补丁、兼容性修复或缺陷修复(第二章两条实测缺陷即为例证);官方自己指路的替代方向是 DuckDB、ClickHouse-local、GlareDB。新项目生产选型优先看第五章;已有脚本、轻量一次性查询场景仍可用,注意按《安装指南》第六章规避已知缺陷。

五、量化选型对比

5.1 官方横向对比表(README "Comparisons",2022 年快照,查询日期 2026-11-03)

名称缓存引擎支持格式二进制大小
dsq有SQLiteCSV、TSV、多种 JSON 变体、Parquet、Excel、ODS、ORC、Avro、YAML、日志49M
q有SQLiteCSV、TSV82M
textql无SQLiteCSV、TSV7.3M
octoql无自研引擎JSON、CSV、Excel、Parquet18M
csvq无自研引擎CSV15M
sqlite-utils无SQLiteCSV、TSV非单二进制
trdsql无SQLite/MySQL/PostgreSQLJSON 变体、TSV、LTSV、TBLN、CSV14M
spysql无自研引擎CSV、JSON、TEXT非单二进制
duckdb未标注自研引擎CSV、Parquet35M

官方未纳入对比的理由(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]相对值
dsq0.20.1(开缓存)1.151 ± 0.0101.00
duckdb0.3.41.723 ± 0.0231.50 ± 0.02
octosql0.7.32.005 ± 0.0081.74 ± 0.02
q3.1.6(开缓存)2.028 ± 0.0101.76 ± 0.02
sqlite33.36.04.204 ± 0.0183.64 ± 0.04
trdsql0.10.012.972 ± 0.22511.27 ± 0.22
spyql0.6.016.985 ± 0.10514.75 ± 0.16
dsq0.20.1(默认)15.030 ± 0.08613.06 ± 0.13
textqlfca00ec19.148 ± 0.18316.63 ± 0.21
q3.1.6(默认)24.061 ± 0.09520.90 ± 0.20

三个解读要点:

  1. dsq 开缓存后最快(1.151s),但默认模式 15.03s、慢 13 倍——它的性能优势完全建立在 --cache 上,一次性冷查询并不占优(缓存机制实测见《配置参数详解》第五章)。
  2. 数据是 2022 年快照:DuckDB 彼时仅 0.3.4,2026-10-21 已发布 v2.0.0(GitHub API 实查),列式引擎四年间的迭代差距不会体现在此表内。
  3. 官方 Notes 自述了架构取舍:dsq/q/textql/trdsql 走"复制进 SQLite"路线,换来成熟稳定的 SQL 方言;自研引擎路线在摄取与列裁剪上更优,但 SQL 子集可能缺语法。

5.3 竞品现状实查(GitHub API,查询日期 2026-11-03)

项目语言Star许可证最后推送最新版本(实查)状态结论
duckdb/duckdbC++25864MIT活跃v2.0.0(2026-10-21 发布)活跃,公司背书
harelba/qPython10361GPL-3.02026-02-06—(以仓库 master 滚动发布)活跃
dinedal/textqlGo9103MIT2023-10-22—停滞
cube2222/octosqlGo5269MPL-2.02024-05-26—停滞
multiprocessio/dsqGo3860Apache-2.02023-09-30v0.23.0(2022-10-20)停更(官方声明)
noborus/trdsqlGo2176MIT2026-10-31v1.2.3(2026-05-29)活跃
mithrandie/csvqGo1630MIT2024-07-25—停滞
GlareDB/glaredbRust1025MIT2025-11-14—放缓(约一年无推送)

5.4 选型结论矩阵

场景推荐理由(基于 5.1–5.3 数据)
生产级分析、GB 级以上数据DuckDB活跃 + 公司背书 + v2.0.0 持续迭代;列式引擎,官方 benchmark 中不开缓存也领先 dsq 默认模式
需要 GUI 探索多源数据DataStation(dsq 同门 GUI)与 dsq 共享引擎库
多格式单文件一行式查询(Parquet/Excel/Avro/YAML/日志混合)且接受停更风险dsq5.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 缺陷)。

七、学习路径

  1. 装:《Ubuntu 22.04 安装 dsq 0.23.0 指南》——官方二进制主方案 + go install 源码备用方案、升降级、卸载。
  2. 配:《dsq 0.23.0 配置参数详解》——11 个 flag、3 个环境变量、SHA1 缓存机制逐项实测。
  3. 用:《dsq 0.23.0 常用 CLI 命令与工具详解》——表引用、JOIN、格式转换、嵌套查询、函数、jq/Shell 集成与退出码。

八、参考链接

dsq 介绍与选型指南 - Quzuo