大家好,我是美丽又可爱的开源小妹!
天气突然一下就冷下来了,大家记得保暖哈,尤其是晚上看球的小伙伴们,不要冷了另外一半哈~~
我们知道,SQL 简单好学,使用也很方便。其实无论是技术还是非技术的工作,都需要对数据进行处理和分析,像是我们常用的 SQL 查询,以及更普遍的 Excel、JSON、CSV 等。

如果是稍微复杂一些的分析,因为各种原因,经常会遇到要打开的文件太大,影响工作进程和效率。
今天小妹来推荐一个小巧但是很强大的 SQL 工具 - dsq,使用它再结合其他工具,完全可以做更多的自动化的分析和处理,非常的棒!
dsq是一个命令行工具,可对数据文件进行 SQL 查询,支持 JSON、CSV、Excel、Parquet 等等数据文件,以下是官方展示的支持的部分文件类型:


市面上类似的工具其实也有不少,作者也做了很细致的研究和分析,得出比较结论:dsq 目前是功能最为全面的,性能最极致的。

项目开源以来,已经在 github 上面获得了接近 3k 的 star。

下面小妹来展示一下dsq都有哪些基本的功能。
直接使用 dsq filename 或者 dsq filename "SELECT * FROM {}即可读取。
如小妹电脑中已经准备了一个testdata.json文件,大致内容如下:

dsq testdata.json"

dsq testdata.json "SELECT * FROM {}"

当然这样直接读取会比较难看,dsq提供了-p 或者 --pretty的参数,来美化成表格内容,这样就可以直观的看了。

喏,这样是不是好看多了!
dsq支持同时读取多个文件,只要是支持的文件类型都可以。可以使用 SQL 语句以表格的方式来同时查询各个文件的数据内容,如下:
dsq users.csv ages.json "select {0}.name, {1}.age from {0} join {1} on {0}.id = {1}.id"users.csv ages.json是要查询的两个文件,在上述 select 语句中分别用 {0}、{1}代表。

Excel 的文件有时候会又多个 sheets,dsq也是支持读取所有sheets的内容的。
比如说multiple-sheets.xlsx这个文件有两个 sheets,可以使用如下的方法来查询 sheet2 里面的内容。
dsq multiple-sheets.xlsx "SELECT COUNT() FROM {'Sheet2'} where Country='Canada' and Product='Amarilla'"


这个是linux独有的功能,可以直接使用管道符| 来传递数据,相信使用 linux 的同学应该再熟悉不过了,但是这里需要加-s参数来指明传递的文件类型。如:
cat testdata.csv | dsq -s csv "SELECT * FROM {} LIMIT 1"
cat testdata.parquet | dsq -s parquet "SELECT COUNT(1) FROM {}"
dsq 支持将 CSV 文件转成 JSON 文件,直接使用下面的命令即可:
dsq testdata.csv > testdata.json
除以上的这些基本功能之外,dsq 还支持不少更为复杂的操作,比如正则、缓存等等,可以去官方地址查看更多详细用法。
win系统的话,直接 releases 页面下载即可。

Linux, macOS则按照官方给出的方法,同样很简单的。

关于项目的更多细节、功能,感兴趣的小伙伴可以去项目地址探索~~~
github地址:https://github.com/multiprocessio/dsq问君能有几多愁,开源项目解千愁,我们下期再见!