web-dev-qa-db-ja.com

CSVファイルのクエリ

CSVファイルを開いて基本的なSQLesqueクエリを実行できるシンプルなツールを知っている人はいますか?一種のグラフィカルツールのように、使いやすいツールです。

CSVをSQLiteデータベースにインポートするための小さなスクリプトを作成できることはわかっていますが、他の誰かがこのことを自分の前で考えていることを想像しているので、存在するかどうか調べてみました。この質問を引き起こしているのは、Excelの制限されたフィルタリング機能に不満を感じていることです。

おそらく、他のいくつかのデータ視覚化操作ツールが同様の機能を提供するでしょう。

無料またはOSSが推奨されますが、私はあらゆる提案を受け入れます。

編集:

「シートをODBCエントリにする」または「ODBCファイルを使用してプログラムを作成する」ではなく、以下を実行する方法についていくつかの明確なチュートリアルを希望します、または使用するアプリに関するその他のアイデア注:MS Accessは使用できません。

さらに別の編集:

SQLiteを使用したソリューションはまだ開いています。私のプラットフォームは、P4が搭載された半古代のWin2kラップトップです。それはかなり遅いので、リソースライトソリューションが理想的であり、おそらく勝つでしょう。

30
J. Polfer

LogParser を試しましたか?

ログパーサーは、ログファイル、XMLファイル、CSVファイルなどのテキストベースのデータや、イベントログ、レジストリなどのWindows®オペレーティングシステムの主要なデータソースへのユニバーサルクエリアクセスを提供する強力で用途の広いツールです。ファイルシステム、およびActiveDirectory®。必要な情報とその処理方法をLog Parserに伝えます。クエリの結果は、テキストベースの出力でカスタム形式にすることも、SQL、SYSLOG、チャートなどのより特殊なターゲットに永続化することもできます。

ほとんどのソフトウェアは、限られた数の特定のタスクを実行するように設計されています。 Log Parserは異なります... Log Parserを使用できる方法の数は、ユーザーのニーズと想像力によってのみ制限されます。世界は、Log Parserを備えたデータベースです。

SQLのようなクエリ言語をCSVファイルで使用する場合の チュートリアル (および 別の1つ )I googleを使用して検出

クエリの例:

logparser -i:CSV "SELECT TOP 10 Time, Count INTO c:\logparser\test\Chart.GIF 
FROM c:\logparser\test\log.csv ORDER by Time DESC" -charttype:bar3d
13
svandragt

OpenOffice.org Database はあなたがやりたいことをできると思います。それはこのように動作します。

  1. Open Office.orgデータベースを起動すると、「データベースウィザード」が表示されます

  2. 既存のデータベースに接続:テキスト」を選択します

    enter image description here

  3. テキストファイルへのパスと、区切り文字などの詳細を指定します。

    enter image description here

  4. クエリを作成して実行する

    enter image description here

Microsoft Accessを使用したことがあれば、GUIはなじみ深いものです。


GUIなしで実行できる場合、常に従来のUNIXコマンドがあります。 (小さな)CSVファイルへの単純なクエリを実行するためにそれらを頻繁に使用します。以下にその仕組みを示します。

clause      operation   command
-------------------------------
from             join     `join`
where     restriction     `grep`
order by           --     `sort`
group by  restriction      `awk`
having    restriction     `grep`
select     projection      `cut`
distinct  restriction     `uniq`
limit     restriction     `head`
offset    restriction     `tail`
34

ODBCを使用してテキストファイルをクエリできます。

ODBCデータプロバイダー)を使用してテキストファイルにアクセスする

これを機能させるためにMS Accessは必要ありません。上記のリンクのチュートリアルでは、MS Accessを使用してテキストファイルを作成しますが、すでにテキストファイルがあり、途中までスクロールして、タイトルが表示されているチュートリアルを開始しますテキストファイルへのアクセス

