SQL on file 工具

 

使用 SQL 查询文本(TEXT、CSV、TSV)和 Excel(XLS/XLSX)文件很方便。实现 SQL on file 有几种选择。

首先是使用诸如 csvsql、textql、querycsv.py、csvq 这样的命令行工具,短小快捷,但缺点是过于简单,稍复杂的计算就要硬编码,使用场景受限。

把文件数据导入数据库也是一种选择,但数据库太重,本来直接查文件就是图个方便快捷,搭建数据库再把数据导进去有点得不偿失。

还有一种选择是使用 Microsoft text/xls driver、CSVJDBC/ExcelJDBC、SpatiaLite 这样的编程语言集成组件。优点是功能相对强大,但由于是专门面向程序员,使用难度过高。

最理想的选择是使用桌面分析工具,包括 OpenOffice Base 和 esProc。前者还不够完善,只能针对格式标准的文本文件进行最基本的查询;后者则要强大得多。

esProc 是易用的桌面型工具,一键安装无需配置。esProc 可以在单元格直接编写多条 SQL,计算结果和 SQL 直接呈现在同一界面,点击 SQL 所在的单元格可切换观察计算结果。

imagepng

与 Microsoft text/xls driver 类似,esProc 具有完善的计算引擎,可支持实际工作所能遇到的各种 SQL 语法,这是 OpenOffice Base 做不到的。

文件类型方面,esProc 支持 TXT/CVS/TVS,也支持不同版本的 XLS/XLSX。比 Microsoft text/xls driver 更强大的是,esProc 可以直接对文本文件和 Excel 进行关联计算。

除了规范的文件格式外,esProc 还可以利用扩展函数应用更复杂的情况。比如分隔符为 "||" 的文件,OpenOffice Base 无法解析,Microsoft text/xls driver 要编写大量代码,而 esProc 只需在 SQL 中使用扩展函数:

$select * from   {file(“sep.txt”).import@t(;,“||”)}

esProc 可自动识别数据类型,对于非默认格式的数据,比如前面提到的特殊日期,OpenOffice Base 无法解析,Microsoft text/xls driver 需用 schema.ini 配合代码实现,而 esProc 只要使用简单的扩展函数就能轻松应对:

$select * from
{file(“style.csv”).import@ct(orderid,client,sellerid,amount,orderdate:date:“dd-MM-yyyy”)}

格式复杂的文本,比如前面提到的一行文本对应多条记录的情况,OpenOffice Base 无法解析,Microsoft text/xls driver 需资深程序员编写大量复杂代码,而使用扩展函数后 esProc 也不难处理:

$select * from
{file(“trip.csv”).import@tc().news(trips.array(" ");name,state,~:trip)}

综合来看,esProc 结合了上述几类工具的优点,同时改进了相应缺点,是 SQL on file 工具的首选。