Eine CSV-Datei für INSERT INTO vorbereiten (Linux Mint) - einach so.
Verfasst: Fr 13. Mai 2022, 11:41
Hallo.
Die Aufgabe:
Ich habe mir die Aufgabe gestellt zwei (fremde) CSV-Dateien (3 Zeilen und 84.694 Zeilen) mit dem Linux Mint Editor xed (v3.2.2) in eine jeweils zuvor erstellte DB-Tabelle TEST zu laden.
Die CSV-Dateien sollen unter Verwendung von regulären Ausdrücken (xed Dialog "Suchen und Ersetzen") entsprechend überprüft und vorbereitet werden.
Abschließend soll unter Verwendung des Terminals (v3.36.2) und Firebirds ISQL-Tool (LI-V4.0.1.2696) der Datentransfer stattfinden.
Die Datenquelle(n):
Der Zeitaufwand für die sorgfältige Prüfung einer (fremden) CSV-Datenquelle auf 'Fehlerfreiheit' lohnt sich eigentlich immer. Es könnten z.B. typographisch unkorrekte Apostrophe (Deppenapostrophe) sein, die einem den angestoßenen CSV-Import verhageln. Auch akademische Datenquellen sollten davon keine Ausnahme bilden, wie ich feststellen durfte.
Original CSV-Datei (3 Zeilen):
1. Schritt:
Suchen nach: ^(.+)$
Ersetzen durch: INSERT INTO TEST values (\1
2. Schritt:
Suchen nach: ^(.+)$
Ersetzen durch: \1);
* * *
Ein anderes Beispiel:
Original CSV-Datei (84.694 Zeilen):
1. Schritt:
Mit xed die CSV-Datei prüfen.
Suchen nach: Umschalt+#'
Treffer. Typografisch korrekte Apostrophe zuweisen.
Ersetzen durch: ALTGR+#'
Ergebnis:
2. Schritt:
Suchen nach: ^(.+)$
Ersetzen durch: INSERT INTO TEST values (\1
Ergebnis:
3. Schritt:
Suchen nach: ^(.+)$
Ersetzen durch: \1);
Ergebnis:
Der Ablauf:
Die beiden CSV-Dateien sind mit xed überprüft, mit wenig Aufwand bearbeitet und importfähig.
Die zwei DB-Tabellen (hier jeweils: "TEST") sind in den Datenbanken bereits angelegt.
Die Verbindung zur jeweiligen Datenbank (z.B. zeit.fdb) ist mittels Firebird ISQL Tool hergestellt.
Jetzt können die Inhalte der jeweiligen final bearbeiteten CSV-Dateien kopiert und in das ISQL-Terminal eingefügt werden.
Die INSERTS (die Verarbeitung) von bspw. 84.694 Datensätzen dauert bei dieser Herangehensweise etwa 15 Sekunden.
Alternativ kann der Datentransfer auch mittels Script (*.sh) umgesetzt werden - wie folgt:
Mit dem Editor xed die jeweilige CSV-Datei als z. B. "insert_zeit.sql" (es ginge auch "insert_zeit.txt) abspeichern.
Ihr Inhalt dem ersten Beispiel folgend wäre:
Mit dem Editor xed eine Script-Datei bspw. "insert_test.sh" anlegen.
Deren Inhalt:
Jetzt das Terminal aufrufen und zum Speicherort der Script-Datei "insert_test.sh" gehen.
Eingabe: ./insert_test.sh
So sieht das aus:
Und so werden auf diese Weise z. B. 84.694 Datensätze in die DB-Tabelle TEST eingefügt.
Hoffe, es nutzt jemanden. Ich gehe einfach davon aus, dass schnelle Erfolgserlebnisse bei Einsteigern (privat / geschäftlich) oder Gelegenheitsnutzern der Popularität von Firebird nur förderlich sein können.
Die 'Flüssigkeit' während der Bearbeitung in xed kommt sicher an ihre Grenzen - vermutlich so bei ca. 150.000 Zeilen.
Falls man nur vorhat Firebird 4 zu prüfen, dann muss man nicht erst nach Tools von Drittanbietern suchen.
Ob sich tatsächlich jede CSV-Datei so bearbeiten und für Firebird vorbereiten lässt, kann ich nicht mit Bestimmtheit sagen.
Viele Grüße
Gerd
Die Aufgabe:
Ich habe mir die Aufgabe gestellt zwei (fremde) CSV-Dateien (3 Zeilen und 84.694 Zeilen) mit dem Linux Mint Editor xed (v3.2.2) in eine jeweils zuvor erstellte DB-Tabelle TEST zu laden.
Die CSV-Dateien sollen unter Verwendung von regulären Ausdrücken (xed Dialog "Suchen und Ersetzen") entsprechend überprüft und vorbereitet werden.
Abschließend soll unter Verwendung des Terminals (v3.36.2) und Firebirds ISQL-Tool (LI-V4.0.1.2696) der Datentransfer stattfinden.
Die Datenquelle(n):
Der Zeitaufwand für die sorgfältige Prüfung einer (fremden) CSV-Datenquelle auf 'Fehlerfreiheit' lohnt sich eigentlich immer. Es könnten z.B. typographisch unkorrekte Apostrophe (Deppenapostrophe) sein, die einem den angestoßenen CSV-Import verhageln. Auch akademische Datenquellen sollten davon keine Ausnahme bilden, wie ich feststellen durfte.
Original CSV-Datei (3 Zeilen):
Code: Alles auswählen
'4','2021-02-27 18:59:31.0','true','04',''
'5','2021-02-27 19:07:10.0','false','04',''
'6','2021-03-03 14:13:19.0','true','04',''
Suchen nach: ^(.+)$
Ersetzen durch: INSERT INTO TEST values (\1
Code: Alles auswählen
INSERT INTO TEST values ('4','2021-02-27 18:59:31.0','true','04',''
INSERT INTO TEST values ('5','2021-02-27 19:07:10.0','false','04',''
INSERT INTO TEST values ('6','2021-03-03 14:13:19.0','true','04','
Suchen nach: ^(.+)$
Ersetzen durch: \1);
Code: Alles auswählen
INSERT INTO TEST values ('4','2021-02-27 18:59:31.0','true','04','');
INSERT INTO TEST values ('5','2021-02-27 19:07:10.0','false','04','');
INSERT INTO TEST values ('6','2021-03-03 14:13:19.0','true','04','');
Ein anderes Beispiel:
Original CSV-Datei (84.694 Zeilen):
Code: Alles auswählen
'0','64113','1','','','','','Toddler's fracture - kodiere Fraktur nach Lokalisation'
Mit xed die CSV-Datei prüfen.
Suchen nach: Umschalt+#'
Treffer. Typografisch korrekte Apostrophe zuweisen.
Ersetzen durch: ALTGR+#'
Ergebnis:
Code: Alles auswählen
'0','64113','1','','','','','Toddler’s fracture - kodiere Fraktur nach Lokalisation'
Suchen nach: ^(.+)$
Ersetzen durch: INSERT INTO TEST values (\1
Ergebnis:
Code: Alles auswählen
INSERT INTO TEST values ('0','64113','1','','','','','Toddler’s fracture - kodiere Fraktur nach Lokalisation'
Suchen nach: ^(.+)$
Ersetzen durch: \1);
Ergebnis:
Code: Alles auswählen
INSERT INTO TEST values ('0','64113','1','','','','','Toddler’s fracture - kodiere Fraktur nach Lokalisation');
Der Ablauf:
Die beiden CSV-Dateien sind mit xed überprüft, mit wenig Aufwand bearbeitet und importfähig.
Die zwei DB-Tabellen (hier jeweils: "TEST") sind in den Datenbanken bereits angelegt.
Die Verbindung zur jeweiligen Datenbank (z.B. zeit.fdb) ist mittels Firebird ISQL Tool hergestellt.
Jetzt können die Inhalte der jeweiligen final bearbeiteten CSV-Dateien kopiert und in das ISQL-Terminal eingefügt werden.
Die INSERTS (die Verarbeitung) von bspw. 84.694 Datensätzen dauert bei dieser Herangehensweise etwa 15 Sekunden.
Alternativ kann der Datentransfer auch mittels Script (*.sh) umgesetzt werden - wie folgt:
Mit dem Editor xed die jeweilige CSV-Datei als z. B. "insert_zeit.sql" (es ginge auch "insert_zeit.txt) abspeichern.
Ihr Inhalt dem ersten Beispiel folgend wäre:
Code: Alles auswählen
INSERT INTO TEST values ('7','2022-03-03 14:13:19.0','true','04','');
Deren Inhalt:
Code: Alles auswählen
isql /home/gerd/Firebird/Datenbanken/zeit.fdb -u sysdba -p geheimes_passwort -i /home/gerd/Firebird/FB-SQL/insert_zeit.sql
Eingabe: ./insert_test.sh
So sieht das aus:
Code: Alles auswählen
gerd@gerd-MS-7641:~/Firebird/FB-Skripte$ ./insert_test.sh
Hoffe, es nutzt jemanden. Ich gehe einfach davon aus, dass schnelle Erfolgserlebnisse bei Einsteigern (privat / geschäftlich) oder Gelegenheitsnutzern der Popularität von Firebird nur förderlich sein können.
Die 'Flüssigkeit' während der Bearbeitung in xed kommt sicher an ihre Grenzen - vermutlich so bei ca. 150.000 Zeilen.
Falls man nur vorhat Firebird 4 zu prüfen, dann muss man nicht erst nach Tools von Drittanbietern suchen.
Ob sich tatsächlich jede CSV-Datei so bearbeiten und für Firebird vorbereiten lässt, kann ich nicht mit Bestimmtheit sagen.
Viele Grüße
Gerd