Problem
Hast du schon einmal auf eine CSV-Datei auf deinem Bildschirm gestarrt und gehofft, es wäre eine Datenbank, auf der du einfach SQL Queries ausführen kannst? Uns ging es auf jeden Fall schon oft so, dass wir nicht direkt CSVs verarbeiten wollten, sondern lieber SQL-Anfragen.
Lösung
brew install q
Beispiele
Beispiel 1
ID,name,yearofbirth,haircolor
1,Max Mustermann,1994,brown
2,Lars Agne,1983,blonde
3,Otto Normal,1995,brown
4,Lieschen Müller,1987,black
5,John Doe,1980,brown
$> q -H -d ";" "SELECT COUNT(ID) FROM persons.csv WHERE haircolor = 'brown'"
- Result -
3
Beispiel 2
ID,email
1,max.mustermann@example.com
2,lars.agne@example.com
3,otto.normal@example.com
4,lieschen.mueller@example.com
5,john.doe@example.com
$> q -H -d ";" "SELECT persons.name, emails.email FROM persons.csv persons
JOIN emails.csv emails ON (persons.id = emails.id)
WHERE persons.haircolor = 'brown'"
- Result -
Max Mustermann max.mustermann@example.com
Otto Normal otto.normal@example.com
John Doe john.doe@example.com
Beispiel 3
$> ps aux | q -H "SELECT COMMAND FROM - WHERE STARTED = '24Dez20'"
- Result -
/System/Library/CoreServices/Santa
...
Performance und Limitierungen
Die aktuelle Version von q ist im Ausführen von SQL-Queries auf CSV-Dateien deutlich schneller als vergleichbare Go-basierende Tools wie Textql und Octosql [3]. Uns würde ein Vergleich von q mit xsv, das CSVs indizieren und verarbeiten kann, interessieren.
Uns ist jedoch aufgefallen, dass es q beispielsweise nicht ermöglicht, FROM auf einer Subquery auszuführen. Außerdem benutzt q den SQLite als SQL-Dialekt. Weitere Einschränkungen sind auf der Website von q [1] zu finden.
Weiterführende Aspekte
- [1] http://harelba.github.io/q/
- [2] http://harelba.github.io/q/#installation
- [3] https://github.com/harelba/q/blob/master/test/BENCHMARK.md
- [4] https://github.com/BurntSushi/xsv
---
Autoren: Fionn Fuchs & Maximilian Konzack / Software Engineers / Standort Leipzig
Zum Toilet Paper #140: SQL Queries ohne Datenbank auf CSV-Dateien mit q (PDF)
Lust, das nächste ToiletPaper zu schreiben? Jetzt bei jambit bewerben!