Abfragen einer CSV-Datei

33418
J. Polfer

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

Ich weiß, dass ich ein kleines Skript schreiben könnte, um den CSV-Import in eine SQLite-Datenbank durchzuführen. Da ich mir jedoch vorstelle, dass jemand anderes vor mir gedacht hatte, wollte ich nur nachfragen, ob eine vorhanden war. Die Frage, die zu dieser Frage führt, ist, dass ich mit den eingeschränkten Filterfunktionen von Excel frustriert bin.

Möglicherweise bietet ein anderes Werkzeug zur Datenvisualisierung eine ähnliche Funktionalität.

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

BEARBEITEN:

Ich würde wirklich einige klare Tutorials vorziehen, wie man das unten ausführt, anstatt "Ihr Blatt zu einem ODBC-Eintrag machen" oder "Programme mit ODBC-Dateien schreiben" oder mehr Ideen für Apps. Hinweis: Ich kann MS Access nicht verwenden.

Noch ein EDIT:

Ich bin immer noch offen für Lösungen, die SQLite verwenden. Meine Plattform ist ein altertümlicher Win2k-Laptop mit einem P4 darauf. Es ist ziemlich langsam, so dass eine ressourcenschonende Lösung ideal ist und wahrscheinlich den Sieg erringen würde.

