Q——多平台CSV文件记录的SQL化查询工具

在日常数据处理中,很多时候文件是一个很方便的载体,尤其是文本文件可以方便传输,修改和批量处理。csv格式的文件即具有文本文件的便捷性和数据表格的表现和规范性是是一个被广为使用的数据格式,绝大多数系统支持通过csv来导入导出数据。同时SQL语言也是一个被大家熟知和喜爱的脚本语言,在数据库处理分析中广泛使用。那么有没有同时支持csv和sql的解决方案呢?有,本文虫虫就给大家推荐一个这样的工具q。

Q——多平台CSV文件记录的SQL化查询工具

概述

q是一个命令行工具,可以实现在 CSV/TSV(和任何其他表格文本文件)上直接执行类似 SQL 的查询。工具将普通文件当作数据库表,支持所有的SQL操作,比如WHERE、GROUP BY、JOIN等等,还支持自动列名和列类型检测,支持多种编码。

基本语句:

q "SELECT COUNT(*) FROM ./chongchong.csv WHERE c3 > 32.3"
ps -ef | q -H "SELECT UID,COUNT(*) count FROM - GROUP BY UID ORDER BY count DESC LIMIT 3"
Q——多平台CSV文件记录的SQL化查询工具

多编码支持:

非英语用户:q完全支持所有类型的编码。用 -e data-encoding设置输入数据编码,-Q query-encoding设置查询编码,并使用 -E output-encoding设置输出编码。默认会根据实际使用上下文对三个参数做合理设置。

Q——多平台CSV文件记录的SQL化查询工具

BOM支持:q允许读取包含BOM的UTF8文件的:使用-e utf-8-sig为了这。后续计划将BOM处理与编码本身分开,将允许支持所有编码的 BOM。

安装

Q支持跨平台运行,但是需要基础的python环境支持。可以在官方Github托管仓库下载(github/harelba/q/releases),最新版本为2.0.19。

Q——多平台CSV文件记录的SQL化查询工具

Linux可以通过rpm或者deb包安装:

安装:

rpm -ivh q-text-as-data-2.0.19-1.x86_64.rpm
sudo dpkg -i q-text-as-data_2.0.19-2_amd64.deb

或者对旧版本的升级使用:

rpm -U q-text-as-data-2.0.19-1.x86_64.rpm

MacOS下可以使用brew来安装:

brew install q

windows下可以下,对应的安装包(q-AMD64-Windows-installer.exe

和q-AMD64-Windows.exe)安装。

用法

q的用法很简单,基本格式如下:

q 标志 "sql查询"

最简单的一个例子是

q "SELECT * FROM myfile"

这结果和cat myfile一样。

Q的查询表达式应该是一个类似SQL的查询,但是其中from的是用的csv的文件名代替表名,也可以用-表示标准输入,这样就可以接入到管道中。可以将多个文件用作一个表,方法是用+将它们窜起来,写成:

filename1+filename2+...

也可以使用shell 通配符,比如:

my_files*.csv

-H选项表示输入包含标题行。这时将自动探测列名,并可在查询中使用。如果未提供此选项,则列将命名为cX,从1开始,比如:

q "SELECT c3,c8 from ..."

-d选项指定输入分隔符

列类型由工具自动检测,无需强制转换。

注意,有一个选项 --as-text,强制所有列都被视为文本列。

关于列的内容,根据 sqlite 标准,需要在带有反引号的查询中使用包含空格的列名。

完全支持查询/输入/输出编码,可以用-e,-E和-Q按需要控制编码。

q支持所有sqlite3 SQL语法,包括跨文件的连接(为每个表使用别名)。

查询

q 获取的每个参数都是一个完整的SQL查询。所有的查询都依次执行,将结果输出到标准输出。请注意,数据加载仅完成一次,因此在同一命令行上执行多个查询时,只有第一个会花费很长时间。其余的将查询会立即执行出结果。

查询语句中任何标准 SQL 表达式、条件(WHERE 和 HAVING)、GROUP BY、ORDER BY 等都是允许的。

WHERE子句中支持 JOIN 和子查询, ROM 子句中不支持。执行 JOIN 时使用表别名。

所有SQL 语法都是基于sqlite的语法。

附加功能

q 支持 SQLite 不支持的几个附加功能。要获取其列表,请运行 q -L,其中列出了它们并描述了它们的语法。

它们可以用作任何标准的 sql 函数。

Q——多平台CSV文件记录的SQL化查询工具

实现

q的实现是用Python写的内存数据库,本身支持SELECT语句,包括 JOIN(目前仅在 WHERE 子句中支持子查询)。如果想对数据做进一步的分析,可以使用 --save-db-to-disk将结果表写入sqlite数据库文件的选项,然后使用 seqlite3为了独立于q本身对数据执行查询。

限制

不支持 FROM子查询

不支持公用表表达式 (CTE)

不支持文件名中的空格。使用stdin将数据传送到q,或重命名文件。

尚不支持某些罕见的子查询情况。

配合

标准的Linux shell工具很棒, Linux 整体理念是为工作的每个部分混合搭配最好的工具。q将SQL的功能添加到Linux工具集中,而不会失去任何其他工具的优势。q可以与其他 Linux 工具一起配合使用,就像find,awk/sed 和 grep 一起使用(管道)。

需要注意是, Linux工具将文本视为文本而不是数据。从这个意义上说,可以将q视为元工具,它提供对 SQL 提供的所有数据相关工具(例如表达式、排序、分组、聚合等)的访问。

总结

为了方便的对文本数据进行灵活的查询分析和处理,q工具给csv文本文件添加了sql查询的功能,给我们数据处理提供了方便,q支持多字符编码,支持多文件查询,支持通过管道和其他命shell工具配合使用,是一个非常值得尝试和日常使用的工具。

展开阅读全文

页面更新:2024-04-16

标签:文件   工具   数据处理   表达式   别名   空格   语句   语法   选项   文本   类型   功能   数据库   标准   数据   平台   科技

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top