可用 SQL 查询数据文件的 N 款桌面工具
日常工作中常常需要对 csv\xls 等数据文件进行查询分析,这些文件的格式大都比较规整(每行对应一条记录),可以看成数据库表,如果能使用 SQL 运算就会比较方便。但是,使用 SQL 前通常要将这些文件导入数据库,过程麻烦且难度较大,对非专业程序员用户很不友好。如果有一款能直接在文件上执行 SQL 的工具就方便多了,下面就介绍一些面向非专业程序员的,可以直接用 SQL 查询分析 csv\xls 等数据文件的桌面工具。
OpenOffice Base
有开源版的 access 之称,技术要求低,操作界面友好,专为桌面用户设计。但只支持 csv,SQL 语法比较弱。
OpenOffice Base 体积不大,支持一键安装。提供了友好的图形操作界面,专为桌面用户设计,使用非常方便。计算引擎是自己研发的,可针对文件直接计算,没有复杂的准备工作,没有隐藏的后台数据库,性能比较高,对大文件的支持也比较好。
OpenOffice Base 不支持 xls;SQL 语法较弱,甚至不支持文件之间的关联计算;对文件格式要求比较严格,无法处理格式不规范的文件。
https://www.openoffice.org/product/base.html
Microsoft Query
Excel 是优秀的桌面数据计算工具,功能强大组件众多,其中有个组件叫 Microsoft Query,支持用 SQL 查询 csv 和 xls,操作界面一般,技术要求较低,语法能力较弱。
Microsoft Query 本身体积较小,不需要配置,但要随 Excel 一同安装。Microsoft Query 提供了图形操作界面,风格古老,功能不多;执行 SQL 前有一些简单的配置,可以通过向导完成,难度不大。没有隐藏的后台数据库,性能比较好,支持较大的文件。
Microsoft Query 支持的 SQL 语法有 from 子句、模糊查询、部分字符串和日期函数,不支持 with 子句。支持关联查询,但仅限同类文件之间,csv 和 xls 之间不能进行关联查询,因为 Microsoft Query 为两种文件分别提供了不同的驱动程序,二者不能同时使用。此外,Microsoft Query 对文件格式要求严格,无法处理不规范文件。
esProc Desktop
专用于文件计算的桌面工具,技术要求低,操作界面友好,同时支持 csv/xls,支持的 SQL 语法较丰富。
esProc Desktop 体积较小,支持一键安装,图形操作界面比较友好,执行 SQL 前不需要对文件进行配置。esProc Desktop 使用自研的计算引擎,执行 SQL 时也无须数据库协助,大文件也能获得较好的性能。SQL 语法支持 with 子查询、from 子查询、模糊查询,大量字符串和日期函数,也支持 csv 和 xls 之间的关联计算。除了 csv/xls,还支持 json/xml/http 等多种数据源。而且,利用 esProc 的原生语法,还能很好地处理不规范格式的文件。
http://www.raqsoft.com/esproc-desktop
DBeaver
这是一个数据管理和 SQL 查询工具,支持多种数据源,包括 csv 文件。技术要求中等,操作界面很方便,但 SQL 语法很弱。
DBeaver 体积较小,支持一键安装。默认不支持 csv,需要用向导下载 csv 的支持组件,过程不算难。
DBeaver 执行 SQL 前需要指定目录,不能访问其他目录的文件。只支持模糊查询、过滤、排序、分组汇总等简单 SQL,不支持关联查询、from 子句、with 子句。执行 SQL 时要把数据全量加载到内存,性能较差,不支持大文件。
Log Parser
这是一款命令行 + 桌面的混合型工具,支持 csv 文件和多种日志格式,技术要求低,操作界面中等偏上,但 SQL 语法很弱。
Log Parser 体积很小,一键安装,无需配置,直接执行 SQL,没有前置命令或操作。默认的输入和输出均在命令行完成,如果输入时使用“-o:DATAGRID”选项,则输出结果会显示在图形表格中。Log Parser 使用自己的计算引擎,大文件查询时性能也较好。
Log Parser 只支持简单的 SQL 语法,包括模糊查询、排序、分组汇总等,不支持常用的关联、from 子句、with 子句。对文件格式要求严格,无法处理不规范文件。
https://www.microsoft.com/en-us/download/details.aspx?id=24659
Flatbase
这是一个可以对文件进行 SQL 查询的网站,只支持 csv,技术要求很低,图形化操作界面比较友好,支持的 SQL 语法比较丰富。
不必下载安装,只要打开网站,注册账号即可使用。SQL 语法支持模糊查询、关联、from 子句、with 子句,以及大量的字符串和日期函数。
执行 SQL 前需要将文件拖到工作区,后台实际是个上传文件和入库的动作,操作不难,但性能很差,只适合查询小文件。这个网站缺乏安全措施,不适合查询数据敏感的文件。对文件的格式要求很严格,不支持不规范文件。
H2 database
这是一种小型数据库,只支持 csv 文件,对技术要求中等,操作界面中等难度,支持较丰富的 SQL 语法。
H2 体积很小,本身只是个 jar 包,但要额外下载安装 Java 环境,配置有一定技术要求。H2 自带的网页管理器比较简陋,第三方则更加易用。H2 使用自研的计算引擎,支持 with 子查询、from 子查询、模糊查询,关联查询、大量字符串和日期函数。H2 执行 SQL 前不需要建表,也没有前置操作,直接用”select … from csvread(file path/name)“查询文件。
H2 虽然隐藏了建表和入的库动作,但建表和入库的过程是确实发生的,因此文件不能太大,否则严重影响性能。H2 对文件格式要求严格,不支持格式不规范的文件。
http://www.h2database.com/html/functions.html#csvread
csvsql
这是基于 Python 的小巧的工具,命令行操作中规中矩,只支持 csv 文件,SQL 语法弱,安装配置比较麻烦。
csvsql 体积小不占多少空间,执行 SQL 前没有多余的操作或命令。
csvsql 对 SQLite 进行了封装,但尚未支持所有的 SQLite 语法,包括 with 子句和 from 子句,以及大部分字符串和日期函数。目前只支持排序、过滤、分组汇总、关联等少量语法。csvsql 基于 Python,配置起来较复杂,需要一定的技术功底。执行 SQL 时后台有个入库的过程,不适合查询大文件,否则耗时严重。csvsql 对文件格式要求较高,必须非常规范才能查询。
https://csvkit.readthedocs.io/en/latest/scripts/csvsql.html
q
q 可以看作是 csvsql 的性能改进版,除此外两者没有显著区别。
q 提供了“缓存模式”,第一次查询时文件会入库,性能因此较差,后续再查同样的文件,q 直接使用 SQLite 里的库表,性能因此显著提升。注意,如果文件发生变化,用户需要手工替换缓存,否则查的是库表里的旧数据。
https://github.com/harelba/q/releases/download/2.0.19/q-AMD64-Windows-installer.exe
csvq
csvq 是 go 语言开发的小巧的工具,支持 csv 但不支持 xls,技术要求低,普通的命令行界面,支持的 SQL 语法很丰富。
csvq 只有一个二进制可执行文件,无需安装配置,可直接执行 SQL,没有前置准备工作。支持模糊查询、关联查询、from 子句、with 子句、窗口函数,以及大量的字符串和日期函数。除了 csv,还支持 json 文件。
csvq 封装了 sqlite,执行 SQL 时后台有个入库的过程,需要全量加载到内存,文件不能太大,否则性能较差。csvq 对文件的格式要求较高,无法计算不规范的文件。
https://mithrandie.github.io/csvq/
trdsql
trdsql 是 go 语言开发的命令行工具,支持 csv/json 但不支持 xls,技术要求低,支持的 SQL 语法较为丰富。
trdsql 只有一个二进制可执行文件,无需安装配置,可直接执行 SQL,没有前置准备工作。支持模糊查询、关联查询、from 子句、with 子句、窗口函数,以及大量的字符串和日期函数。trdsql 封装了多种数据库,可根据习惯用选项切换。
执行 SQL 时后台有隐藏的入库过程,文件不能太大,否则性能较差。trdsql 对文件的格式要求较高,无法计算不规范的文件。
https://github.com/noborus/trdsql/releases/download/v0.10.1/trdsql_v0.10.1_windows_amd64.zip
rows
rows 是 Python 编写的命令行工具,支持 csv\xls\json 等多种文件,技术要求较高,SQL 语法不够成熟,属于中等偏弱。
rows 同时支持 csv 和 xls,且支持两种文件的关联计算。执行 SQL 前没有复杂的前置命令,这一点很方便。
rows 体积不大,但安装配置比较复杂,都要通过命令行进行。安装 rows 之前,要先安装并配置 Python 环境,安装 rows 之后,还要安装其他插件,包括支持 xls 文件的插件。rows 支持关联查询、from 子查询,但不支持模糊查询、with 子句,很多字符串和日期函数也不支持。rows 要借助 SQLite 执行 SQL,有后台的入库过程,文件大时性能很差。此外,rows 对文件格式要求很严。
http://turicas.info/rows/installation/