回答

收藏

简单,快速的SQL查询平面文件

技术问答 技术问答 293 人阅读 | 0 人回复 | 2023-09-14

有谁知道使用类似SQL的声明性查询语言来提供简单,快速的平面文件查询的工具吗?我宁愿不支付将文件加载到数据库中的开销,因为输入数据通常在查询运行后立即被抛出。
% o4 c4 [" K: v9 ?考虑数据文件“ animals.txt”:
" H% o7 p$ J( q, v/ z2 k6 mdog 15
( P  ~! @: Q* X8 M4 Ccat 20
% X+ j: W1 x8 e5 |& t% xdog 10
. J$ o  X% C7 t2 N  N9 a$ L0 Acat 30
1 b6 Z7 s2 ]0 Q: Bdog 5
/ B* Q" o. V9 J  Z# v: Jcat 40- R( y3 I$ P$ N: Z
假设我想为每只独特的动物提取最高价值。我想写一些类似的东西:
1 K6 L" s& q& Pcat animals.txt | foo "select $1, max(convert($2 using decimal)) group by $1"
! O& `; J! P" ~* k7 W我可以使用sort以下方法获得几乎相同的结果:
2 r+ H- b* \: Fcat animals.txt | sort -t " " -k1,1 -k2,2nr1 \0 k- Q9 I; Q
而且我总是可以awk从那里开始的,但是awk当一种类似SQL的语言似乎可以如此干净地解决问题时,这一切都让我感到有些隔((无法抗拒)。
: x6 h4 j) k) d: i/ ?  @我考虑过为SQLite编写一个包装程序,该包装程序将根据输入数据自动创建一个表,并且我已经考虑在单处理器模式下使用Hive,但我不禁感到以前已经解决了这个问题。我想念什么吗?此功能是否已由其他标准工具实现?
2 c: N% B8 P4 p7 j& ^& @; r
6 O" A, v* @% q8 B$ x% _                ; G8 u  V- F" r- w
解决方案:. m& ~0 E6 F) d. i0 e
               
- V" F; S  h& e9 k
2 N# {# A4 @2 M4 v  T4 E2 P3 m  U
3 P. X" ]# [( B. n7 K' z- [                我从未设法找到令人满意的答案,但是至少使用uniqs“ -f”选项确实找到了解决玩具问题的方法,但我一直没有意识到:
3 p( u1 ?( D& J% p1 e8 Q% }* Acat animals.txt | sort -t " " -k1,1 -k2,2nr \
/ L- H# A- B( ~| awk -F' ' '{print $2, " ", $1}' | uniq -f 1
( e5 w2 B% X2 @& _0 ]8 Xawk如果输入文件是按相反顺序创建的,则显然可以完全跳过上面的部分。
/ f' u# e9 J$ i, [) D4 c不过,我仍然对类似SQL的工具抱有希望。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则