对于平面文件的简单,快速的SQL查询
题
有谁知道任何工具提供的使用类似SQL的声明性查询语言平面文件简单,快捷的查询?我宁可不支付的文件加载到数据库中,因为输入数据通常几乎立即执行查询后抛出的开销。
考虑数据文件, “animals.txt”:
dog 15
cat 20
dog 10
cat 30
dog 5
cat 40
假设我要提取每个独特动物的最高值。我想写点东西,如:
cat animals.txt | foo "select $1, max(convert($2 using decimal)) group by $1"
我可以使用sort
得到几乎相同的结果:
cat animals.txt | sort -t " " -k1,1 -k2,2nr
和我可以随时掉入awk
从那里,但是这一切都感觉有点awk
ward(无法抗拒)当一个类似于SQL的语言似乎是如此工整解决问题。
我认为写的SQLite会自动创建一个基于输入数据的表的包装,我已经研究过在单处理器模式下使用蜂巢,但我不禁觉得这个问题已经之前解决。我缺少的东西吗?难道这个功能已经被另一个标准工具实现的?
HALP!
解决方案 6
我从来没有设法找到一个满意的回答我的问题,但我并至少找到一个解决方案,以使用uniq
s“-f”选项,我的玩具的问题,我一直不知道的:
cat animals.txt | sort -t " " -k1,1 -k2,2nr \
| awk -F' ' '{print $2, " ", $1}' | uniq -f 1
上面的awk
部分可以,很明显,完全跳过如果输入文件被以相反的顺序与列创建。
我还抱着希望有一个类似SQL的工具,虽然。
其他提示
的Perl DBI使用 DBD :: ANYDATA
可以使用SQLite。下面是使用Python一个例子。
import sqlite3
conn = sqlite3.connect('/tmp/test.db')
cursor = conn.cursor()
try:
cursor.execute("""create table table1 (word varchar not null, number varchar not null)""")
except: pass
cursor.execute("insert into table1 values ('dog', '15')")
cursor.execute("insert into table1 values ('cat', '20')")
cursor.execute("insert into table1 values ('dog', '10')")
cursor.execute("select max(number) , word from table1 group by word")
print cursor.fetchall()
输出
$ ./python.py
[(u'20', u'cat'), (u'15', u'dog')]
我只是碰到这个Python脚本它确实像你想,尽管它仅支持很基本的查询。
我们我将有一个轻便ORM此任务,而不需要任何配置文件等。
如果您可以使用PowerShell提供了大量的用于分析的强大功能和查询文本文件(的例如此处)。否则,使用.NET /单声道可以削减,多达并在任何时间使用LINQ。
我做了一个工具,它可以帮助。 http://www.mccoyonlinestore.com/index.php?txtSearch=mccoy_rdbms 您的SQL可能是“选择与动物最大(值)” 或者它可以由
“从动物为了通过值降序选择*”