Wie listet man Warnungen aus dem Dienstprogramm 'mysqlimport' auf?

28

Zunächst geht es nicht um das Laden von Daten aus MySQL selbst, sondern um die Verwendung des Befehlszeilentools "mysqlimport".

Ich verwende es, um eine CSV-Datei direkt in eine Tabelle zu laden und die von ihr erzeugten Warnungen anzuzeigen. Ich kann anscheinend keine Warnungen erhalten, die bei aktivierter Ausführlichkeit oder aktivierter Fehlerbehebung angezeigt werden. Irgendwelche Ideen?

(MySQL 5.0.5)

Rand
quelle

Antworten:

31

Mit mysqlimport ist dies nicht möglich. Alternativ können Sie jedoch Folgendes tun:

mysql --execute="LOAD DATA LOCAL INFILE '$WORKDIR/$table.csv' INTO TABLE $table FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' IGNORE 1 LINES (listOfColumnNames); SHOW WARNINGS"

Ersetzen Sie diese listOfColumnNamesdurch eine entsprechende Liste von Spalten.

Die Magie ist (wie bereits von Eduard erwähnt), die Befehle LOAD DATA INFILE und SHOW WARNINGS in derselben Sitzung zusammen auszuführen, da mysqlimport keine Möglichkeit bietet, direkt auf die Warnungen zuzugreifen.

Shollyman
quelle
Süße, danke! Ich hatte gerade angefangen, eine solche Erklärung zu schreiben, nachdem ich Eduards Kommentar gesehen hatte. Vielen Dank, yo! Danke
Brink
Funktioniert dies, wenn tables.csves sich um eine lokale Datei handelt (dh nicht auf dem Server der Datenbank)?
Raffi Khatchadourian
Die folgenden Arbeiten für mich erstellen Sie die Tabelle zuerst dann mysql -u root --execute="LOAD DATA LOCAL INFILE 'c:\\crp\\blah3.csv' INTO TABLE blah3 FIELDS TERMINATED BY ','; SHOW WARNINGS" whateverdbnameegcsv_db verwandte stackoverflow.com/questions/14127529/…
Barlop
und kann zB über utf8 hinzufügen mysql> LOAD DATA LOCAL INFILE 'c:\\crp\\blah5.csv' INTO TABLE blah5 CHARACTER SET UTF8 FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'; SHOW WARNINGS;wie erwähnt stackoverflow.com/questions/4957900/…
Barlop
Ein Problem ist, dass der Exit-Code immer 0so ist, dass Sie die Befehlsausgabe analysieren müssen, um zu prüfen, ob der Import erfolgreich war, wenn das obige Skript ausgeführt wird (?)
pkaramol
5

Wie die anderen sagten, besteht das eigentliche Problem darin, dass Sie sich in derselben verbundenen Sitzung befinden müssen, damit SHOW WARNINGS funktionieren kann. Sobald der Import abgeschlossen ist, trennt sich mysqlimport von der Sitzung, sodass die Erfassung der Warnungen in der aktuellen Version nicht mehr möglich ist. Klingt nach einer Gelegenheit, einen Patch zu spenden. :)

Vinny
quelle
1

Ich habe auch keine Möglichkeit gefunden, Warnungen mit mysqlimport auszudrucken. Aber da mysqlimport nur "LOAD DATA INFILE" ausführt, verwenden Sie den Befehl mysql, um die Daten zu importieren, gefolgt von einem "SHOW WARNINGS".

Eduard Wirch
quelle
Vielen Dank! Irritierend, dass mysqlimport nicht wirklich gut läuft: /
brink
Verwende die "SHOW WARNINGS". Befehl nach "LOAD".
Eduard Wirch