Eu tenho um CSV de diário de eventos não normalizado de um cliente que estou tentando carregar em uma tabela MySQL para que eu possa refatorar em um formato saudável. Criei uma tabela chamada 'CSVImport' que possui um campo para cada coluna do arquivo CSV. O CSV contém 99 colunas, portanto, essa foi uma tarefa bastante difícil:
CREATE TABLE 'CSVImport' (id INT);
ALTER TABLE CSVImport ADD COLUMN Title VARCHAR(256);
ALTER TABLE CSVImport ADD COLUMN Company VARCHAR(256);
ALTER TABLE CSVImport ADD COLUMN NumTickets VARCHAR(256);
...
ALTER TABLE CSVImport Date49 ADD COLUMN Date49 VARCHAR(256);
ALTER TABLE CSVImport Date50 ADD COLUMN Date50 VARCHAR(256);
Não há restrições na tabela e todos os campos mantêm valores VARCHAR (256), exceto as colunas que contêm contagens (representadas por INT), sim / não (representadas por BIT), preços (representados por DECIMAL) e sinopse de texto ( representado por TEXT).
Eu tentei carregar dados no arquivo:
LOAD DATA INFILE '/home/paul/clientdata.csv' INTO TABLE CSVImport;
Query OK, 2023 rows affected, 65535 warnings (0.08 sec)
Records: 2023 Deleted: 0 Skipped: 0 Warnings: 198256
SELECT * FROM CSVImport;
| NULL | NULL | NULL | NULL | NULL |
...
A mesa inteira está cheia NULL
.
Eu acho que o problema é que os anúncios de texto contêm mais de uma linha, e o MySQL está analisando o arquivo como se cada nova linha correspondesse a uma linha do banco de dados. Eu posso carregar o arquivo no OpenOffice sem problemas.
O arquivo clientdata.csv contém 2593 linhas e 570 registros. A primeira linha contém nomes de colunas. Eu acho que é delimitado por vírgula, e o texto é aparentemente delimitado com aspas duplas.
ATUALIZAR:
Em caso de dúvida, leia o manual: http://dev.mysql.com/doc/refman/5.0/en/load-data.html
Adicionei algumas informações à LOAD DATA
declaração de que o OpenOffice era inteligente o suficiente para inferir e agora carrega o número correto de registros:
LOAD DATA INFILE "/home/paul/clientdata.csv"
INTO TABLE CSVImport
COLUMNS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
ESCAPED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 LINES;
Mas ainda existem muitos NULL
registros completos e nenhum dos dados que foram carregados parece estar no lugar certo.
fonte
Respostas:
O núcleo do seu problema parece corresponder as colunas no arquivo CSV com as da tabela.
Muitos clientes gráficos do mySQL têm diálogos de importação muito bons para esse tipo de coisa.
O meu favorito para o trabalho é o HeidiSQL baseado no Windows . Ele fornece uma interface gráfica para criar o
LOAD DATA
comando; você pode reutilizá-lo programaticamente mais tarde.Captura de tela: caixa de diálogo "Importar arquivo de texto"
Para abrir a caixa de diálogo Importar arquivo de texto ", vá para
Tools > Import CSV file
:fonte
Use mysqlimport para carregar uma tabela no banco de dados:
Encontrei-o em http://chriseiffel.com/everything-linux/how-to-import-a-large-csv-file-to-mysql/
Para tornar o delimitador uma guia, use
--fields-terminated-by='\t'
fonte
mysqlimport
usaLOAD DATA INFILE...
nos bastidores, então é praticamente a mesma coisa.LOAD DATA INFILE
você precisa criar uma tabela antes de poder usarmysqlimport
.LOAD DATA INFILE
.--fields-optionally-enclosed-by=\"
e `--fields-escaped-by = \`A maneira mais simples de importar mais de 200 linhas está abaixo do comando na janela phpmyadmin sql
Eu tenho uma tabela simples do país com duas colunas CountryId, CountryName
aqui estão os dados .csv
aqui está o comando:
Lembre-se de uma coisa, nunca apareça, na segunda coluna; caso contrário, sua importação será interrompida
fonte
LOAD DATA LOCAL INFILE
. Se isso gerar um erro 1148 "comando usado não é permitido", você poderá habilitá-lo executando o mysql na linha de comando com--local-infile
.Usei esse método para importar mais de 100 mil registros ( ~ 5 MB ) em 0,046 s
Aqui está como você faz isso:
É muito importante incluir a última linha, se você tiver mais de um campo, ou seja, normalmente ele pula o último campo (MySQL 5.6.17)
Então, supondo que você tenha a primeira linha como título para seus campos, inclua essa linha também
É assim que parece se seu arquivo tiver uma linha de cabeçalho.
fonte
(field_1,field_2 , field_3);
ele se refere à lista de colunas em um arquivo .csv ou em uma tabela? ou seja, quais são esses campos?O phpMyAdmin pode lidar com a importação de CSV. Aqui estão os passos:
Prepare o arquivo CSV para ter os campos na mesma ordem que os campos da tabela MySQL.
Remova a linha do cabeçalho do CSV (se houver), para que apenas os dados estejam no arquivo.
Vá para a interface do phpMyAdmin.
Selecione a tabela no menu esquerdo.
Clique no botão de importação na parte superior.
Vá para o arquivo CSV.
Selecione a opção "CSV usando LOAD DATA".
Digite "," nos "campos terminados por".
Digite os nomes das colunas na mesma ordem em que estão na tabela do banco de dados.
Clique no botão ir e pronto.
Esta é uma observação que eu preparei para meu uso futuro e que compartilhe aqui se alguém puder se beneficiar.
fonte
NULL
no CSV qualquer campo / coluna com incremento automático.Você pode corrigir isso listando as colunas na instrução LOAD DATA. Do manual :
... portanto, no seu caso, você precisa listar as 99 colunas na ordem em que aparecem no arquivo csv.
fonte
Tente isso, funcionou para mim
IGNORE 1 ROWS aqui ignora a primeira linha que contém os nomes de campo. Observe que, para o nome do arquivo, você deve digitar o caminho absoluto do arquivo.
fonte
A linha de comando do mysql é propensa a muitos problemas na importação. Aqui está como você faz isso:
fonte
Se você estiver usando o MySQL Workbench (versão 6.3), você pode fazer isso:
fonte
LOAD DATA INFILE
emysqlimport
( "isto não é suportado nesta versão do mysql")INSERT
consulta massiva e tentaria fazer tudo de uma só vez, mas parece que dessa forma, na verdade, é executado uma vezINSERT
por linha.Eu vejo algo estranho. Você está usando para ESCAPAR o mesmo caractere usado para ENCLOSING. Portanto, o mecanismo não sabe o que fazer quando encontra um '"' e acho que é por isso que nada parece estar no lugar certo. Acho que se você remover a linha de ESCAPING, deve executar muito bem.
A menos que você analise (manualmente, visualmente, ...) seu CSV e descubra qual personagem usa para escapar. As vezes é '\'. Mas se você não o tiver, não o use.
fonte
Outra solução é usar a ferramenta csvsql da incrível suíte csvkit .
Exemplo de uso:
Essa ferramenta pode inferir automaticamente os tipos de dados (comportamento padrão), criar tabela e inserir os dados na tabela criada.
--overwrite
A opção pode ser usada para descartar a tabela, se ela já existir.--insert
opção - para preencher a tabela do arquivo.Para instalar o conjunto
Pré-requisitos:
python-dev
,libmysqlclient-dev
,MySQL-python
fonte
Como importar arquivos csv para tabelas sql
Arquivo de exemplo: arquivo
Overseas_trade_index
CSV de dadosPassos:
Precisa criar tabela para
overseas_trade_index
.Precisa criar colunas relacionadas ao arquivo csv.
Consulta SQL:
Precisa conectar o banco de dados mysql no terminal.
Por favor, insira este comando para importar os dados csv para tabelas mysql.
Encontre esses dados de índice de comércio exterior no sqldatabase:
fonte
Se você estiver usando uma máquina Windows com a planilha do Excel carregada, o novo plug-in mySql no Excel é fenomenal. O pessoal da Oracle realmente fez um bom trabalho nesse software. Você pode fazer a conexão com o banco de dados diretamente do Excel. Esse plug-in analisará seus dados e configurará as tabelas para você em um formato consistente com os dados. Eu tinha alguns arquivos csv monstruosos de dados para converter. Essa ferramenta economizou muito tempo.
http://dev.mysql.com/downloads/windows/excel/
Você pode fazer atualizações no Excel que serão preenchidas no banco de dados online. Isso funcionou muito bem com arquivos mySql criados em hospedagem compartilhada GoDaddy ultra barata. (Observe que quando você cria a tabela no GoDaddy, é necessário selecionar algumas configurações fora do padrão para ativar o acesso externo ao banco de dados ...)
Com este plugin, você tem pura interatividade entre sua planilha XL e o armazenamento de dados mySql online.
fonte
Eu uso o mysql workbench para fazer o mesmo trabalho.
Nota: verifique se há erros no arquivo de log do mysql workbench usando "tail -f [mysqlworkbenchpath] /log/wb*.log"
fonte
Aqui está um exemplo de captura de tela do arquivo excel:
Salve como e escolha .csv.
E você terá como mostrado abaixo a captura de tela de dados .csv se abrir usando o bloco de notas ++ ou qualquer outro bloco de notas.
Certifique-se de remover o cabeçalho e ter alinhamento de coluna em .csv como na tabela mysql. Substitua nome_da_pasta pelo nome da sua pasta
CARREGAR DADOS
INFÍLICOS LOCAIS 'D: /folder_name/myfilename.csv' NA TABELA E-mail CAMPOS TERMINADOS POR ',' (fname, lname, email, phone);
Se for grande volume de dados, você pode tomar café e carregá-lo !.
É tudo o que você precisa.
fonte
Caso você esteja usando o Intellij https://www.jetbrains.com/datagrip/features/importexport.html
fonte
Consulta PHP para importar arquivo csv para banco de dados mysql
** Dados do arquivo CSV de amostra **
fonte
fonte