CSVファイルのクエリ


30

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

CSVをSQLiteデータベースにインポートするための小さなスクリプトを書くことができることは知っていますが、他の誰かがこれを前に考えたことを想像しているので、単に存在するかどうかを問い合わせたいだけです。この質問を促しているのは、Excelの制限されたフィルタリング機能にイライラしていることです。

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

無料またはOSSが推奨されますが、提案は受け付けています。

編集:

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

さらに別の編集:

私は、SQLiteを使用したソリューションを引き続き募集しています。私のプラットフォームは、P4を搭載した半古代のWin2kラップトップです。それは非常に遅いので、リソースの少ないソリューションが理想的であり、おそらく勝つでしょう。


念のため、SQLiteを使用したソリューションを引き続きご利用いただけますか?(.separatorコマンドと.importコマンドを使用しますか?)そして、どのプラットフォームを使用していますか?
アルジャン

好奇心から:MS Accessを使用できないのはなぜですか?
ルートヴィヒワインツィール

@ Arjan-SQLiteを使用したソリューションについてはまだオープンです。私のプラットフォームは、P4を搭載した半古代のWin2kラッピーです。それは非常に遅いので、リソースの少ないソリューションが理想的であり、おそらく勝つでしょう。
J.ポルファー09

2
@ fretje-SQLiteの経験がないこと。ソースコードで合計1MB。携帯電話で使用されています。Win32実行可能ファイル(エンジンおよびすべて)は300KBです。
J.ポルファー09

1
@sheepsimulator:私はそれが軽いことを知っていますが、私のポイントはまだ残っています...テキストファイルへのODBCアクセスは基本的にOSに組み込まれていますが、SQLiteではまだ何かを最初にインストールしてcsvファイルをデータベースにインポートする必要があります。何もインストールしなくても、非常に小さなものをインストールするよりも少ないでしょう。
fretje

回答:


13

LogParserを試しましたか?

ログパーサーは、ログファイル、XMLファイル、CSVファイルなどのテキストベースのデータ、およびイベントログ、レジストリ、ファイルシステム、およびActiveDirectory®。Log Parserに必要な情報とその処理方法を伝えます。クエリの結果は、テキストベースの出力でカスタム形式にすることも、SQL、SYSLOG、グラフなどのより特殊なターゲットに永続化することもできます。

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

チュートリアル(および別の CSVでのクエリ言語のようなSQLを使用した上で)私はファイルの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

フォーラムのサポートやご質問の多くはで答えられるforums.iis.net/default.aspx?GroupID=51公式のLOGPARSERのフォーラムです
svandragt

2
codinghorror.com/blog/archives/000369.html Niceのその他の例。残念なことに、Windowsのみです。
アルジャン

