14

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

そして、私はいつでもそこから立ち寄ることができますが、SQLのような言語が問題を非常にきれいに解決するように見えるとき、awkこれはすべて少し厄介な感じがします(抵抗できませんでした)。awk

入力データに基づいてテーブルを自動的に作成するSQLiteのラッパーを作成することを検討し、シングルプロセッサモードでHiveを使用することを検討しましたが、この問題は以前に解決されたと感じざるを得ません。私は何かが足りないのですか?この機能はすでに別の標準ツールによって実装されていますか?

やめろ!

4

8 に答える 8

3

私がTxtSushiを書いたのは、主にフラット ファイルで SQL 選択を行うためです。例のコマンド チェーンを次に示します (これらのコマンドはすべて TxtSushi からのものです)。

tabtocsv 動物.txt | 名前列 - | tssql -テーブルの動物 - \
'col1 の動物グループから col1, max(as_int(col2)) を選択'

animal.txt にはヘッダー行がないため、namecolumns のみが必要です。サンプル スクリプトに目を通せば、何ができるかを簡単に理解できます。メイン ページの下部には、同様のツールへのリンクもあります。

于 2010-04-01T00:47:35.610 に答える
1

非常に基本的なクエリしかサポートしていませんが、あなたが望むようなことを行うこの Python スクリプトに出くわしました。

于 2010-02-17T04:41:30.753 に答える
1

DBD::AnyDataを使用した Perl DBI

于 2010-02-17T02:59:17.750 に答える
0

設定ファイルなどを必要とせずにこのタスクを簡素化するsqlite用の軽量ORMを用意します。

PowerShellを使用できる場合は、テキストファイルの解析とクエリを行うための強力な機能が多数あります(例はこちら)。それ以外の場合は、.NET / Monoを使用して、それを切り詰めて、すぐにLINQを使用できます。

于 2010-02-17T02:40:54.173 に答える
0

私は役立つかもしれないツールを作りました。 http://www.mccoyonlinestore.com/index.php?txtSearch=mccoy_rdbms SQLは、「動物から最大(値)を選択」または「動物から*を選択して値の説明で並べ替え」にすることができます。

于 2012-12-18T05:56:12.800 に答える
0

私は自分の質問に対する満足のいく答えを見つけることができませんでしたが、少なくともuniq「-f」オプションを使用しておもちゃの問題の解決策を見つけました。

cat animals.txt | sort -t " " -k1,1 -k2,2nr \
| awk -F' ' '{print $2, " ", $1}' | uniq -f 1

上記のawk部分は、入力ファイルが逆の順序で列を使用して作成された場合、明らかに完全にスキップできます。

とはいえ、私はまだ SQL に似たツールへの期待を抱いています。

于 2010-02-27T02:37:31.050 に答える