Ubuntu 22.04 安装 dsq 0.23.0 指南
Ubuntu 22.04 从零安装 dsq 0.23.0(multiprocessio/dsq,用 SQL 查询 JSON/CSV/Parquet 等结构化文件的 Go 单二进制 CLI)实测全流程:官方二进制主方案与 go install 源码备用方案、版本对照、升降级与多版本管理、卸载清理及 4 条排障实录。
Ubuntu 22.04 安装 dsq 0.23.0 指南
目标:在 Ubuntu 22.04(x86_64)服务器上从零完成 dsq 0.23.0 的安装——版本选型对照、官方二进制主方案(下载/校验/部署/验证)、Go 源码编译备用方案、升级降级与多版本管理、常见问题排障实录与卸载清理。dsq(github.com/multiprocessio/dsq)是 Apache-2.0 许可的 Go 单二进制 CLI,用 SQLite 方言 SQL 直接查询 JSON/CSV/Parquet/Excel 等结构化文件;正文所有命令与回显均为真实环境实测,逐行照抄。
一、环境信息
| 项目 | 值 | 说明 |
|---|---|---|
| 操作系统 | Ubuntu 22.04 LTS(x86_64) | 最小化安装,自带 wget |
| 操作账号 | root | 全文命令以 root 执行 |
| 组件 | dsq v0.23.0 | multiprocessio/dsq 最新稳定版(2022-10-20 发布) |
| 安装路径 | /usr/local/bin/dsq | 单二进制,无守护进程、无配置文件 |
| 安装包 | dsq-linux-x64-v0.23.0.zip | 21499429 字节,GitHub Releases 官方产物 |
| 包 SHA-256 | dfae1ecd578a4869d75ba815cbbbf3ef962fee60794cada25f50c144d5acccb4 | 实测值 |
| 二进制大小 | 67604584 字节(约 64.5 MiB) | 解压后实测 |
| 查询引擎 | SQLite(内起临时库) | 无需预装任何数据库服务 |
💡 技术拓展:dsq 是 DataStation(GUI 客户端)的 CLI 伴生组件。注意其官方 README 顶部已声明 "Not under active development"(不再积极开发),v0.23.0 为最后一次正式发布,官方推荐的新项目替代方向为 DuckDB、ClickHouse-local、GlareDB。停更状态不影响既有功能安装使用,本文全部按 v0.23.0 实测。
二、版本选型与对照
dsq 发布节奏集中在 2022 年,此后无新版本。官方 releases 订阅源(releases.atom)实测可查的近期版本如下(查询日期 2026-11-03):
| 版本 | 发布日期 | 说明 |
|---|---|---|
| v0.23.0 | 2022-10-20 | 最新稳定版,提供 linux/macos/windows amd64 官方二进制,本文实测版本 |
| v0.22.0 | 2022-08-26 | 上一版,同样提供 linux-x64 二进制,本文用于降级实测 |
| 0.21.0 | 2022-06-29 | 历史版本 |
| 0.20.2 | 2022-06-23 | 历史版本 |
| 0.20.1 | 2022-06-16 | 历史版本 |
| 0.20.0 | 2022-06-14 | 历史版本 |
选型结论:Linux x86_64 服务器直接取 v0.23.0 官方二进制即可,功能面最全(含 REPL、缓存、多文件 join);ARM 或其他架构无官方二进制,走第四章源码编译方案。确认"当前最新版"的命令:
$ wget -qO- https://github.com/multiprocessio/dsq/releases.atom | grep -m1 -oE 'v[0-9]+\.[0-9]+\.[0-9]+'
v0.23.0
三、方案一(主):官方二进制安装
官方为每个 release 提供 amd64 预编译二进制,Linux 下这是官方推荐、耗时最短的方式:下载 zip、校验、解压、放入 PATH,全程秒级完成,不需要编译工具链。
3.1 前置依赖
安装动作本身只需要一个解压工具 unzip(Ubuntu 22.04 默认自带 wget,无需另装下载器):
$ apt-get install -y unzip
Reading state information...
unzip is already the newest version (6.0-26ubuntu3.2).
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
确认两个工具就位:
$ command -v wget unzip
/usr/bin/wget
/usr/bin/unzip
3.2 下载 release 包
按"dsq-<系统小写>-x64-<版本>.zip"的命名规则取 linux 包($(uname -s | awk '{print tolower($0)}') 即 linux):
$ wget https://github.com/multiprocessio/dsq/releases/download/v0.23.0/dsq-linux-x64-v0.23.0.zip
下载尾部实测回显(输出节选,实测首尾):
20750K .......... .......... .......... .......... .......... 99% 524M 0s
20800K .......... .......... .......... .......... .......... 99% 609M 0s
20850K .......... .......... .......... .......... .......... 99% 610M 0s
20900K .......... .......... .......... .......... .......... 99% 598M 0s
20950K .......... .......... .......... .......... ..... 100% 695M=2.1s
2026-11-03 03:26:58 (9.83 MB/s) - 'dsq-linux-x64-v0.23.0.zip' saved [21499429/21499429]
末行 saved [21499429/21499429] 表示完整落盘 21499429 字节。
3.3 完整性校验
官方 release 页未发布校验和,以下 SHA-256 为本文实测基线值,多机分发部署时用它比对包完整性:
$ sha256sum dsq-linux-x64-v0.23.0.zip
dfae1ecd578a4869d75ba815cbbbf3ef962fee60794cada25f50c144d5acccb4 dsq-linux-x64-v0.23.0.zip
3.4 解压并部署到 PATH
$ unzip dsq-linux-x64-v0.23.0.zip
Archive: dsq-linux-x64-v0.23.0.zip
inflating: dsq
$ mv dsq /usr/local/bin/dsq
$ ls -la /usr/local/bin/dsq
-rwxr-xr-x 1 root root 67604584 Oct 20 2022 /usr/local/bin/dsq
zip 内只有一个名为 dsq 的可执行文件(67604584 字节),已自带可执行位,直接 mv 进 /usr/local/bin 即可全局使用。
⚠️ 注意:该二进制并非全静态链接。实测 ldd 显示它动态依赖 glibc(CGO 链接了 SQLite C 库):
$ ldd /usr/local/bin/dsq
linux-vdso.so.1 (0x00007ce9b739b000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007ce9b32ba000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007ce9b32b5000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007ce9b308c000)
/lib64/ld-linux-x86-64.so.2 (0x00007ce9b739d000)
因此它适用于 glibc 系发行版(Ubuntu/Debian/CentOS/RHEL 等);musl 系(Alpine)不能直接运行官方二进制,需源码编译或选 glibc 兼容方案。
3.5 安装验证
版本验证:
$ dsq --version
dsq v0.23.0
功能验证——造一个最小 CSV 并以 ASCII 表格查询:
$ 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)
默认 JSON 输出(管道给 cat 规避 v0.23.0 的重定向缺陷,见第六章第 1 条):
$ dsq users.csv | cat
[{"name":"Ted","id":"1"},
{"id":"2","name":"Marjory"},
{"id":"3","name":"Micah"}]
回显 dsq v0.23.0 且查询出 3 行数据,即安装成功。{} 是"第 0 个输入文件"的表名引用写法,完整查询语法见 CLI 命令详解篇。
四、方案二(备用):go install 源码编译安装
官方二进制只覆盖 amd64。ARM64、其他架构或需要最新代码时,按官方 README 用 Go 1.18+ 从源码安装,产物落在 $HOME/go/bin/dsq。
4.1 安装 Go 工具链
先取当前最新 Go 版本号(避免硬编码过期版本):
$ wget -qO- "https://go.dev/VERSION?m=text" | head -1
go1.27.3
⚠️ 官方下载入口为 https://go.dev/dl/(302 跳转 dl.google.com)。本次实测环境对 go.dev 直连时 TLS 握手被中断,改连跳转目标 dl.google.com/go/ 直链成功;两种地址等价,按网络环境择一:
$ wget -q https://dl.google.com/go/go1.27.3.linux-amd64.tar.gz
$ tar -C /usr/local -xzf go1.27.3.linux-amd64.tar.gz
$ export PATH=$PATH:/usr/local/go/bin
$ go version
go version go1.27.3 linux/amd64
go version 回显即工具链就位。
4.2 源码编译安装
$ export GOPROXY=https://goproxy.cn,direct
$ go install github.com/multiprocessio/dsq@v0.23.0
dsq 依赖 DataStation runner 库,依赖树庞大(实测拉取 118 个模块,含 bigquery、clickhouse-go、aws-sdk 等各数据库驱动)。拉取回显节选(实测首尾):
go: downloading github.com/multiprocessio/dsq v0.23.0
go: downloading github.com/chzyer/readline v1.5.0
go: downloading github.com/google/uuid v1.3.0
go: downloading github.com/multiprocessio/datastation/runner v0.0.0-20221019004540-4e72a6e0af28
go: downloading github.com/olekukonko/tablewriter v0.0.5
...
go: downloading github.com/matttproud/golang_protobuf_extensions v1.0.2
go: downloading github.com/google/go-cmp v0.5.9
命令静默结束即编译成功。依赖与构建缓存就绪后重跑同一命令的实测耗时:
real 0m0.664s
说明:
GOPROXY=https://goproxy.cn,direct为境内网络实测有效的改道配置;若网络能直连 proxy.golang.org 可省略(失败现象与排障见第六章 6.4)。
4.3 验证产物
$ ls -la /root/go/bin/dsq
-rwxr-xr-x 1 root root 69087330 Nov 3 03:35 /root/go/bin/dsq
$ /root/go/bin/dsq --version
dsq latest
⚠️ 注意 go install 产物版本回显是 dsq latest 而非 dsq v0.23.0:官方发版脚本在构建时用 ldflags 注入版本号,go install 不做注入;代码同为 v0.23.0 tag,功能无差别。长期使用记得把 $HOME/go/bin 加入 PATH(写入 ~/.bashrc)。
五、升级、降级与多版本管理
dsq 无自更新机制,版本管理就是对 /usr/local/bin/dsq 单文件的替换。
5.1 降级实测(v0.23.0 → v0.22.0)
$ wget -q https://github.com/multiprocessio/dsq/releases/download/v0.22.0/dsq-linux-x64-v0.22.0.zip -O dsq-022.zip
$ unzip -o dsq-022.zip
Archive: dsq-022.zip
inflating: dsq
$ mv -f dsq /usr/local/bin/dsq
$ dsq --version
dsq v0.22.0
5.2 升级回 v0.23.0
$ wget -q https://github.com/multiprocessio/dsq/releases/download/v0.23.0/dsq-linux-x64-v0.23.0.zip -O dsq-023.zip
$ unzip -o dsq-023.zip
Archive: dsq-023.zip
inflating: dsq
$ mv -f dsq /usr/local/bin/dsq
$ dsq --version
dsq v0.23.0
5.3 多版本共存
需要新旧版本并行对比时,把二进制按版本命名存放,再用软链切换:
$ mv /usr/local/bin/dsq /usr/local/bin/dsq-v0.23.0
$ ln -sf /usr/local/bin/dsq-v0.23.0 /usr/local/bin/dsq
$ dsq --version
dsq v0.23.0
$ ls -la /usr/local/bin/dsq
lrwxrwxrwx 1 root root 26 Nov 3 03:34 /usr/local/bin/dsq -> /usr/local/bin/dsq-v0.23.0
go install 路线则天然支持按版本取包:go install github.com/multiprocessio/dsq@v0.22.0 与 @v0.23.0 各自编译对应 tag,产物默认都写到 $HOME/go/bin/dsq(后装覆盖前装),需保留多版本时手动改名。
六、常见问题(实测排障实录)
6.1 JSON 模式输出追加重定向 >> 报错
现象:不带 --pretty 的 JSON 输出,一旦用 >> 追加重定向就失败:
$ dsq users.csv >> out2.json
write /dev/stdout: copy_file_range: bad file descriptor
$ echo $?
1
定位:v0.23.0 真实缺陷——JSON 输出路径用 copy_file_range 系统调用写 stdout,对追加模式打开的 fd 直接失败;同命令改 > 覆盖重定向或接管道均正常(实测 dsq users.csv > out1.json exit=0 内容完整)。
解决:追加场景固定用管道中转:
$ dsq users.csv | cat >> out2.json
--pretty 表格模式不受此缺陷影响。
6.2 未知扩展名拒绝读取
现象:
$ dsq unknown.xyz "SELECT * FROM {}"
Unknown mimetype for file: unknown.xyz.
$ echo $?
1
定位:dsq 靠扩展名/MIME 识别格式,未知扩展名直接拒绝。
解决(实测):按内容重命名(如 cp unknown.xyz data.csv),或从 stdin 喂数据并用 -s 显式声明类型:
$ cat unknown.xyz | dsq -s csv "SELECT * FROM {}" | cat
[{"id":"1","name":"Ted"}]
6.3 REPL 里 .exit 报语法错误
现象:dsq file.csv -i 进入交互模式后输入 .exit 回车,回显(用管道复现同一输入):
$ printf ".exit\n" | dsq users.csv -i
Cache invalid, re-import required.
near ".": syntax error
$ echo $?
1
定位:dsq 的 REPL 把每行输入原样交给 SQL 引擎执行,不是 sqlite3 CLI,不支持点号元命令。
解决:退出交互模式按 Ctrl+D(EOF)。
6.4 go install 拉取依赖超时
现象(实测):Go 装好后直接 go install,等待后报 proxy 连接超时:
$ go install github.com/multiprocessio/dsq@v0.23.0
go: github.com/multiprocessio/dsq@v0.23.0: github.com/multiprocessio/dsq@v0.23.0: Get "https://proxy.golang.org/github.com/multiprocessio/dsq/@v/v0.23.0.info": dial tcp 142.251.33.209:443: i/o timeout
定位:Go 默认 GOPROXY=https://proxy.golang.org,direct,境内网络常连不上 proxy.golang.org;direct 回源走 GitHub 拉 VCS 也偏慢。
解决(实测有效):改道国内镜像后重试:
$ export GOPROXY=https://goproxy.cn,direct
$ go install github.com/multiprocessio/dsq@v0.23.0
七、卸载与清理
dsq 无服务、无配置目录,卸载即删二进制,顺带清理它产生的缓存文件:
$ rm -f /usr/local/bin/dsq
$ rm -f /tmp/dsq-cache-*.db
$ which dsq
$ echo $?
1
which dsq 无输出、退出码 1,确认命令已从 PATH 消失。缓存文件说明:只有用过 --cache/-i 才会存在 /tmp/dsq-cache-<sha1>.db,未用过则该目录匹配为空,删除命令空转无副作用。
八、安装方案对比
| 方案 | 前置依赖 | 耗时 | 适用平台 | 说明 |
|---|---|---|---|---|
| 官方二进制 zip(本文主方案) | unzip | 秒级 | linux/macos/windows amd64 | 官方推荐;glibc 系发行版直接可用 |
| go install 源码编译 | Go 1.18+、网络可拉模块 | 首次需拉取 118 个依赖模块并编译;缓存就绪后实测 0.664s | 所有 Go 支持架构(ARM64 等) | 可锁定任意 tag;境内建议配 GOPROXY 镜像 |
Homebrew brew install dsq | Homebrew | 秒级 | 仅 macOS | Linux 服务器不适用,仅作生态了解 |
结论:x86_64 Linux 服务器一律首选官方二进制;异构架构或需要 main 分支最新代码时才走源码编译。
九、参考链接
- dsq 源码仓库:https://github.com/multiprocessio/dsq
- 官方 Releases 下载页:https://github.com/multiprocessio/dsq/releases
- DataStation(dsq 的 GUI 伴生项目):https://github.com/multiprocessio/datastation
- Go 语言官方下载:https://go.dev/dl/
- SQLite SQL 方言参考:https://www.sqlite.org/lang.html