更新:.csvファイルにDSNを自分で作成して、このステップバイステップチュートリアルを作成できるようにしました...

  • .csvファイルが他に何もない独自のディレクトリにあることを確認してください。
  • 「ODBCデータソースアドミニストレーター」を開きます(スタート-コントロールパネル-管理ツール-データソース(ODBC))。
  • [ファイルDSN]タブに移動し、[追加...]をクリックします。
  • リストから「Microsoft Text Driver(* .txt、* .csv)」を選択し、「次へ>」をクリックします。
  • ファイルデータソースに名前を付け(「test」など)、[次へ>]をクリックします。
  • [完了]をクリックします(この後、[データソース名]フィールドと[説明]フィールドが灰色で表示されるダイアログが表示されます。これは正常です。心配する必要はありません。
  • [現在のディレクトリを使用]チェックボックスをオフにします。 「ディレクトリの選択」ボタンが有効になります。
  • [ディレクトリの選択]ボタンをクリックして、最初のステップで.csvファイルを配置したフォルダーに移動します。
  • 「オプション>>」ボタンをクリックします。
  • 「フォーマットの定義...」ボタンをクリックします。
  • 左側の「テーブル」リストで、.csvファイルを選択し、「推測」ボタンをクリックします。 (これにより、csvファイルが分析され、.csvファイルの各列に適切なフィールドが作成されます。)
  • 右側のリストで生成された列(F1、F2、...)を調べ、それらに意味のある名前を付け、適切なデータ型を設定します(推測が常に正しいとは限らない場合があります)。
  • すべてが正しく設定されたら、「OK」をクリックします(2回)。

この時点で、ODBCを介して.csvファイルにアクセスできるファイルDSNが必要です。 .csvファイルが置かれているフォルダーを調べると、作成した構成が含まれているschema.iniファイルが表示されます。複数の.csvファイルがある場合、それぞれがテーブルに対応し、各テーブルはschema.iniファイルに[filename。csv]ブロックを持ち、異なる列が定義済み...上記のGUIを使用する代わりに、テキストエディタでschema.iniファイルを直接作成/変更することもできます。

あなたの余分な質問については「これに接続する方法ODBCクエリツールを使用してプロバイダー」:
私はずっと前に自分で書いたツールを持っていますが、それは公開の対象ではありません。しかし、Googleのクイック検索で odbc-view が思いついた。
ツールをダウンロードしてインストールしました。
ツールを起動した後:

  • 「DataSource ...」をクリックします。
  • 以前に作成したファイルデータソースを選択します(「テスト」など)。
  • クエリペインで、「select * from [filename。csv]」と入力します。
  • 「実行」をクリックします。

下のペインに.csvファイルの内容が表示されます。
これがお役に立てば幸いです...どうすればよいか、またはさらにサポートが必要かどうかをお知らせください。

13
fretje

[〜#〜] r [〜#〜] を使用してcsvファイルに高速でアクセスするのが好きです。言語は直接SQLではありませんが、Rの単純なコマンドでこれらすべてのことを実行できます。Rには、ニースグラフを作成する機能やその他の多くの機能もあります。

8
Christian

これを実現する最も簡単な方法は、SQLiteの組み込みCSVインポート機能を使用することです。

  1. sqlite3 mydatabase.sqlite
  2. sqlite> .mode csv
  3. sqlite> .import mydata.csv <tablename>

これで、好きなようにクエリを実行できる稼働中のデータベースができました。また、上記のパフォーマンスは良好であることがわかりました。300万行を10〜15秒でインポートしました。

いつでもファイルをExcelに読み込み、ODBCを介してデータソースとしてExcelを使用し、それに対してクエリを実行できます。

5
m.floryan

これを実行する小さな非グラフィカルアプリ csvsql を見つけました。

ドキュメントは here です。

4
Stefan Thyberg

無料のツール q-データベースとしてのテキスト をご覧ください。これにより、結合、グループ化、その他のSQL構造を含むcsvファイルに対してSQLを直接実行できます。列名と列タイプの自動検出も含まれます。

これは、Linuxの操作方法に一致するコマンドラインツールです(たとえば、必要に応じてstdinからのパイピング、動作をカスタマイズするための特別なフラグなど)。

舞台裏でsqliteを使用しているため、非常に軽量で使いやすいです。

完全な開示-それは私自身のオープンソースツールです。お役に立てば幸いです

ハレルベンアティア

3
Harel Ben Attia

Qツール を試してみてください。非常に軽量で、Python 2.5以降のみが必要です。

2
agrrd

私は、csvsqlと呼ばれるマルチファイル結合を含むcsvファイルに対して任意のSQLを実行するコマンドラインプログラムを作成しました。あなたはそれについてここで読むことができます:

http://bayesianconspiracy.blogspot.com/2010/03/gcsvsql.html

ここにGoogle Codeプロジェクトがあります: http://code.google.com/p/gcsvsql/

それはJava/Groovyで書かれており、どこでも実行できますJavaが利用可能です。

編集:アクティブなプロジェクトがgithubに移動されました。 https://github.com/jdurbin/durbinlib

2
James Durbin

将来これを簡単にする可能性があると私が思うツールは Resolver One です。

これは、Pythonコードを簡単に変更できるコードを生成するスプレッドシートです。開発者であり、スプレッドシートの問題を解決するために「ステップダウン」する必要がある場合、これはスプレッドシートを解決する直感的な方法のようです-彼らが精通している言語の風変わりな問題。

そして、それは私にPythonを使う言い訳をします。 Python私を幸せにします。

2
J. Polfer

H2 JDBCドライバーは非常に便利なcsvread関数を提供し、次のようなことを実行できます。

select * from csvread(test1.csv) test1 
inner join csvread(test2.csv2) test2
on test1.id = test2.foreignkey

このドライバーを使用するためのコードを深く掘り下げる必要なしに、このドライバーを使用するさまざまな方法があります。

個人的には、クエリを実行するための素晴らしいGUIを提供する Squirrel SQL Client を好みます。これを使用するには、既にリストされているH2 In-Memory DriverクラスパスをH2ドライバーにポイントするだけですダウンロードしました。ドライバーを使用して適切なエイリアスを設定したら、ランダムなSQLを実行できます。結果は、Niceテーブルと、インポート、エクスポートなどの他のあらゆる機能に表示されます。

または、Groovyを使用して簡単なスクリプトを記述し、必要に応じてドライバーを読み込んで使用することもできます。方法については この例のブログ投稿 を参照してください。

誰かが上記のgroovyスクリプトを拡張し、それをNiceコマンドラインツールにしてクエリを実行したようです。gcsvsqlを参照してください。これにより、次のようなコマンドを実行できます。

gcsvsql "select * from people.csv where age > 40"
2
lstg

このタスクの2つのオプション: querycsv および fsql 。 QuerycsvはPythonであり、sqlite3を使用します。FsqlはPerlで、 DBD :: CSV を使用します。

1
Nelson

wHSを使用できます。たとえば、ディレクトリ「C:\ Users\user837\Desktop\t4」に4つのファイルがある場合:1.txt

id;sex_ref;sale
1;1;10
2;2;30
3;1;20

2.txt

sex_id;name
1;male
2;female

schema.ini

[1.txt]
Format=Delimited(;)
ColNameHeader=True
MaxScanRows=50
DecimalSymbol=,
[2.txt]
Format=Delimited(;)
ColNameHeader=True
MaxScanRows=50
DecimalSymbol=,

とHello.js

WScript.Echo("Hello World!");
var cn = new ActiveXObject("ADODB.Connection");
cn.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\"C:\\Users\\user837\\Desktop\\t4\";Extended Properties=\"text;HDR=NO;FMT=Delimited\"");

var rs = cn.Execute("select * from 1.txt as t1 left join 2.txt as t2 on t1.sex_ref = t2.sex_id");

while (!rs.EOF) 
{
    WScript.Echo(           rs.Fields("id").Value
                  + "###" + rs.Fields("sex_ref").Value
                  + "###" + rs.Fields("name").Value
                );
    rs.moveNext();
}

Hello.jsをダブルクリックすると、sql requltが1行ずつ表示されます。すべてのクエリ結果を表示するには、WHSのドキュメントを参照してください。

0
Oleg

Nppで開かれたcsvファイルに対してSQLクエリを実行するNotepad ++プラグインCsvQueryがあります。 https://github.com/jokedst/CsvQuery

0
Greck

無料ではありませんが、このために見つけた最高のプログラムは File Query です。コマンドラインベースであるか、ファイルにアクセスする前にファイルのインポート/設定を必要とする他のソリューションとは異なり、File Queryを使用すると、ファイルを開くことができます(通常のテキストエディターのように最大でGBであり、レイアウトを自動的に解析します)。簡単なダイアログからほぼすべてのクエリを実行できます。

それは少し高価ですが、何かを一度だけ行う必要がある場合は、いつでも無料で30日間の試用版を使用できます。彼らはまた、あなたが始めるための素晴らしい ガイドとビデオさえ を持っています。

0
Jeffrey Harmon