Kurz und gut - Episode #13 Exportgeschäfte: Tabellen als CSV speichern!
Ich werde in Seminaren, Workshops oder in Kundenprojekten in Sachen MySQL immer mal wieder mit Dingen konfrontiert, auf die ich ad hoc keine Antwort habe bzw. mit denen ich noch keine Erfahrung gesammelt habe.
Das Problem
Die heutige Frage eines/-r Teilnehmer:in war eigentlich kein echtes Problem: Wie kann ich überhaupt Tabellendaten in eine CSV-Datei exportieren?
Auf diese Frage gibt es viele Antworten:
- Über ein Shell-Skript
- „SELECT INTO OUTFILE“-Syntax [1]
- Tools (z. B. MySQL Workbench)
Da mein Lieblingstool derzeit aber die MySQL Shell ist, habe ich zur Beantwortung dieser Frage eben dieses Werkzeug benutzt. Wie immer nutzen wir die MySQL Demodatenbank „sakila“ zur Veranschaulichung.
MySQL localhost sakila SQL > show tables; +----------------------------+ | Tables_in_sakila | +----------------------------+ | actor | | actor_info | …
Wir möchten in unserem Beispiel die Daten der Schauspieler (Tabelle: „actor“) in einer CSV-Datei ablegen.
Die Lösung
Zur Lösung dieser Aufgabe nutzen wir das „Table Export Utility“ der MySQL Shell[2]. Die Nutzung beschränkt sich auf wenige Parameter und geht leicht von der Hand. Die ersten beiden Parameter definieren Quelle (Tabelle) und Ziel (Export-Datei). Der dritte Parameter kann optional genutzt werden, um spezielle Einstellungen vorzunehmen. Wir nutzen in unserem Beispiel exemplarisch einige dieser Einstellungen:
MySQL localhost sakila JS > util.exportTable("sakila.actor", "/tmp/actor.csv", {"where": "actor_id > 50", "showProgress": "true", "fieldsEnclosedBy" :"\""}) Initializing - done Gathering information - done Running data dump using 1 thread. NOTE: Progress information uses estimated values and may not be accurate. Starting data dump 75% (150 rows / ~200 rows), 0.00 rows/s, 0.00 B/s Dump duration: 00:00:00s Total duration: 00:00:00s Data size: 6.79 KB Rows written: 150 Bytes written: 6.79 KB Average throughput: 6.79 KB/s The dump can be loaded using: util.importTable("/tmp/actor.csv", { "characterSet": "utf8mb4", "fieldsEnclosedBy": "\"", "schema": "sakila", "table": "actor" });
Fazit
Die MySQL-Shell bietet viele kleine (und große) nützliche Ergänzungen zum klassischen MySQL-Client. Auch das Exportieren (und wie am Ende der Ausgabe zu erkennen ist, das „Importieren“ von Daten) lässt sich mit der Shell unkompliziert umsetzten.
Links
[1] https://dev.mysql.com/doc/refman/8.0/en/select-into.html
[2] https://dev.mysql.com/doc/mysql-shell/8.0/en/mysql-shell-utilities-table-export.html
Seminarempfehlung
MYSQL ADMINISTRATION DB-MY-01
Zum SeminarPrincipal Consultant bei ORDIX
Bei Updates im Blog, informieren wir per E-Mail.
Kommentare