大家好,我是美丽又可爱的开源小妹!
天气突然一下就冷下来了,大家记得保暖哈,尤其是晚上看球的小伙伴们,不要冷了另外一半哈~~
我们知道,SQL 简单好学,使用也很方便。其实无论是技术还是非技术的工作,都需要对数据进行处理和分析,像是我们常用的 SQL 查询,以及更普遍的 Excel、JSON、CSV 等。
如果是稍微复杂一些的分析,因为各种原因,经常会遇到要打开的文件太大,影响工作进程和效率。
今天小妹来推荐一个小巧但是很强大的 SQL 工具 - dsq
,使用它再结合其他工具,完全可以做更多的自动化的分析和处理,非常的棒!
简介
dsq
是一个命令行工具,可对数据文件进行 SQL 查询,支持 JSON、CSV、Excel、Parquet 等等数据文件,以下是官方展示的支持的部分文件类型:
市面上类似的工具其实也有不少,作者也做了很细致的研究和分析,得出比较结论:dsq
目前是功能最为全面的,性能最极致的。
项目开源以来,已经在 github 上面获得了接近 3k 的 star。
功能展示
下面小妹来展示一下dsq
都有哪些基本的功能。
1、读取单个文件
直接使用 dsq filename
或者 dsq filename "SELECT * FROM {}
即可读取。
如小妹电脑中已经准备了一个testdata.json
文件,大致内容如下:
1 | dsq testdata.json" |
1 | dsq testdata.json "SELECT * FROM {}" |
当然这样直接读取会比较难看,dsq
提供了-p
或者 --pretty
的参数,来美化成表格内容,这样就可以直观的看了。
喏,这样是不是好看多了?
2、读取处理多个文件
dsq
支持同时读取多个文件,只要是支持的文件类型都可以。可以使用 SQL 语句以表格的方式来同时查询各个文件的数据内容,如下:
1 | 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}代表。
3、读取 Excel 多个 sheets
Excel 的文件有时候会又多个 sheets,dsq
也是支持读取所有sheets的内容的。
比如说multiple-sheets.xlsx
这个文件有两个 sheets,可以使用如下的方法来查询 sheet2 里面的内容。
1 | dsq multiple-sheets.xlsx "SELECT COUNT() FROM {'Sheet2'} where Country='Canada' and Product='Amarilla'" |
4、使用管道传递数据
这个是linux独有的功能,可以直接使用管道符|
来传递数据,相信使用 linux 的同学应该再熟悉不过了,但是这里需要加-s
参数来指明传递的文件类型。如:
1 | cat testdata.csv | dsq -s csv "SELECT * FROM {} LIMIT 1" |
1 | cat testdata.parquet | dsq -s parquet "SELECT COUNT(1) FROM {}" |
5、文件转换
dsq
支持将 CSV 文件转成 JSON 文件,直接使用下面的命令即可:
1 | dsq testdata.csv > testdata.json |
除以上的这些基本功能之外,dsq
还支持不少更为复杂的操作,比如正则、缓存等等,可以去官方地址查看更多详细用法。
安装
win系统的话,直接 releases 页面下载即可。
Linux, macOS则按照官方给出的方法,同样很简单的。
关于项目的更多细节、功能,感兴趣的小伙伴可以去项目地址探索~~~
1 | github地址:https://github.com/multiprocessio/dsq |
写在最后
欢迎加入开源小分队读者交流群,聊天学习摸鱼为主,不定时会分享一些技术要点和优质学习资源,有一群有趣有料的小伙伴在等你哦!
进群方式:开源小分队
公众号后台回复888
,按提示操作即可进群。
问君能有几多愁,开源项目解千愁,我们下期再见!
大家的点赞、收藏和评论对小妹非常重要,如文章对你有帮助还请转发支持下,谢谢!