フラット ファイルに対するシンプルで高速な SQL クエリ
質問
SQL のような宣言型クエリ言語を使用して、フラット ファイルのシンプルで高速なクエリを提供するツールを知っている人はいますか?入力データは通常、クエリの実行直後に破棄されるため、ファイルを DB にロードするオーバーヘッドを払いたくないのです。
データ ファイル「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
SQL に似た言語が問題を非常にきれいに解決してくれるように見えるとき、(抵抗できませんでした)。
入力データに基づいてテーブルを自動的に作成する SQLite 用のラッパーを作成することを検討したり、シングルプロセッサ モードで Hive を使用することを検討したりしましたが、この問題は以前に解決されていると感じずにはいられません。何かが足りないのでしょうか?この機能は別の標準ツールによってすでに実装されていますか?
ハルプ!
解決 6
私は私の質問に満足の行く答えを見つけることができたことはありませんが、私は、少なくとも私は気づいていないのであったオプション「-f」uniq
s、使用して私のおもちゃの問題への解決策を見つけるんでした:
cat animals.txt | sort -t " " -k1,1 -k2,2nr \
| awk -F' ' '{print $2, " ", $1}' | uniq -f 1
入力ファイルは逆の順序でカラムを使用して作成された場合は、上記awk
部分は、明らかに、完全にスキップすることができた。
私はまだかかわらず、SQLのようなツールへの希望を持っています。
他のヒント
私が書いた テキスト寿司 主にフラット ファイルに対して SQL 選択を行うためです。例のコマンド チェーンは次のとおりです (これらのコマンドはすべて TxtSushi からのものです)。
tabtocsv animals.txt | namecolumns - | tssql -table animals - \ 'select col1, max(as_int(col2)) from animals group by col1'
namecolumns は、animals.txt にはヘッダー行がないためのみ必要です。に目を通してみると、何が可能なのかをすぐに把握できます。 スクリプト例. 。メイン ページの下部には同様のツールへのリンクもあります。
PerlのDBI / P>
あなたは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スクリプトに出くわしそれは非常に基本的なクエリをサポートしていますが、欲しいます。
私たちは、私が単純化するsqliteのの軽量ORMを持っていますなど、すべての構成ファイルを必要とせずに、このタスクます。
テキストファイルを(PowerShellは、解析のための強力な機能をたくさん持っている使用して照会することができた場合は、<のhref =「http://www.candland.net/blog/2007/05/08/SumAColumnInATabdelimitedFileUsingPowershell.aspx」のrel = "nofollowをnoreferrer">ここの一例)。そうしないとあなたがそれをカットアップし、時間がないでLINQを使用することができます.NET /モノラルを使用します。
私は役立つかもしれないツールを作りました。 http://www.mccoyonlinestore.com/index.php?txtSearch=mccoy_rdbmsする あなたのSQLは「動物からマックス(値)を選択し、」かもしれません あるいは、それは「価値DESCにより、動物のためSELECT * FROM」によってできた。
あなたは HXTT JDBCドライバを探すことができます。彼らは、フラットファイル、エクセルなどのほとんどのタイプのJDBCドライバを提供しています。
あなたはそれに簡単なSQLクエリを実行することができます。
彼らは同様に
利用できる試用版を持っています