csvDB

csvDB ist eine SQL engine für CSV (character(default: comma) separated values) Dateien. Mit ihr kann man u.a. select, update, insert, delete und alter SQL-Querys auf eine CSV Datei absetzen so als wäre es eine (MySQL) Datenbank.

Zum Beispiel kann man so leidige Excel Tabellen (export zu csv, mit csvDB bearbeiten, reimport csv zu Excel) per SQL abfragen und bearbeiten.

 

HP: Gibt es inzwischen leider nicht mehr. Somit sind die sourcen meinem zu entnehmen.

Es wird folgender patch benötigt da es sonst nicht compiliert

--- ./inc/csvdb.h       2012-02-11 11:17:56.000000000 +0100
+++ ./inc/csvdb.h       2012-06-08 08:13:39.000000000 +0200
@@ -160,7 +160,8 @@
 void result_count(result_t *r);
 void result_limit(result_t *r);
 void csvdb_free_result(result_t *r);
-void result_free(result_t *r) __attribute__ ((deprecated ("use csvdb_free_result")));
+void result_free(result_t *r);
+void csvdb_free_result(result_t *r);
 table_t *result_to_table(result_t *r, char* name);

 /* defined in row.c */


Zu speichern als csvdb.patch im sourcenverzeichniss.
(oder wget
https://www.midnight-visions/sourcecodes/csvdb.patch)

# cd /usr/local/src
/usr/local/src # wget https://www.midnight-visions.de/sourcecodes/csvdb-0.5.1.tar.bz2
/usr/local/src # tar xjf csvdb-0.5.1.tar.bz2
/usr/local/src # cd csvdb-0.5.1
/usr/local/src/csvdb-0.5.1 # patch -p1 < csvdb.patch /usr/local/src/csvdb-0.5.1 # ./configure && make && make install

 
Beispiel:

$ vim csvfile

field1,field2,field3,field4,field5
value1_1,value1_2,value1_3,value1_4,value1_5
value2_1,value2_2,value2_3,value2_4,value2_5
value3_1,value3_2,value3_3,value3_4,value3_5
value4_1,value4_2,value4_3,value4_4,value4_5
value5_1,value5_2,value5_3,value5_4,value5_5
value6_1,value6_2,value6_3,value6_4,value6_5
value7_1,value7_2,value7_3,value7_4,value7_5

$ csvdb -f csvfile -n csvtable

csvDB> show tables;
formatting results...
+---------+----------+
|    name |  aliases |
+---------+----------+
| csvfile | csvtable |
+---------+----------+
1 rows returned in 0.000 seconds

csvDB> describe csvtable;
formatting results...
+--------+
|   name |
+--------+
| field1 |
| field2 |
| field3 |
| field4 |
| field5 |
+--------+
5 rows returned in 0.000 seconds

csvDB> insert into csvtable values ('value8_1', 'value8_2', ''value8_3', 'value8_4', ''value8_5');
-----
1 rows affected in 0.000 seconds

csvDB> select * from csvtable where field1 = 'value8_1';
formatting results...
+----------+----------+-----------+----------+-----------+
|   field1 |   field2 |    field3 |   field4 |    field5 |
+----------+----------+-----------+----------+-----------+
| value8_1 | value8_2 | value8_3' | value8_4 | value8_5' |
+----------+----------+-----------+----------+-----------+
1 rows returned in 0.000 seconds

csvDB> alter table csvtable add column field6 after field5;
0 rows returned

csvDB> describe csvtable;
formatting results...
+--------+
|   name |
+--------+
| field1 |
| field2 |
| field3 |
| field4 |
| field5 |
| field6 |
+--------+
6 rows returned in 0.000 seconds

 

Wenn die Änderungen an den Daten permanent gemacht werden soll. Also in die Datei auch rein geschrieben werden sollen, muss vor den Änderungen folgendes gemacht werden:

csvDB> SET PERMANENT ON;
0 rows returned

 

Angeblich kann man damit apache logs genauso abfragen. Leider funktionierte dies bei mir nicht. Ich vermute es liegt am logformat. Leider ist nicht beschrieben wie dies sein muss.

Dokumentation: http://web.archive.org/web/20120115023903/http://sandbox.ltmnet.com:80/csvdb-doc.html (oder in meinem sourcecodes Archiv)