Jak wyświetlać ostrzeżenia z narzędzia „mysqlimport”?

28

Na początek nie chodzi o ładowanie danych z poziomu samego MySQL, ale za pomocą narzędzia wiersza polecenia „mysqlimport”.

Używam go do ładowania pliku CSV bezpośrednio do tabeli i muszę zobaczyć wygenerowane ostrzeżenia. Nie mogę wyświetlać ostrzeżeń, aby wyświetlały się przy włączonym gadatliwym mówieniu lub debugowaniu. Jakieś pomysły?

(MySQL 5.0.5)

skraj
źródło

Odpowiedzi:

31

Z mysqlimport nie jest to możliwe, ale alternatywnie możesz wykonać następujące czynności:

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

Zamień listOfColumnNamesna odpowiednią oddzielną listę kolumn.

Magią jest (jak wspomniano wcześniej Eduard) wykonywanie razem komend LOAD DATA INFILE i SHOW WARNINGS w tej samej sesji, ponieważ mysqlimport nie zapewnia bezpośredniego dostępu do ostrzeżeń.

szollyman
źródło
Kochanie, dziękuję! Właśnie zacząłem pisać takie oświadczenie po obejrzeniu komentarza Eduarda. Dzięki, yo! Dzięki
skraj
Czy to działa, jeśli tables.csvplik lokalny (tj. Nie znajduje się na serwerze bazy danych)?
Raffi Khatchadourian
następujące prace dla mnie najpierw stwórz tabelę, a następnie wykonaj mysql -u root --execute="LOAD DATA LOCAL INFILE 'c:\\crp\\blah3.csv' INTO TABLE blah3 FIELDS TERMINATED BY ','; SHOW WARNINGS" whateverdbnameegcsv_db powiązane stackoverflow.com/questions/14127529/...
barlop
i może dodać np. o utf8, mysql> LOAD DATA LOCAL INFILE 'c:\\crp\\blah5.csv' INTO TABLE blah5 CHARACTER SET UTF8 FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'; SHOW WARNINGS;jak wspomniano stackoverflow.com/questions/4957900/…
barlop
problemem jest to, że kod wyjścia jest zawsze, 0więc myślę, że musisz przeanalizować dane wyjściowe polecenia, aby sprawdzić, czy import się powiódł, gdy powyższe jest skryptowane (?)
pkaramol
5

Podobnie jak inni powiedzieli, prawdziwym problemem jest to, że aby pokazać POKAŻ OSTRZEŻENIA, musisz być w tej samej połączonej sesji. mysqlimport rozłącza się z sesją, gdy tylko zakończy importowanie, co uniemożliwia przechwycenie ostrzeżeń w bieżącej wersji. Brzmi jak okazja do przekazania łatki. :)

Vinny
źródło
1

Nie znalazłem też sposobu na wydrukowanie ostrzeżeń za pomocą mysqlimport. Ale skoro mysqlimport robi tylko „LOAD DATA INFILE”, dlaczego nie użyć komendy mysql do zaimportowania danych, a następnie „POKAŻ OSTRZEŻENIA”?

Eduard Wirch
źródło
Dzięki! Niby irytujący mysqlimport nie gra zbyt dobrze: /
brink
Użyj „POKAŻ OSTRZEŻENIA”; polecenie po „LOAD”.
Eduard Wirch