Fórum importação em massa #608230

18/02/2020

0

SQL

pessoal,

tenho uma atualização para fazer mensalmente, recebo cerca de 400 txt com dados para fazer importação, os arquivos vem modelados com largura fixa. e preciso unificar esses arquivos para importar para o banco de dados. queria fazer um script para essa importação, atualmente eu transformo tudo em 6 csv com 900k linhas e importo para o sql e demora cerca de 4 horas.
Djacy Neto

Djacy Neto

Responder

Post mais votado

18/02/2020

Caro colega,

Todo SGBD possui um utilitário de linha de comando, cuja a finalidade é fazer carga de arquivos externos para dentro do banco. No caso do mysql você pode se baser pelo manual da a sua correta parametrização, conforme pode ver no link abaixo:

https://dev.mysql.com/doc/refman/8.0/en/load-data.html


Exemplo de uso:


LOAD DATA LOCAL INFILE ''abc.csv'' INTO TABLE abc
FIELDS TERMINATED BY '',''
ENCLOSED BY ''"''
LINES TERMINATED BY ''\\\\r\\\\n''
IGNORE 1 LINES
(col1, col2, col3, col4, col5...);

Fonte: https://stackoverflow.com/questions/14127529/mysql-import-data-from-csv-using-load-data-infile


Ainda asssi, caso queira automatizar esse processo, através de alguma aplicação, pode chamar esse utilitário através da mesma.

Renato Neto

Renato Neto
Responder

Gostei + 1

Mais Posts

18/02/2020

Emerson Nascimento

você faz diretamente pelo banco de dados ou usa algum programa pra efetuar essa carga de dados?
Responder

Gostei + 0

18/02/2020

Djacy Neto

você faz diretamente pelo banco de dados ou usa algum programa pra efetuar essa carga de dados?
nesse caso direto sgbd, que hoje estou usando o mysql.
Responder

Gostei + 0

18/02/2020

Renato Neto

você faz diretamente pelo banco de dados ou usa algum programa pra efetuar essa carga de dados?
nesse caso direto sgbd, que hoje estou usando o mysql.


Vai pelo LOAD DATA que é sucesso!
Responder

Gostei + 1

18/02/2020

Djacy Neto

você faz diretamente pelo banco de dados ou usa algum programa pra efetuar essa carga de dados?
nesse caso direto sgbd, que hoje estou usando o mysql.


Vai pelo LOAD DATA que é sucesso!
estou tentando entender o codigo p fazer rodar...
eu vi que no simples usa <load data infile 'arquivo' into table 'nome_tabela'>

mais não é tão simples assim

Responder

Gostei + 0

18/02/2020

Renato Neto

você faz diretamente pelo banco de dados ou usa algum programa pra efetuar essa carga de dados?
nesse caso direto sgbd, que hoje estou usando o mysql.


Vai pelo LOAD DATA que é sucesso!
estou tentando entender o codigo p fazer rodar...
eu vi que no simples usa <load data infile 'arquivo' into table 'nome_tabela'>

mais não é tão simples assim


Estou insitindo para você usar o utilitário, pois ele é muito rápido e eficiente. Para ter sucesso, faça da seguinte maneira.

Crie uma tabela com a mesma estrutura do seu arquivo, tamanho dos caracteres, o tipo pode deixar como VARCHAR, mesmo para coluna que deveria guardar tipos numéricos, pensa nessa tabela como um ambiente de staging, ou seja, é a forma viável de você colocar os dados externos para dentro do banco.

Quanto a sintaxe, vai depender do conteúdo e extensão do seu arquivo. Note que no exemplo que eu lhe passei anteriormente, ele usa um csv, pode ser que funcione com txt também, teria que testar. Em relação aos parametros, na documentação ele especifica, se o arquivo tem algum sufixo, quais são os separadores entre os dados. Sim, é meio chatinho mesmo, mas você acertando isso você abre caminhos e alivia a sua vida. Então vale a pena o esforço.

Qualquer coisa, passe mais informações sobre o arquivo que você está querendo manipular que tento lhe ajudar com o comando.
Responder

Gostei + 1

18/02/2020

Djacy Neto

você faz diretamente pelo banco de dados ou usa algum programa pra efetuar essa carga de dados?
nesse caso direto sgbd, que hoje estou usando o mysql.