34

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

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

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

    ここに画像の説明を入力してください

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

    ここに画像の説明を入力してください

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

    ここに画像の説明を入力してください

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`

うわー、素晴らしい答えです!+1
theycallmemorty 09

これは単なるトリックのように見えます。この老朽化したラッピーの上にオブジェクト指向ベースを作成できるかどうか確認します。
J.ポルファー09

+1。クール!OOを探索する気になりませんでした。常にMS Oが優位だと考えていました!
スワナンド2009

病気!大きなファイルのパフォーマンスはどうですか。私は、バイオインフォマティックスにいるよと巨大なタブ区切りのジャンク持っている
user2751

@ 1alstew1:大きなファイルの場合は、両方の方法から離れて、実際のデータベースを使用します。また、バッチインポート(LOAD)を使用してデータベースにデータを取得してください。INSERTよりもはるかに高速です。
ルートヴィヒワインツィール

13

ODBCを使用してテキストファイルを照会できます。

ODBCデータプロバイダーを使用したテキストファイルへのアクセス

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

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

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

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

「クエリツールを使用してこのODBCプロバイダーに接続する方法」という追加の質問について
は、かなり前に書いたツールがありますが、これは公開の資格がありません。しかし、簡単なGoogle検索で、必要なことを行うフリーウェアツールodbc-viewが登場しました。
ツールをダウンロードしてインストールしました。
ツールを開始した後:

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

下のペインに.csvファイルの内容が表示されます。
これがお役に立てば幸いです...どうすればよいか、さらに支援が必要な場合はお知らせください。


@ fretje-これを機能させるためにMS Accessが必要ないことは知っています。自分で試しました。これには2つの問題がありました。1。完了時にCSV-DBを照会するために使用できるGUIまたはCLIユーティリティが必要です。上記で引用したチュートリアルでは、そのいずれもリストしていません。.NETアプリを作成してこのODBCデータベースにアクセスすることを前提としています。2.このソリューションを使用するPCでは、このソリューションを実行するにはODBCセットアップだけでは不十分だと思います。ODBCデータプロバイダーの作成時にDSNに名前を付けることができなかったため、ボックスがグレー表示されていました。おそらくシステムのセットアップの問題です。
J.ポルファー09

@ fretje-クエリツールを使用してこのODBCプロバイダーに接続する方法を説明できる場合、それはいいでしょう。どうすればいいのかわかりません。ちょっとした答えを探していました。
J.ポルファー09

8

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


5

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


できます?これは黒魔術のように聞こえます。チュートリアルのリンクを見つけられますか?
J.ポルファー2009

2
@sheepsimulator:Excelはcsvファイルを開くだけです。Excelファイルを取得したら、テキストファイルを照会できるようにODBCで照会できます(以下の回答を参照)。
fretje

5

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

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

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


3

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

ドキュメントはこちらです。


これはまさに私が探しているタイプのアプリですが、GUIがあればいいのですが。残念ながら、Win2kボックス用にコンパイルする良い方法は今のところ本当にありません。あなたに戻ります。また、作成者はautomakeなどを使用していなかったため、コンパイルするにはジグザグの方法が必要です。
J.ポルファー09

見つけるのは非常に難しく、あなたが説明したものに近いものを見つけることができるのはそれだけでした。おそらく、テキストファイルをインポートし、たとえばSQL Liteを使用してSQLクエリを実行できるアプリケーションを作成するというアイデアでしょうか。
ステファンサイバーグ2009

1
sqlite3(SQLiteデータベースを読み取るコマンドラインアプリケーション)には、ファイルのインポートが組み込まれています-sqlite.org/sqlite.htmlの.separatorおよび.importコマンドを参照してください
Arjan

1
はい、答えで何度か言及されているのを見ましたが、クエリウィンドウを備えた本格的なメモ帳のようなアプリケーションを考えていました。
ステファンサイバーグ09

3

無料のツールq-データベースとしてのテキストを見ると、csvファイルでSQLを直接実行できます。これには、結合、グループ化、その他のSQL構造が含まれます。列名と列タイプの自動検出も含まれます。

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

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

完全な開示-私自身のオープンソースツールです。あなたがそれが役に立つことを願っています

ハレル・ベン・アティア


このツールは最高です!
ダウィドフェレンツィーロゴザン

2

私がこれを将来簡単にする可能性があることを発見したツールは、Resolver Oneです。

これは、簡単に変更可能なPythonコードを生成するスプレッドシートです。開発者であり、スプレッドシートの問題を解決するために「ステップダウン」する必要がある人にとって、これは使い慣れた言語でスプレッドシート特有の問題を解決する直感的な方法のようです。

そして、Pythonを使用する口実を与えてくれます。Pythonは私を幸せにします。


2

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-MemoryDriverクラスパスをダウンロードしたH2ドライバーにポイントすることです。ドライバーを使用して適切なエイリアスを設定したら、任意のランダムSQLを実行できます。結果は、すてきなテーブルと、インポート、エクスポートなどのためのその他のあらゆる機能に表示されます。

あるいは、Groovyを使用して、必要に応じてドライバーをロードおよび使用するクイックスクリプトを作成することもできます。方法については、このブログ投稿の例をご覧ください。

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

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


2

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

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

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

Java / Groovyで記述されており、Javaが利用可能な場所であればどこでも実行できます。

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



0

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

少し高価ですが、何かを一度だけ行う必要がある場合は、30日間の無料試用版をいつでも使用できます。また、優れたガイドやビデオが用意されており、すぐに使い始めることができます。


0

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が表示されます。すべてのクエリ結果を表示するには、WHSのドキュメントを参照してください。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.