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 条排障实录。

dsqdsqCLIGoUbuntu2026/11/03

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.0multiprocessio/dsq 最新稳定版(2022-10-20 发布)
安装路径/usr/local/bin/dsq单二进制,无守护进程、无配置文件
安装包dsq-linux-x64-v0.23.0.zip21499429 字节,GitHub Releases 官方产物
包 SHA-256dfae1ecd578a4869d75ba815cbbbf3ef962fee60794cada25f50c144d5acccb4实测值
二进制大小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.02022-10-20最新稳定版,提供 linux/macos/windows amd64 官方二进制,本文实测版本
v0.22.02022-08-26上一版,同样提供 linux-x64 二进制,本文用于降级实测
0.21.02022-06-29历史版本
0.20.22022-06-23历史版本
0.20.12022-06-16历史版本
0.20.02022-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 dsqHomebrew秒级仅 macOSLinux 服务器不适用,仅作生态了解

结论:x86_64 Linux 服务器一律首选官方二进制;异构架构或需要 main 分支最新代码时才走源码编译。

九、参考链接

Ubuntu 22.04 安装 dsq 0.23.0 指南 - Quzuo