Como carregar um arquivo CSV em tabela no MySQL
Carregar arquivo CSV em tabela no MySQL
Um arquivo .csv (comma-separated values / valores separados por vírgulas) é um arquivo de texto que contém dados tabulares organizados em colunas, separados por um caractere delimitador de campos, que geralmente é uma vírgula (daí seu nome), mas que pode ser outro caractere qualquer, como ponto-e-vírgula, tabulação ou mesmo espaços simples.
A grande vantagem de usar arquivos csv é que eles podem ser criados facilmente em qualquer editor de textos, ou mesmo exportados a partir de planilhas eletrônicas, como o Microsoft Excel ou LibreOffice Calc, e assim nos permitem criar arquivos de dados de grande volume com rapidez e simplicidade.
Neste tutorial vou mostrar como é possível usar um arquivo csv para carregar (inserir) dados em uma tabela de banco de dados no MySQL. Para tal usaremos a declaração LOAD DATA INFILE.
O arquivo .csv
Vou usar um arquivo csv simples para carregar dados em uma tabela de autores de livros que contém três campos: ID do autor, Nome do autor e Sobrenome do autor, nesta ordem, usando o banco de dados db_biblioteca que usamos em outras lições.
Crie o arquivo usando um editor de textos ou planilha de sua preferência – mas certifique-se de salvá-lo com a extensão .csv, ou o processo de importação de registros irá falhar.
A seguir o conteúdo do arquivo de exemplo:
ID,Nome,Sobrenome 1,Carl,Sagan 2,Fábio,dos Reis 3,Umberto,Eco 4,Michael,Crichton 5,Stephen,Hawking 6,John,Emsley
A primeira linha contém cabeçalhos para identificação do conteúdo de cada coluna (para não nos confundirmos e é opcional – o MySQL não se importa com isso).
Eu salvei esse arquivo com o nome de “autores.csv“, no diretório C:\SQL de meu computador. Salve-o onde achar mais conveniente, mas lembre-se do caminho do arquivo, pois ele será necessário ao rodar a importação dos dados no banco.
Sintaxe
LOAD DATA INFILE 'caminho/do/arquivo.csv' INTO TABLE nome_tabela FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n' IGNORE 1 ROWS;
Onde:
- LOAD DATA INFILE – Define o local onde está o arquivo CSV que será importado. Basta alterar o caminho, entre aspas, para apontar para o local correto onde se encontra salvo o arquivo. Caso o arquivo CSV esteja gravado na máquina local, podemos usar também a declaração LOAD DATA LOCAL INFILE.
- INTO TABLE – Esta opção determina a tabela de destino na qual os dados do arquivo CSV serão importados.
- FIELDS TERMINATED BY – Por padrão, arquivos CSV tem seus dados individuais (campos) separados por vírgulas (delimitador). Se o arquivo utilizado usar um delimitador diferente, informe o valor nessa opção.
- ENCLOSED BY – Usado para especificar que aspas duplas “” englobam valores de dados(quando fazem parte do valor).
- LINES TERMINATED BY – Especifica o código ou caractere usado para indicar quebra de linha.
- IGNORE 1 ROWS – É comum que arquivos CSV possuam rótulos (nomes) de colunas na primeira linha do arquivo. Evidentemente não queremos importar esses rótulos como dados nas tabelas. Com esta opção informamos ao MySQL que a primeira linha do arquivo deve ser ignorada ao inserir os dados em uma tabela.
Observação: a opção LOAD DATA INFILE tem de usar a barra / em vez de \, mesmo no Windows.
Exemplo
Vamos ao nosso exemplo. Para carregar os dados presentes no arquivo autores.csv na tabela de autores, usaremos a declaração LOAD DATA INFILE como segue:
LOAD DATA INFILE 'C:/SQL/autores.csv' INTO TABLE tbl_autores FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n' IGNORE 1 ROWS;
Para verificar se os dados foram realmente carregados na tabela, basta fazer uma consulta simples com SELECT:
SELECT * FROM tbl_autores;
Resultado:
Como podemos ver, os ados foram carregados (inseridos) com sucesso na tabela de autores do banco de dados. Mas, e se quiséssemos realizar o processo inverso – gerar um arquivo CSV a partir do conteúdo presente em uma tabela qualquer?
É isso o que mostrarei como fazer na próxima lição.
Coloca um LOCAL e libera o secure pelo .mi com um # que melhora
LOAD DATA LOCAL INFILE ‘D:/Estudos/Bases_Kaggle/all_seasons.csv’ /*Comando usado para puxar a base em CSV, as barras precisam estar invertidas*/