Como listar avisos do utilitário 'mysqlimport'?


28

Para começar, não se trata de carregar dados do próprio MySQL, mas usando a ferramenta de linha de comando "mysqlimport".

Estou usando-o para carregar um CSV diretamente em uma tabela e preciso ver os avisos gerados. Não consigo receber avisos para exibir com detalhes ou depuração ativados. Alguma ideia?

(MySQL 5.0.5)

Respostas:


31

Não é possível com o mysqlimport, no entanto, como alternativa, você pode fazer o seguinte:

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

Substitua listOfColumnNamespor uma lista separada apropriada de colunas.

A mágica é (como Eduard mencionou anteriormente) é executar os comandos LOAD DATA INFILE e SHOW WARNINGS juntos na mesma sessão, pois o mysqlimport não fornece uma maneira de obter os avisos diretamente.


Sweet, thank you! I had just begun writing a statement like this after seeing Eduard's comment. Thanks yo! Thanks
— brink

Isso funciona se tables.csvfor um arquivo local (ou seja, não estiver no servidor do banco de dados)?
— Raffi Khatchadourian

os seguintes trabalhos para me criar a tabela primeiro e depois fazer mysql -u root --execute="LOAD DATA LOCAL INFILE 'c:\\crp\\blah3.csv' INTO TABLE blah3 FIELDS TERMINATED BY ','; SHOW WARNINGS" whateverdbnameegcsv_db relacionado stackoverflow.com/questions/14127529/...
— barlop

e pode adicionar, por exemplo, sobre utf8, mysql> LOAD DATA LOCAL INFILE 'c:\\crp\\blah5.csv' INTO TABLE blah5 CHARACTER SET UTF8 FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'; SHOW WARNINGS;como mencionado stackoverflow.com/questions/4957900/…
— barlop 24/10/16

um problema é que o código de saída é sempre, 0portanto, acho que você precisa analisar a saída do comando para verificar se a importação foi bem-sucedida quando o script acima foi escrito (?)
— pkaramol em 14/02

5

Como os outros disseram, o verdadeiro problema é que, para que o SHOW WARNINGS funcione, você deve estar na mesma sessão conectada. O mysqlimport se desconecta da sessão assim que termina a importação, impossibilitando a captura de seus avisos na versão atual. Parece uma oportunidade de doar um patch. :)


1

Também não encontrei nenhuma maneira de imprimir avisos com o mysqlimport. Mas como o mysqlimport não faz nada além de "LOAD DATA INFILE", por que você não usa o comando mysql para importar os dados seguidos por um "SHOW WARNINGS"?


Obrigado! Tipo de mysqlimport irritante realmente não é legal: /
— brink

Use o "MOSTRAR AVISOS;" comando após "LOAD".
— Eduard Wirch
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.