28
Nur um sicher zu sein: Sie sind noch offen für Lösungen mit SQLite? (Wie mit den Befehlen .separator und .import?) Und auf welcher Plattform sind Sie? Arjan vor 15 Jahren 0
Nur aus Neugier: Warum können Sie MS Access nicht verwenden? Ludwig Weinzierl vor 15 Jahren 0
@ Arjan - Ich bin immer noch offen für Lösungen mit SQLite. Meine Plattform ist eine halb-alte Win2k-Lappy mit einem P4 darauf. Es ist ziemlich langsam, so dass eine ressourcenschonende Lösung ideal ist und wahrscheinlich den Sieg erringen würde. J. Polfer vor 15 Jahren 0
SQLite hat vielleicht 'Lite' im Namen ... Ich glaube nicht, dass die Installation einer vollständigen Datenbank-Engine einfacher ist als der direkte Zugriff auf die Textdatei über ODBC (MS ODBC-Texttreiber sollten standardmäßig auf Ihrer win2k-Installation installiert sein, sonst können Sie dies tun Installieren Sie MDAC: http://msdn.microsoft.com/en-us/data/aa937729.aspx). fretje vor 15 Jahren 0
@ fretje - Du darfst keine Erfahrung mit SQLite haben. 1 MB insgesamt im Quellcode. Es wird auf Mobiltelefonen verwendet. Die ausführbare Win32-Datei (Engine und alle) ist 300 KB groß. J. Polfer vor 15 Jahren 2
@sheepsimulator: Ich weiß, dass es hell ist, aber mein Standpunkt bleibt bestehen ... ODBC-Zugriff auf Textdateien ist im Wesentlichen in das Betriebssystem integriert, während bei SQLite zunächst noch etwas installiert und die CSV-Datei in eine Datenbank importiert werden muss. Nichts zu installieren ist immer noch weniger als etwas sehr kleines zu installieren, oder? fretje vor 15 Jahren 1

16 Antworten auf die Frage

33
Ludwig Weinzierl

Ich denke, OpenOffice.org Database kann tun, was Sie wollen. So funktioniert es.

  1. Starten Sie Open Office.org Database, es zeigt den " Database Wizard "

  2. Wählen Sie "Verbindung zu einer vorhandenen Datenbank herstellen: Text ".

    enter image description here

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

    enter image description here

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

    enter image description here

Wenn Sie jemals mit Microsoft Access gearbeitet haben, werden Sie mit der GUI vertraut sein.


Wenn Sie ohne GUI auskommen können, gibt es immer die traditionellen UNIX-Befehle. Ich benutze sie häufig, um einfache Abfragen an (kleine) CSV-Dateien durchzuführen. 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` 
Wow, tolle Antwort! +1 theycallmemorty vor 15 Jahren 0
Das sieht aus wie der Trick. Ich werde sehen, ob ich OO Base auf diese alternde Lappy bringen kann. J. Polfer vor 15 Jahren 0
+1. Cool! Hat sich nicht die Mühe gemacht, OO zu erkunden. Ich dachte immer, MS O hätte den Vorteil! Swanand vor 15 Jahren 0
krank! Wie ist die Leistung für große Dateien? Ich bin in der Bioinformatik und habe riesige, durch Tabulatoren getrennte Dschunke user2751 vor 15 Jahren 0
@ 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 laden. Dies ist viel schneller als INSERT. Ludwig Weinzierl vor 15 Jahren 0
@Ludwig meinte ich meistens für Heiden - könnte die Datei und die SQL damit schicken. Diese Leute haben Openoffice, verwenden aber keinen DB-Client. Vielen Dank user2751 vor 15 Jahren 0
Ich dachte das OP fragte nach einem * einfachen Tool * ;-). Ich kann nicht sagen, dass oo.org einfach ist. fretje vor 15 Jahren 0
@ user2751 Ich kann bestätigen, dass die Leistung (unter Windows) für große Dateien nicht großartig ist. Mit Log Parser sind Sie besser dran. Tao vor 11 Jahren 0
Hervorragende Antwort - sauber und einfach zu verwenden und Cross-OS (im Gegensatz zum Log-Parser, der zwar nur Windows ist)! Tao vor 11 Jahren 0
Der Unix-Befehlssatz ist interessant. Gibt es Beispiele für die Kombination der Befehle, die tatsächlichen SQL-Abfragen entsprechen? Seien Sie nett, praktische Beispiele als nur die Befehlsliste zu sehen. David vor 9 Jahren 0
13
fretje

Sie können ODBC verwenden, um Textdateien abzufragen:

Zugriff auf Textdateien mithilfe des ODBC-Datenproviders

Beachten Sie, dass Sie MS Access dafür nicht benötigen. Das Lernprogramm in der obigen Verknüpfung verwendet MS Access lediglich zum Erstellen der Textdatei. Da Sie jedoch bereits eine Textdatei haben, führen Sie einen Bildlauf nach unten durch und starten Sie das Lernprogramm dort, wo Sie es sehen den Titel Auf eine Textdatei zugreifen .

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

  • Stellen Sie sicher, dass sich die CSV-Datei ohne etwas anderes in einem eigenen Verzeichnis befindet.
  • Öffnen Sie den "ODBC Data Source 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 aus und klicken Sie auf "Weiter>".
  • Vergeben Sie einen Namen für Ihre Dateidatenquelle (zB "test") und klicken Sie auf "Weiter>".
  • Klicken Sie auf "Fertig stellen". Danach erscheint ein Dialog, 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 Ihre CSV-Datei im ersten Schritt platziert haben.
  • Klicken Sie auf die Schaltfläche "Optionen >>".
  • Klicken Sie auf die Schaltfläche "Format definieren".
  • Wählen Sie in der linken "Tables" -Liste Ihre CSV-Datei aus und klicken Sie auf die Schaltfläche "Rate". (Dadurch wird Ihre CSV-Datei analysiert und für jede Spalte in Ihrer CSV-Datei ein entsprechendes Feld erstellt.)
  • Durchsuchen Sie die generierten Spalten (F1, F2, ...) in der rechten Liste, geben Sie ihnen sinnvolle Namen und stellen Sie den entsprechenden Datentyp ein (manchmal ist das Erraten nicht immer richtig).
  • Wenn alles richtig eingestellt ist, klicken Sie auf "OK" (2 Mal).

An diesem Punkt sollten Sie über einen Datei-DSN verfügen, mit dem Sie über ODBC auf Ihre CSV-Datei zugreifen können. Wenn Sie den Ordner überprüfen, in dem sich die CSV-Datei befindet, wird eine Datei schema.ini angezeigt, die die soeben erstellte Konfiguration enthält. Wenn Sie mehrere .csv-Dateien haben, entspricht jede einer Tabelle, und jede Tabelle enthält einen [ Dateinamen .csv] -Block in der Datei schema.ini, in dem 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 kann
ich mit einem ODBC-Provider über ein Abfragetool eine Verbindung herstellen?": Ich habe ein Tool, das ich vor langer Zeit selbst geschrieben habe und das nicht zur Veröffentlichung in Frage kommt. Eine schnelle Google-Suche wurde mit odbc-view erstellt, einem Freeware-Tool, 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 "select * from [ Dateiname .csv]" ein.
  • Klicken Sie auf "Ausführen".

Der Inhalt Ihrer CSV-Datei sollte jetzt im unteren Bereich angezeigt werden.
Hoffe, das hilft ... Lassen Sie mich wissen, wie es Ihnen geht oder wenn Sie weitere Hilfe benötigen.

@ fretje - Ich weiß, ich brauche MS Access nicht, damit das funktioniert. Ich habe es selbst versucht. Ich bin dabei auf zwei Probleme gestoßen: 1. Ich möchte eine GUI oder ein CLI-Dienstprogramm haben, mit dem ich die CSV-DB abfragen kann, wenn ich fertig bin. In dem oben zitierten Tutorial wird nichts davon aufgeführt. Es wird davon ausgegangen, dass Sie durch Schreiben einer .NET-App auf diese ODBC-Datenbank zugreifen möchten. 2. Wenn der PC diese Lösung verwenden würde, glaube ich nicht, dass mein ODBC-Setup für diese Lösung ausreicht. Ich konnte meinen DSN zum Zeitpunkt der Erstellung des ODBC-Datenproviders nicht benennen. Die Box war ausgegraut. Möglicherweise ein Systemeinstellungsproblem. J. Polfer vor 15 Jahren 0
@ fretje - Wenn Sie erklären können, wie Sie mithilfe eines Abfragetools eine Verbindung zu diesem ODBC-Provider herstellen können, wäre das nett. Ich weiß nicht, wie ich das machen soll. War irgendwie auf der Suche nach einer Catch-All-Antwort. J. Polfer vor 15 Jahren 0
12
svandragt

Haben Sie LogParser ausprobiert ?

Log Parser ist ein leistungsfähiges, vielseitiges Tool, das universellen Abfragezugriff auf textbasierte Daten wie Protokolldateien, XML-Dateien und CSV-Dateien sowie auf wichtige Datenquellen unter Windows® wie das Ereignisprotokoll, die Registrierung, das Dateisystem und Active Directory®. Sie teilen dem Log Parser mit, welche Informationen Sie benötigen und wie er verarbeitet werden soll. Die Ergebnisse Ihrer Abfrage können in einer textbasierten Ausgabe benutzerdefiniert formatiert werden oder sie können auf weitere Spezialziele wie SQL, SYSLOG oder ein Diagramm gespeichert werden.

Die meiste Software ist darauf ausgelegt, eine begrenzte Anzahl spezifischer Aufgaben auszuführen. 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 anderes ) zur Verwendung der SQL-ähnlichen Abfragesprache mit CSV-Dateien, die ich bei Google gefunden habe .

Beispielanfrage:

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 
Forumunterstützung und viele Ihrer Fragen werden unter http://forums.iis.net/default.aspx?GroupID=51 beantwortet. Dies ist das offizielle Logparser-Forum svandragt vor 15 Jahren 0
Weitere Beispiele unter http://www.codinghorror.com/blog/archives/000369.html Nice; Schade, es ist nur Windows. Arjan vor 15 Jahren 2
8
Christian

Ich mag es, mit R 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 Grafiken und eine Menge anderer Möglichkeiten zu erstellen.

5
m.floryan

Sie können die Datei immer in Excel einlesen und Excel als Datenquelle über ODBC verwenden und Abfragen dagegen ausführen.

Ich kann? Das hört sich nach schwarzer Magie an. Kannst du einen Link für ein Tutorial finden? J. Polfer vor 15 Jahren 0
@sheepsimulator: Excel öffnet nur CSV-Dateien ... Sobald Sie eine Excel-Datei haben, können Sie sie mit ODBC abfragen, genauso wie Sie Textdateien abfragen können (siehe meine Antwort unten). fretje vor 15 Jahren 2
3
Stefan Thyberg

Ich habe eine kleine, nicht grafische App gefunden, die dies tut: csvsql .

Die Dokumentation ist hier .

Dies ist * GENAU * die Art von App, die ich suche, obwohl es schön wäre, wenn sie eine grafische Benutzeroberfläche hätte. Leider habe ich momentan 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 so etwas Schönes verwendet, also wird das Kompilieren einige Jiggerypokery erfordern. J. Polfer vor 15 Jahren 0
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, der eine Anwendung schreibt, die Textdateien importieren und SQL-Abfragen darauf ausführen kann, z. B. mit SQL Lite? Stefan Thyberg vor 15 Jahren 0
`sqlite3` (die Befehlszeilenanwendung, die SQLite-Datenbanken liest) hat eine integrierte Unterstützung für den Import von Dateien - siehe die Befehle .separator und .import unter http://www.sqlite.org/sqlite.html Arjan vor 15 Jahren 1
Ja, ich habe gesehen, dass es in den Antworten mehrmals erwähnt wurde, aber ich dachte eher an eine vollwertige Notizblock-ähnliche Anwendung mit einem Abfragefenster. Stefan Thyberg vor 15 Jahren 1
2
J. Polfer

Ein Werkzeug, von dem ich herausfand, dass es in Zukunft möglicherweise einfacher wird, ist Resolver One .

Es ist eine Kalkulationstabelle, die Python-Code generiert, der leicht modifiziert werden kann. Für Entwickler, die gelegentlich einen Schritt zurücktreten müssen, um Probleme in Tabellenkalkulationen zu lösen, scheint dies ein intuitiver Weg zu sein, Tabellenkalkulationsprobleme in einer ihnen bekannten Sprache zu lösen.

Und es gibt mir eine Ausrede, um Python zu verwenden. Python macht mich glücklich.

2
lstg

Der H2-JDBC-Treiber bietet eine sehr nützliche CSVread-Funktion, mit der Sie Folgendes 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 verwenden, ohne sich mit dem Schreiben von Code befassen zu müssen.

Ich persönlich bevorzuge den Squirrel SQL Client, der Ihnen eine schöne Benutzeroberfläche für die Ausführung von Abfragen bietet. Um dies zu tun, müssen Sie nur den bereits aufgelisteten H2 In-MemoryDriver-Klassenpfad auf den heruntergeladenen H2-Treiber richten. Wenn Sie mit dem Treiber einen geeigneten Aliasnamen eingerichtet haben, können Sie das beliebige zufällige SQL ausführen. Die Ergebnisse werden in einer schönen Tabelle und allen anderen Funktionen zum Importieren, Exportieren usw. angezeigt.

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

Es scheint, dass jemand das obige Groovy-Skript erweitert und es in ein schönes Befehlszeilentool zum Ausführen der Abfragen verwandelt hat, siehe gcsvsql. Damit können Sie folgende Befehle ausführen:

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

Ich habe ein Befehlszeilenprogramm geschrieben, um beliebige SQL-Dateien in einer CSV-Datei auszuführen, einschließlich Mehrfach-Joins, die als gcsvsql bezeichnet werden. Sie können darüber hier 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 wurde in Github verschoben. https://github.com/jdurbin/durbinlib

2
Harel Ben Attia

Sie können einen Blick auf das kostenlose Tool q - Text als Datenbank werfen, mit dem SQL direkt in CSV-Dateien ausgeführt werden kann, einschließlich Verknüpfungen, Gruppierungen und anderen SQL-Konstrukten. Enthält auch die automatische Erkennung von Spaltennamen und Spaltentypen.

Es ist ein Befehlszeilentool, das zur Linux-Funktionsweise passt (z. B. Piping from stdin, spezielle Flags zum Anpassen des Verhaltens usw.).

Verwendet sqlite hinter den Kulissen, daher 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