Vai pelo LOAD DATA que é sucesso!
estou tentando entender o codigo p fazer rodar...
eu vi que no simples usa <load data infile 'arquivo' into table 'nome_tabela'>

mais não é tão simples assim


Estou insitindo para você usar o utilitário, pois ele é muito rápido e eficiente. Para ter sucesso, faça da seguinte maneira.

Crie uma tabela com a mesma estrutura do seu arquivo, tamanho dos caracteres, o tipo pode deixar como VARCHAR, mesmo para coluna que deveria guardar tipos numéricos, pensa nessa tabela como um ambiente de staging, ou seja, é a forma viável de você colocar os dados externos para dentro do banco.

Quanto a sintaxe, vai depender do conteúdo e extensão do seu arquivo. Note que no exemplo que eu lhe passei anteriormente, ele usa um csv, pode ser que funcione com txt também, teria que testar. Em relação aos parametros, na documentação ele especifica, se o arquivo tem algum sufixo, quais são os separadores entre os dados. Sim, é meio chatinho mesmo, mas você acertando isso você abre caminhos e alivia a sua vida. Então vale a pena o esforço.

Qualquer coisa, passe mais informações sobre o arquivo que você está querendo manipular que tento lhe ajudar com o comando.


acho que estou fazendo errado,
esta retornando:
Error Code: 1290. The MySQL server is running with the --secure-file-priv option so it cannot execute this statement

isso quando eu usei isso:
LOAD DATA
    INFILE 'P:/MACRO P CONVERSÃO/teste.csv'
    into table janeiro_d8


e quando uso que voce passou alterando apenas nome arquivo e tabela retorna isso:
Erro Code 1064. You have an error in your sql syntax.....
Responder

Gostei + 0

19/02/2020

Renato Neto

Tente algum desses links:


https://dba.stackexchange.com/questions/57996/syntax-error-in-load-data-infile
https://dba.stackexchange.com/questions/249637/mysql-load-data-infile-error-1064
https://stackoverflow.com/questions/29412668/load-data-local-infile-1064-error-due-to-file-header-info
https://ifelse.info/questions/33323/why-does-mysql-workbench-always-throw-me-error-when-i-synchr


Como lhe informei, ele é meio chato de ajustar mesmo. Questão de delimitador, separador, espaços (não utilize espaço no nome do arquivo), acentuação, aspas/apóstrofe.

Eu fiz isso com o postgreSQL e demorei até ajustar a sintaxe.
Responder

Gostei + 0

19/02/2020

Djacy Neto

Tente algum desses links:


https://dba.stackexchange.com/questions/57996/syntax-error-in-load-data-infile
https://dba.stackexchange.com/questions/249637/mysql-load-data-infile-error-1064
https://stackoverflow.com/questions/29412668/load-data-local-infile-1064-error-due-to-file-header-info
https://ifelse.info/questions/33323/why-does-mysql-workbench-always-throw-me-error-when-i-synchr


Como lhe informei, ele é meio chato de ajustar mesmo. Questão de delimitador, separador, espaços (não utilize espaço no nome do arquivo), acentuação, aspas/apóstrofe.

Eu fiz isso com o postgreSQL e demorei até ajustar a sintaxe.


estou vendo aqui, mesmo assim vou ter trabalho pq os meus arquivos estao em txt, todos artigos vejo importação com csv...
Responder

Gostei + 0

19/02/2020

Djacy Neto

Tente algum desses links:


https://dba.stackexchange.com/questions/57996/syntax-error-in-load-data-infile
https://dba.stackexchange.com/questions/249637/mysql-load-data-infile-error-1064
https://stackoverflow.com/questions/29412668/load-data-local-infile-1064-error-due-to-file-header-info
https://ifelse.info/questions/33323/why-does-mysql-workbench-always-throw-me-error-when-i-synchr


Como lhe informei, ele é meio chato de ajustar mesmo. Questão de delimitador, separador, espaços (não utilize espaço no nome do arquivo), acentuação, aspas/apóstrofe.

Eu fiz isso com o postgreSQL e demorei até ajustar a sintaxe.


Eu fiz uma tabela de teste com 3 linhas e duas colunas e coloquei p importar um csv no mesmo formato.
ai deu codigo 1148: The used command is not allowed with this My SQL version...

será que essa aplicação só roda na versao paga?
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar