Comment lister les avertissements de l'utilitaire 'mysqlimport'?

28

Pour commencer, il ne s'agit pas de charger des données depuis MySQL lui-même, mais d'utiliser l'outil de ligne de commande "mysqlimport".

Je l'utilise pour charger un CSV directement dans une table et j'ai besoin de voir les avertissements qu'il a générés. Je n'arrive pas à obtenir des avertissements à afficher avec verbose ni débogage activé. Des idées?

(MySQL 5.0.5)

bord
la source

Réponses:

31

Ce n'est pas possible avec mysqlimport, mais comme alternative, vous pouvez faire ce qui suit:

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

Remplacez listOfColumnNamespar une liste de colonnes séparée appropriée.

La magie est (comme Eduard l'a mentionné précédemment) est d'exécuter les commandes LOAD DATA INFILE et SHOW WARNINGS ensemble dans la même session, car mysqlimport ne fournit pas un moyen d'accéder directement aux avertissements.

shollyman
la source
Doux, merci! Je venais juste de commencer à écrire une déclaration comme celle-ci après avoir vu le commentaire d'Eduard. Merci! Merci
brink
Est-ce que cela fonctionne s'il tables.csvs'agit d'un fichier local (c'est-à-dire pas sur le serveur de la base de données)?
Raffi Khatchadourian du
les travaux suivants pour me créer le tableau d' abord , puis faire mysql -u root --execute="LOAD DATA LOCAL INFILE 'c:\\crp\\blah3.csv' INTO TABLE blah3 FIELDS TERMINATED BY ','; SHOW WARNINGS" whateverdbnameegcsv_db lié stackoverflow.com/questions/14127529/...
barlop
et peut ajouter, par exemple, sur utf8 mysql> LOAD DATA LOCAL INFILE 'c:\\crp\\blah5.csv' INTO TABLE blah5 CHARACTER SET UTF8 FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'; SHOW WARNINGS;comme mentionné stackoverflow.com/questions/4957900/…
barlop
un problème est que le code de sortie est toujours 0donc je suppose que vous devez analyser la sortie de la commande pour vérifier si l'importation a réussi lorsque ce qui précède est scripté (?)
pkaramol
5

Comme les autres l'ont dit, le vrai problème est que pour que SHOW WARNINGS fonctionne, vous devez être dans la même session connectée. mysqlimport se déconnecte de la session dès que l'importation est terminée, ce qui rend impossible la capture de ses avertissements dans sa version actuelle. Cela ressemble à une opportunité de faire don d'un patch. :)

Vinny
la source
1

Je n'ai trouvé aucun moyen d'imprimer des avertissements avec mysqlimport non plus. Mais comme mysqlimport ne fait que "LOAD DATA INFILE" pourquoi n'utilisez-vous pas la commande mysql pour importer les données suivies d'un "SHOW WARNINGS"?

Eduard Wirch
la source
Merci! Une sorte de mysqlimport irritant ne joue pas vraiment bien: /
brink
Utilisez les "AFFICHER LES AVERTISSEMENTS;" commande après "CHARGER".
Eduard Wirch