Categories
Banco de dados Tutoriais

Como importar dados de arquivos de texto no MySQL

Como usar a declaração LOAD DATA INFILE do MySQL para importar dados de arquivos texto locais para povoar uma tabela do banco de dados.

Importar dados de um arquivo de texto puro, desde que ele esteja pronto e organizado, é uma das formas de rapidamente povoar uma tabela em um banco de dados MySQL.
A declaração LOAD DATA INFILE é capaz de carregar as linhas de um arquivo texto para dentro de uma tabela em alta velocidade. Esta função é adequada para trabalhos que envolvam grande volume de dados.
Se o volume de dados for significativamente grande e você estiver preocupado em manter a disponibilidade do servidor a vários outros clientes, use a diretiva LOW_PRIORITY na declaração — o seu efeito é “segurar” a execução até que não haja outros clientes lendo dados na tabela (isto só afeta storage engines como MyISAM, MEMORY e MERGE).
Veja um exemplo de funcionamento do LOAD DATA, lendo o arquivo ‘minhatabela.txt’ e gravando seu conteúdo na tabela ‘minhatabela’:

LOAD DATA LOCAL INFILE 'minhatabela.txt' INTO TABLE minhatabela;

No caso de querer importar um arquivo para dentro de uma tabela que se encontre em um banco de dados diferente do que está atualmente selecionado, indique explicitamente o nome deste banco de dados.
No exemplo abaixo, o banco de dados ‘tutorial’ é indicado na linha de comando:

LOAD DATA LOCAL INFILE 'minhatabela.txt' INTO TABLE tutorial.minhatabela;

O sistema de banco de dados também inclui um utilitário de linha de comando, chamado mysqlimport, que tem a mesma função.
Você pode usar diretiva CONCURRENT, em tabelas MyISAM, que permite que outros clientes façam requisições à mesma tabela em que o LOAD DATA está trabalhando. Esta opção afeta a performance da tarefa de importação de dados, mesmo que nenhuma outra thread esteja fazendo uso da tabela ao mesmo tempo.
Ao usar o LOCAL com a declaração LOAD DATA, uma cópia do arquivo é criada diretório temporário do servidor — em sistemas GNU/Linux, ele fica /tmp.

Se você não tiver espaço suficiente na partição em que o diretório /tmp se encontra, a declaração LOAD DATA LOCAL irá falhar e retornar um erro.

Por questão de segurança, o usuário que iniciou a sessão do mysql tem que ter permissões de leitura relativas ao arquivo texto que está tentando importar.
Se você se deparar com o erro The used command is not allowed with this MySQL version, leia este artigo, para saber como resolver.
Verifique a validade dos arquivos que deseja importar sempre.
O LOAD DATA tem várias opções de controle sobre como fazer a leitura do arquivo de dados — mas estas opções só dizem respeito à estrutura do arquivo.

Cuidados ao carregar arquivos em português, com acentuação no MySQL

Você provavelmente terá que checar e preprocessar seu arquivo, antes de iniciar o processo de importação — este é o caso, por exemplo de arquivos UTF8 (padrão no GNU/Linux), com acentuações, cedilhas etc.
Se o arquivo estiver tratado e exibindo os caracteres especiais da língua portuguesa adequadamente, você pode indicar a codificação adequada pro MySQL.
No exemplo que segue, vou importar um arquivo de dados (/home/henry/KJV/port/biblia.txt para dentro da tabela biblia) codificado em UTF8 (CHARACTER SET utf8):

LOAD DATA LOCAL INFILE '/home/henry/KJV/port/biblia.txt' INTO TABLE biblia CHARACTER SET utf8;

Referências

Documentação oficial do MySQL: https://dev.mysql.com/doc/refman/5.7/en/load-data.html

By Elias Praciano

Autor de tecnologia (livre, de preferência), apaixonado por programação e astronomia.
Fã de séries, como "Rick and Morty" e "BoJack Horseman".
Me siga no Twitter e vamos trocar ideias!

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.