Как составить список предупреждений из утилиты «mysqlimport»?

28

Начнем с того, что речь идет не о загрузке данных из самого MySQL, а об использовании инструмента командной строки «mysqlimport».

Я использую его для загрузки CSV непосредственно в таблицу, и мне нужно увидеть предупреждения, которые он сгенерировал. Кажется, я не могу отобразить предупреждения с подробным описанием и включенной отладкой. Любые идеи?

(MySQL 5.0.5)

Brink
источник

Ответы:

31

С mysqlimport это невозможно, однако в качестве альтернативы вы можете сделать следующее:

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

Заменить listOfColumnNamesсоответствующим отдельным списком столбцов.

Волшебство (как ранее упоминал Эдуард) состоит в том, чтобы одновременно выполнять команды LOAD DATA INFILE и SHOW WARNINGS в одном сеансе, так как mysqlimport не предоставляет способ напрямую получить предупреждения.

shollyman
источник
Сладкий, спасибо! Я только начал писать подобное заявление, увидев комментарий Эдуарда. Спасибо тебе! Спасибо
brink
Работает ли это, если tables.csvлокальный файл (т.е. не на сервере базы данных)?
Раффи Хачадурян
следующие работы для меня: сначала создайте таблицу, а затем выполните mysql -u root --execute="LOAD DATA LOCAL INFILE 'c:\\crp\\blah3.csv' INTO TABLE blah3 FIELDS TERMINATED BY ','; SHOW WARNINGS" whateverdbnameegcsv_db соответствующие stackoverflow.com/questions/14127529/…
barlop
и может добавить, например, о utf8, mysql> LOAD DATA LOCAL INFILE 'c:\\crp\\blah5.csv' INTO TABLE blah5 CHARACTER SET UTF8 FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'; SHOW WARNINGS;как упоминалось stackoverflow.com/questions/4957900/…
barlop
проблема в том, что код завершения всегда есть, 0поэтому я думаю, что вам нужно проанализировать вывод команды, чтобы проверить, успешно ли выполнен импорт, когда вышеизложенный сценарий (?)
pkaramol
5

Как и другие говорили, настоящая проблема в том, что для того, чтобы SHOW WARNINGS работали, вы должны быть в одном подключенном сеансе. mysqlimport отключается от сеанса, как только он завершает импорт, что делает невозможным захват его предупреждений в его текущей версии. Звучит как возможность пожертвовать патч. :)

Vinny
источник
1

Я не нашел способа печатать предупреждения с помощью mysqlimport. Но поскольку mysqlimport ничего не делает, кроме «LOAD DATA INFILE», почему вы не используете команду mysql для импорта данных, за которыми следует «SHOW WARNINGS»?

Эдуард Вирх
источник
Благодарность! Вид раздражающего mysqlimport действительно не играет хорошо: /
brink
Используйте «ПОКАЗАТЬ ПРЕДУПРЕЖДЕНИЯ;» Команда после «ЗАГРУЗКИ».
Эдуард Уирч