CSV-Datei abfragen

30

Kennt jemand ein einfaches Tool, mit dem Sie eine CSV-Datei öffnen und grundlegende SQLesque-Abfragen durchführen können? Wie eine Art grafisches Werkzeug, das einfach zu bedienen ist.

Ich weiß, dass ich ein kleines Skript schreiben kann, um die CSV in eine SQLite-Datenbank zu importieren, aber da ich mir vorstelle, dass jemand anderes darüber nachgedacht hat, wollte ich nur nachfragen, ob es eine gibt. Was diese Frage aufwirft, ist, dass ich mit den eingeschränkten Filtermöglichkeiten von Excel frustriert bin.

Möglicherweise bietet ein anderes Tool zur Manipulation der Datenvisualisierung ähnliche Funktionen.

Frei oder OSS ist bevorzugt, aber ich bin offen für Vorschläge.

BEARBEITEN:

Ich würde wirklich einige klare Tutorials bevorzugen, um das Folgende zu tun, anstatt nur "Ihr Blatt zu einem ODBC-Eintrag machen" oder "Programme mit ODBC-Dateien schreiben", oder mehr Ideen für zu verwendende Apps. Hinweis: Ich kann MS Access nicht verwenden.

Noch ein EDIT:

Ich bin immer noch offen für Lösungen mit SQLite. Meine Plattform ist ein halbaltes Win2k-Notebook mit einem P4. Es ist ziemlich langsam, daher ist eine ressourcenschonende Lösung ideal und würde wahrscheinlich den Sieg bringen.

J. Polfer
quelle
Nur um sicherzugehen: Sie sind immer noch offen für Lösungen mit SQLite? (Wie mit den Befehlen .separator und .import?) Und auf welcher Plattform sind Sie?
Arjan
Nur aus Neugier: Warum können Sie MS Access nicht verwenden?
Ludwig Weinzierl
@ Arjan - Ich bin immer noch offen für Lösungen mit SQLite. Meine Plattform ist ein halbaltes Win2k-Lappy, auf dem sich ein P4 befindet. Es ist ziemlich langsam, daher ist eine ressourcenschonende Lösung ideal und würde wahrscheinlich den Sieg bringen.
J. Polfer,
2
@ fretje - Sie müssen keine Erfahrung mit SQLite haben. Insgesamt 1 MB im Quellcode. Es wird auf Handys verwendet. Die ausführbare Win32-Datei (Engine und alle) ist 300 KB groß.
J. Polfer
1
@sheepsimulator: Ich weiß, dass es leicht ist, aber mein Standpunkt bleibt ... Der ODBC-Zugriff auf Textdateien ist im Grunde genommen in das Betriebssystem integriert, während Sie mit SQLite zunächst noch etwas installieren und die CSV-Datei in eine Datenbank importieren müssen. Das Installieren von nothing ist immer noch weniger als das Installieren von etwas sehr Kleinem, nicht wahr?
Freitag,

Antworten:

13

Haben Sie LogParser ausprobiert ?

Log Parser ist ein leistungsstarkes, vielseitiges Tool, das universellen Zugriff auf textbasierte Daten wie Protokolldateien, XML-Dateien und CSV-Dateien sowie wichtige Datenquellen unter Windows® wie das Ereignisprotokoll, die Registrierung, das Dateisystem und Active Directory®. Sie teilen Log Parser mit, welche Informationen Sie benötigen und wie sie verarbeitet werden sollen. Die Ergebnisse Ihrer Abfrage können in einer textbasierten Ausgabe benutzerdefiniert formatiert werden oder für spezielle Ziele wie SQL, SYSLOG oder ein Diagramm beibehalten werden.

Die meiste Software wurde entwickelt, um eine begrenzte Anzahl spezifischer Aufgaben zu erfüllen. Log Parser ist anders ... Die Anzahl der Verwendungsmöglichkeiten ist nur durch die Bedürfnisse und die Vorstellungskraft des Benutzers begrenzt. Die Welt ist Ihre Datenbank mit Log Parser.

Ein Tutorial (und ein weiteres ) zur Verwendung der SQL-ähnlichen Abfragesprache mit CSV-Dateien, die ich mit Google gefunden habe .

Beispielabfrage:

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
svandragt
quelle
Forum Unterstützung und viele Ihrer Fragen werden auf beantwortet werden forums.iis.net/default.aspx?GroupID=51 das ist die offizielle logparser Forum
svandragt
2
Weitere Beispiele unter codinghorror.com/blog/archives/000369.html Nice; Schade, es ist nur Windows.
Arjan
34

Ich denke, OpenOffice.org Database kann tun, was Sie wollen. Das funktioniert so.

  1. Starten Sie die Open Office.org-Datenbank. Es wird der " Datenbank-Assistent " angezeigt.

  2. Wählen Sie "Mit einer vorhandenen Datenbank verbinden: Text "

    Bildbeschreibung hier eingeben

  3. Geben Sie den Pfad zu Textdateien sowie Details wie Trennzeichen usw. an.

    Bildbeschreibung hier eingeben

  4. Erstellen Sie Abfragen und führen Sie sie aus

    Bildbeschreibung hier eingeben

Wenn Sie jemals mit Microsoft Access gearbeitet haben, wird Ihnen die Benutzeroberfläche bekannt vorkommen.


Wenn Sie auf eine GUI verzichten können, gibt es immer die traditionellen UNIX-Befehle. Ich benutze sie oft, um einfache Anfragen an (kleine) CSV-Dateien zu stellen. So funktioniert es:

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`
Ludwig Weinzierl
quelle
Wow, tolle Antwort! +1
erinnern sich an den
Das scheint nur der Trick zu sein. Ich werde sehen, ob ich mich auf dieses alternde Haar stützen kann.
J. Polfer
+1. Cool! Hat sich nicht die Mühe gemacht, OO zu erkunden. Dachte immer, MS O hätte die Nase vorn!
Swanand
krank! Wie ist die Leistung für große Dateien. Ich bin in Bioinformatik und habe riesige
tabulatorgetrennte
@ 1alstew1: Bei großen Dateien würde ich mich von beiden Methoden fernhalten und eine echte Datenbank verwenden. Stellen Sie außerdem sicher, dass Sie den Batch-Import (LOAD) verwenden, um die Daten in Ihre Datenbank zu importieren. Dies ist viel schneller als INSERT.
Ludwig Weinzierl
13

Sie können ODBC zum Abfragen von Textdateien verwenden:

Zugriff auf Textdateien mit ODBC-Datenprovider

Beachten Sie, dass Sie MS Access nicht benötigen, damit dies funktioniert. Das Lernprogramm im obigen Link verwendet nur MS Access zum Erstellen der Textdatei. Da Sie jedoch bereits über eine Textdatei verfügen, scrollen Sie zur Hälfte nach unten und starten Sie das Lernprogramm an der angezeigten Stelle den Titel Zugriff auf eine Textdatei .

Update : Ich habe selbst einen DSN für eine CSV-Datei erstellt, um dieses Tutorial Schritt für Schritt erstellen zu können ... hier kommt es:

  • Stellen Sie sicher, dass sich Ihre CSV-Datei ohne weitere Informationen in einem eigenen Verzeichnis befindet.
  • Öffnen Sie den "ODBC-Datenquellen-Administrator" (Start - Systemsteuerung - Verwaltung - Datenquellen (ODBC)).
  • Gehen Sie zur Registerkarte Datei-DSN und klicken Sie auf "Hinzufügen ...".
  • Wählen Sie "Microsoft Text Driver (* .txt, * .csv)" aus der Liste und klicken Sie auf "Weiter>".
  • Geben Sie einen Namen für Ihre Dateidatenquelle ein (zB "test") und klicken Sie auf "Weiter>".
  • Klicken Sie auf "Fertig stellen" (Danach wird ein Dialogfeld angezeigt, in dem die Felder "Datenquellenname" und "Beschreibung" tatsächlich ausgegraut sind. Dies ist normal. Keine Sorge.
  • Deaktivieren Sie das Kontrollkästchen "Aktuelles Verzeichnis verwenden". Die Schaltfläche "Verzeichnis auswählen" wird aktiviert.
  • Klicken Sie auf die Schaltfläche "Verzeichnis auswählen" und navigieren Sie zu dem Ordner, in dem Sie im ersten Schritt Ihre CSV-Datei abgelegt haben.
  • Klicken Sie auf die Schaltfläche "Optionen >>".
  • Klicken Sie auf die Schaltfläche "Format definieren ...".
  • Wählen Sie in der linken Liste "Tables" Ihre CSV-Datei aus und klicken Sie auf die Schaltfläche "Guess". (Dadurch wird Ihre CSV-Datei analysiert und für jede Spalte in Ihrer CSV-Datei ein entsprechendes Feld erstellt.)
  • Gehen Sie die generierten Spalten (F1, F2, ...) in der rechten Liste durch, geben Sie ihnen aussagekräftige Namen und stellen Sie den entsprechenden Datentyp ein (manchmal ist das Erraten nicht immer richtig).
  • Sobald alles richtig eingerichtet ist, klicken Sie zweimal auf "OK".

Zu diesem Zeitpunkt sollten Sie über einen Datei-DSN verfügen, mit dem Sie über ODBC auf Ihre CSV-Datei zugreifen können. Wenn Sie Ihren Ordner überprüfen, in dem sich die CSV-Datei befindet, wird eine schema.ini-Datei angezeigt, die die gerade erstellte Konfiguration enthält. Wenn Sie mehrere .csv-Dateien haben, entspricht jede einer Tabelle und jede Tabelle hat einen [ Dateiname .csv] -Block in der Datei schema.ini, in der die verschiedenen Spalten definiert sind. Sie können dieses Schema auch erstellen / ändern INI-Datei direkt in einem Texteditor anstelle der oben beschriebenen GUI.

Zu Ihrer zusätzlichen Frage "Wie verbinde
ich mich mit diesem ODBC-Provider mithilfe eines Abfrage-Tools?": Ich habe ein Tool, das ich vor langer Zeit selbst geschrieben habe und das nicht zur Veröffentlichung zugelassen ist. Aber eine schnelle Google-Suche brachte odbc-view hervor , ein Freeware-Tool, das genau das macht, was Sie wollen.
Ich habe das Tool heruntergeladen und installiert.
Nach dem Start des Tools:

  • Klicken Sie auf "DataSource ...".
  • Wählen Sie Ihre zuvor erstellte Dateidatenquelle aus (z. B. "Test").
  • Geben Sie im Abfragebereich "Wählen Sie * aus [ Dateiname .csv]" ein.
  • Klicken Sie auf "Ausführen".

Sie sollten jetzt den Inhalt Ihrer CSV-Datei im unteren Bereich sehen.
Hoffe das hilft ... Lass mich wissen, wie es dir geht oder ob du weitere Hilfe benötigst.

fretje
quelle
@ fretje - Ich weiß, ich brauche kein MS Access, ich habe es selbst ausprobiert. Dabei sind zwei Probleme aufgetreten: 1. Ich möchte eine GUI oder ein CLI-Dienstprogramm, mit dem ich die CSV-DB abfragen kann, wenn ich fertig bin. In dem Tutorial, das Sie oben zitiert haben, ist nichts davon aufgeführt. Es wird davon ausgegangen, dass Sie auf diese ODBC-Datenbank zugreifen möchten, indem Sie eine .NET-App schreiben. 2. Auf dem PC, auf dem ich diese Lösung verwenden würde, ist mein ODBC-Setup meiner Meinung nach nicht ausreichend, um dieser Lösung zu folgen. Ich konnte meinen DSN beim Erstellen des ODBC-Datenproviders nicht benennen, die Box war ausgegraut. Möglicherweise ein Systeminstallationsproblem.
J. Polfer
@ fretje - Wenn Sie erklären können, wie Sie mit einem Abfragetool eine Verbindung zu diesem ODBC-Provider herstellen, wäre das nett. Ich weiß nicht, wie ich das machen soll. War irgendwie auf der Suche nach einer umfassenden Antwort.
J. Polfer
8

Ich benutze R gerne, um schnell auf CSV-Dateien zuzugreifen. Während die Sprache nicht direkt SQL ist, können Sie all diese Dinge mit einfachen Befehlen in R erledigen. R bietet Ihnen auch die Möglichkeit, schöne Diagramme und eine Menge anderer Möglichkeiten zu erstellen.

Christian
quelle
5

Sie können die Datei jederzeit in Excel einlesen und Excel als Ihre Datenquelle über ODBC verwenden und Abfragen für diese ausführen.

m.floryan
quelle
Ich kann? Das klingt nach schwarzer Magie. Finden Sie einen Link für ein Tutorial?
J. Polfer
2
@sheepsimulator: Excel öffnet nur CSV-Dateien ... Sobald Sie eine Excel-Datei haben, können Sie diese mit ODBC abfragen, genau wie Sie Textdateien abfragen können (siehe meine Antwort unten).
Freitag,
5

Ich fand, dass der einfachste Weg, dies zu erreichen, darin besteht, einfach die integrierte CSV-Importfunktion von SQLite zu verwenden:

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

Jetzt haben Sie eine funktionierende Datenbank, die Sie nach Belieben abfragen können. Ich fand auch die Leistung der oben genannten gut, ich habe gerade drei Millionen Zeilen in 10-15 Sekunden importiert.

Markus Amalthea Magnuson
quelle
3

Ich habe eine kleine, nicht grafische App gefunden, die das macht: csvsql .

Dokumentation ist hier .

Stefan Thyberg
quelle
Dies ist genau die Art von App, die ich suche, obwohl es schön wäre, wenn es eine GUI hätte. Leider habe ich im Moment wirklich keine gute Möglichkeit, es für die Win2k-Box zu kompilieren. Wir melden uns bei Ihnen. Außerdem hat der Autor kein automake oder ähnliches verwendet, weshalb für die Kompilierung einige Jigger-Typokery erforderlich ist.
J. Polfer
Es war sehr schwer zu finden und es war das einzige, was ich in der Nähe von dem finden konnte, was Sie beschrieben haben. Vielleicht eine Idee für jemanden, eine Anwendung zu schreiben, mit der Textdateien importiert und SQL-Abfragen mit SQL Lite ausgeführt werden können?
Stefan Thyberg
1
sqlite3(Die Befehlszeilenanwendung, die SQLite-Datenbanken liest) unterstützt das Importieren von Dateien. Weitere Informationen finden Sie in den Befehlen .separator und .import unter sqlite.org/sqlite.html
Arjan,
1
Ja, ich habe es mehrmals in den Antworten erwähnt gesehen, aber ich dachte mehr an eine vollwertige Notizblock-ähnliche Anwendung mit einem Abfragefenster.
Stefan Thyberg
3

Sie können sich das kostenlose Tool q - Text als Datenbank ansehen, mit dem SQL direkt auf CSV-Dateien ausgeführt werden kann, einschließlich Joins, Gruppierungen und anderen SQL-Konstrukten. Beinhaltet auch die automatische Erkennung von Spaltennamen und Spaltentypen.

Es ist ein Befehlszeilen-Tool, das der Linux-Arbeitsweise entspricht (z. B. Piping von stdin, falls erforderlich, spezielle Flags zum Anpassen des Verhaltens usw.).

Verwendet SQLite hinter den Kulissen, also sehr leicht und einfach zu bedienen.

Vollständige Offenlegung - Es ist mein eigenes Open Source-Tool. Ich hoffe, Sie finden es nützlich

Harel Ben-Attia

Harel Ben Attia
quelle
Dieses Tool ist absolut genial!
Dawid Ferenczy Rogožan
2

Ein Tool, das ich gefunden habe und das dies in Zukunft möglicherweise einfacher macht, ist Resolver One .

Es ist eine Kalkulationstabelle, die Python-Code generiert, der leicht modifizierbar ist. Für Entwickler, die gelegentlich "zurücktreten" müssen, um Probleme in Tabellenkalkulationen zu lösen, scheint dies eine intuitive Möglichkeit zu sein, Probleme in Tabellenkalkulationsform in einer ihnen vertrauten Sprache zu lösen.

Und es gibt mir eine Entschuldigung für die Verwendung von Python. Python macht mich glücklich.

J. Polfer
quelle
2

Der H2 JDBC-Treiber bietet eine sehr nützliche csvread-Funktion, mit der Sie folgende Aufgaben ausführen können:

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

Es gibt verschiedene Möglichkeiten, diesen Treiber zu nutzen, ohne sich mit dem Schreiben von Code befassen zu müssen.

Persönlich bevorzuge ich den Squirrel SQL-Client, der Ihnen eine schöne Benutzeroberfläche zum Ausführen von Abfragen bietet. Um ihn zu verwenden, müssen Sie lediglich den bereits aufgelisteten H2 In-MemoryTreiberklassenpfad auf den von Ihnen heruntergeladenen H2-Treiber verweisen . Sobald Sie mit dem Treiber einen geeigneten Alias ​​eingerichtet haben, können Sie beliebige SQL-Anweisungen ausführen. Die Ergebnisse werden in einer schönen Tabelle angezeigt und alle möglichen anderen Funktionen zum Importieren, Exportieren usw.

Alternativ können Sie mit Groovy ein schnelles Skript schreiben, um den Treiber nach Bedarf zu laden und zu verwenden. In diesem Beispiel-Blogpost erfahren Sie, wie.

Es sieht so aus, als hätte jemand das obige groovige Skript erweitert und es zu einem netten Befehlszeilentool gemacht, um die Abfragen auszuführen, siehe gcsvsql. Damit können Sie Befehle wie die folgenden ausführen:

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

Möglicherweise möchten Sie Q tool ausprobieren . Es ist sehr leicht, benötigt nur Python 2.5 oder neuer.

agrrd
quelle
2

Ich habe ein Befehlszeilenprogramm geschrieben, um beliebige SQL-Anweisungen für CSV-Dateien auszuführen, einschließlich Joins mit mehreren Dateien, die als gcsvsql bezeichnet werden. Hier können Sie darüber lesen:

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

Hierfür gibt es ein Google Code-Projekt: http://code.google.com/p/gcsvsql/

Es ist in Java / Groovy geschrieben und läuft überall dort, wo Java verfügbar ist.

Bearbeiten: Aktives Projekt nach Github verschoben. https://github.com/jdurbin/durbinlib

James Durbin
quelle
1

Zwei weitere Optionen für diese Aufgabe: querycsv und fsql . Querycsv ist Python und verwendet sqlite3. Fsql ist Perl und verwendet DBD :: CSV .

Nelson
quelle
0

Obwohl es nicht kostenlos ist, ist File Query das beste Programm, das ich dafür gefunden habe . Im Gegensatz zu den anderen Lösungen, die entweder auf der Befehlszeile basieren oder das Importieren / Einrichten der Datei vor dem Zugriff erfordern, können Sie mit File Query eine Datei öffnen (sogar GBs werden wie in einem normalen Texteditor eingelesen) und das Layout wird automatisch für Sie analysiert. und lassen Sie fast alle Abfragen in einfachen Dialogen durchführen.

Es ist etwas teuer, aber wenn Sie nur einmal etwas tun müssen, können Sie die 30-Tage-Testversion jederzeit kostenlos nutzen. Sie haben auch tolle Anleitungen und sogar Videos , um Ihnen den Einstieg zu erleichtern.

Jeffrey Harmon
quelle
0

Sie können WHS verwenden. Zum Beispiel habe ich 4 Dateien im Verzeichnis 'C: \ Users \ user837 \ Desktop \ t4': 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=,

und 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();
}

Jetzt doppelklicken Sie einfach auf Hello.js und Sie sehen zeilenweise, was SQL benötigt. In der WHS-Dokumentation finden Sie alle Abfrageergebnisse.

Oleg
quelle
0

Es gibt ein CsvQuery-Plugin für Notepad ++, mit dem SQL-Abfragen für in npp geöffnete CSV-Dateien ausgeführt werden können. https://github.com/jokedst/CsvQuery

Greck
quelle