gpt4 book ai didi

sql - 从 SQL/关系代数类比到 *nix 命令行过滤器/工具

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:51:35 24 4
gpt4 key购买 nike

cat/tacgrep/sedhead/tailcut 等工具sort/uniqcommjoin 链接在一起时,可以轻松地从一个或多个文件中提取数据。在这种情况下,主导范例是创建“管道”或应用“过滤器”来提取信息。

我在想,关系运算符的不同观点在应用于文本文件时可能会有用,至少作为一个概念框架,可以帮助我更好地利用和组合这些工具来提取和转换数据。

我的问题是:有人可以给我一些示例来说明关系运算符/SQL 查询和 Unix 过滤管道之间的类比吗?

为了使其更具体和更有用,我在这里提供了两个用 StackExchange Data Explorer 创建的以空格分隔的表格数据集。 ,包含数值、标称值和序数值:

$ cat so_tag_rank.txt
Tag Group MayRank TotalRank QuestionsInMay QuestionsTotal
javascript Lang 1 2 25111 869428
java Lang 2 1 21331 870935
android Platform 3 5 17351 682459
php Lang 4 4 16910 761350
c# Lang 5 3 15296 805666
jquery Library 6 6 12950 621883
python Lang 7 7 12394 434282
html Markup 8 8 11672 422871
ios Platform 9 10 9465 340714
css Style 10 12 8141 310651


$ cat so_upvote_ratio.txt
Tags Group Upvotes Downvotes UD_ratio
c# Lang 3692949 110750 3
java Lang 3643245 112450 3.09
javascript Lang 3326801 122302 3.68
c++ Lang 2247424 71309 3.17
python Lang 2227963 59990 2.69
php Lang 2177780 106569 4.89
android Platform 2094791 59973 2.86
jquery Library 2054170 68602 3.34
html Markup 1444111 67129 4.65
.net Platform 1334296 38208 2.86

为了简单起见,让我们指定我们不关心命名列(您可以忽略标题并按位置指定列 - 可以使用 shell 脚本中的变量模拟符号名称)。

我会对使用一个或多个命令的单行程序/脚本感兴趣:cat/tacgrepsedawk, head/tail, cut, sort, uniq, commdiffjoinrevteepaste sh/bash shell,模拟下面的一些SQL命令/关系操作:

选择、投影、并集

  SELECT [DISTINCT] select_expr [FROM file_refs]  
[WHERE where_condition] | [WHERE_IN strlist]
[GROUP BY {col | expr}]
[HAVING where_condition]
[ORDER BY {col | expr} [ASC | DESC]]
[LIMIT {num_rows OFFSET offset}]
UNION [ALL | DISTINCT] SELECT ...(sub-query)..

连接/产品:

  [LEFT | RIGHT] [INNER | OUTER] JOIN [ON {on_expression} | USING {using_expression}] 

功能与比较

Aggregation   : CONCAT, COUNT, SUM, MAX, MIN, AVG, MEDIAN, MODE, INDEXOF_MAX, INDEXOF_MIN  
Comparison : =,>,<, LIKE/NOT LIKE, NULL/NOT NULL, IN/NOT IN, Dates comparison
Boolean operators : AND,OR,NOT,XOR

高级操作

Band/Range JOIN, Self JOIN  
Views (Temporary files?), Difference/Except, Division
Sub-queries/Nested queries
Contingency tables

在这种情况下,我更喜欢创造力而不是便携性。

最佳答案

关系模型被认为是一种通用数据管理工具。因此,它有足够的能力和强大的能力来表达,基本上,一切。

因此,在 *ix 管道命令中可表达/可执行的内容是 RA 中可表达/可执行内容的适当子集。 (但请注意,RA 要求您正在处理的内容具有已声明的关系结构,而 *ix 命令的输出则不需要。)

例如,FIND 过滤器(对于这个古老的 DOS 示例很抱歉)有点类似于 WHERE X LIKE '%myfind%',显然是一个限制。

例如,流水线本身有点类似于关系运算符嵌套。

但老实说,RA 支持的大多数操作似乎在命令集中没有或多或少的直接对应项。

关于sql - 从 SQL/关系代数类比到 *nix 命令行过滤器/工具,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30905824/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com