Q - 直接在CSV或TSV文件上运行SQL

2021-06-07 23:32:40

q是一个命令行工具,允许直接执行在csvs / tsvs上的sql样查询(以及任何其他表格文本文件)。 q将普通文件视为数据库表,并支持所有SQL构造,例如Where,Group By,Joins等。它支持自动列名称和列类型检测,并为多个编码提供全面支持。 PS -EF | Q -H"选择UID,CNT由-CNT-Group由UID订单CNT DESC限制3" 查看以下一些示例,或者只需使用下面的安装中的链接下载该工具并与之播放。 すべての文库エンコーディングを完全にサポート 모든문자인코딩이완벽하게지원됩니다 ВсекодировкисимволовПоддерживаштся

非英语用户:Q完全支持所有类型的编码。使用-e数据编码来设置输入数据编码,-q查询编码以设置查询编码,并使用-e输出编码来设置输出编码。所有三个参数都有明智的默认值。如果您遇到任何问题,请与我联系,我很乐意帮助。

具有BOM的文件:包含BOM(字节顺序标记)的文件未被正确支持Python' S CSV模块。 q包含一个解决方法,允许读取包含BOM的UTF8文件 - 使用-eutf-8-sig。我计划将来自编码本身的BOM处理分开,这将允许支持所有编码的BOM。

运行rpm -ivh< package-filename>或rpm -u< package-filename>如果您已经有较旧版本的Q.

运行安装程序可执行文件并按下一个下一个下一个下一个下一个...... q.exe将添加到路径中,以便您可以到处访问它。

Windows并不更新retroactive for Open Windows的路径,因此您' LL在安装完成后需要打开新的CMD窗口。

最新稳定版本的完整源文件树。请注意,Q.Py不能直接使用,因为它需要Python依赖项

最新稳定版本的完整源文件树。请注意,Q.Py不能直接使用,因为它需要Python依赖项

可以在此处下载旧版本。如果您计划使用旧版本,请告诉我,为什么 - 我知道没有理由使用任何一个。

截至2.0.9版本,没有必要对任何外部依赖性。 Python本身(3.7),并且任何所需的库都在安装内自包含,与系统其他部分隔离。

Q<标志> "< query>"最简单的执行是`Q"从myfile&#34中选择*;哪个打印整个文件。

q允许在表格文本数据上执行类似SQL的语句。其目的是向Linux命令行带来SQL富有表现力的电源,并可以轻松访问文本作为实际数据。

查询应该是一个类似的SQL样查询,其中包含文件名而不是表名(或 - 对于stdin)。查询本身应作为一个参数提供给工具(即在引号中括起来)。通过将它们作为Filename1 + Filename2 +或使用shell通配符(例如my_files * .csv),可以使用多个文件作为一个表。

使用-h表示输入包含标题线。在这种情况下将自动检测列名,可以在查询中使用。如果未提供此选项,则列将列为CX,以1(例如Q"选择C3,C8 from ...&#34)。

栏目类型由工具检测到,不需要铸造。请注意,在那里' s一个标志 - 迫使所有列被视为文本列的文本。

请注意,根据SQLite标准,需要在带有后滴答的查询中使用包含空格的列名。

完全支持查询/输入/输出编码(Q尝试在该区域提供盒子外可用性)。如果需要,请使用-e,-e和-q控制编码。

支持所有SQLite3 SQL构造,包括跨文件的连接(为每个表使用别名)。查看下面的限制部分,对于未完全支持的一些很少使用的使用情况。

Q获取的每个参数都是完整的SQL查询。所有查询都是一个接一个地执行,将结果输出到标准输出。请注意,数据加载仅完成一次,因此在同一命令行上传递多个查询时,只有第一个查询将花费很长时间。其余的将几乎瞬间开始运行,因为所有数据都已已加载。 Remeber要双引用每个查询 - 每个参数都是完整的SQL查询。

允许任何标准SQL表达式,条件(WHERE和HAVE),组逐个,订单等。

支持加入,并且在Where子句中支持子查询,但不幸的是,现在不在FROM子句中。执行连接时使用表别名。

SQL语法本身是SQLite' s语法。有关详细信息,请查看http://www.sqlite.org/lang.html或搜索网络以进行示例。

Warning: Can only detect less than 5000 characters

查询是针对清楚起见使用大写的,但实际的查询关键字,如选择,并且在其中没有真正区分大小写。

请注意,Q了解列是根据其数值的数字和过滤器(实数值比较,而不是字符串比较)。

q -h -t"选择request_id,score from ./clicks.csv的得分> 0.7订单按得分DESC限制5"

sudo查找/ tmp -ls | Q"选择C5,C6,SUM(C7)/1024.0/1024总共C5,C6订单总计总额和#34;

使用最大数量的所有流程计算前3名用户ID,按降序排序。

PS -EF | Q -H"选择UID,CNT由-CNT-Group由UID订单CNT DESC限制3"

以下命令加入LS输出(excepledatafile)和包含组的文件,电子邮件(组电子邮件 - 示例),并为组的每个电子邮件提供一行文件名。对于输出的简洁,还有一个用于PPP的特定文件名的过滤器,该文件使用WHERE子句实现。

Q"选择myfiles.c8,来自exampledatafile myfiles的电子邮件。

您可以看到PPP文件名出现两次,每次都匹配到它所属的组DIP的一封电子邮件。看看文件exampledatafile和组电子邮件 - 数据示例。

支持方案支持列名称检测。只需在命令行中指定-h“,并确保源文件包含标头行。

目前的实现是使用内存数据库的Python写入Python,以防止对外部依赖性的需求。实现本身支持SELECT语句,包括连接(仅在WHERE子句中支持子查询)。如果要对数据进行进一步进行进一步进行分析,则可以使用--SAVE-DB到磁盘选项将生成的表写入SQLite数据库文件,然后使用SEQLite3以便单独执行数据上的查询q本身。

请注意,目前没有检查和绑定数据大小 - 它''请确保事情不' t得太大。

该代码包括通过测试/测试的测试套件。如果您'重新计划发送拉请求,如果您可以确保它没有失败,请欣赏,I' D'

这里'是已知限制的列表。如果您有任何缺少的功能,请与我联系。

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

你有没有盯着屏幕上的文本文件,希望它是一个数据库,所以你可以问你想要的任何东西吗?我有那种感觉很多次,我终于明白它并非我想要的数据库'它和#39;语言 - SQL。

SQL是一种陈述语言的数据,因此它允许我在不关心它的情况下定义我想要的内容。这是SQL是如此强大的原因,因为它将数据视为数据而不是位数和字节(和字符)。

此工具的目标是提供文本文件和SQL的世界之间的桥梁。

标准的Linux工具是惊人的,我一直在使用它们,但整个Linux的想法正在混合和匹配每个作业部分的最佳工具。该工具将SQL的声明性功率添加到Linux工具集,而不会丢失任何其他工具'好处。事实上,我经常使用q与其他Linux工具一起使用,同样的方式我总是一直在一起的awk / sed和grep。

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

此工具专为Linux / UNIX设计原则而设计。如果你'对这些一般设计原则感兴趣,请阅读这本惊人的书,特别是这一部分。如果您认为,此工具工作的方式强烈反对任何原则,我很想听到您的看法。

我创建了一个初步基准,将Q与Python2,Q上的Q进行比较,TextQL和OctOSQL。 目前的结果在这里。 我' d欣赏基准本身的任何评论,并更重要的是,更重要的是,在机器上运行基准本身以验证结果。 如果有人有兴趣,则在同一基准测试结果页面上提供说明。 将Python视为Python模块 - 主要实现。 在公开之前,需要一些内部API在处理STDIN后更改。