Como importar dados do ficheiro de texto para a base de dados mysql
tenho um ficheiro 350MB chamado text_file.txt
que contém esta página de dados delimitados:
345868230 1646198120 1531283146 Keyword_1531283146 1.55 252910000
745345566 1646198120 1539847239 another_1531276364 2.75 987831000
...
Nome da Base de dados MySQL: Xml_Date
PerformanceReport
já criei a tabela com todos os campos de destino.
quero importar este ficheiro de texto para um MySQL. Pesquisei e encontrei alguns comandos como LOAD DATA INFILE
e bastante confuso sobre como usá-lo.
Como posso importar estes dados de ficheiros de texto?
7 answers
LOAD DATA INFILE '/tmp/mydata.txt' INTO TABLE PerformanceReport;
Por omissão LOAD DATA INFILE
usa a tabulação delimitada, uma linha por linha, por isso deve levá-la muito bem.
Passar por cima ao usar o comando de dados de carga do MySQL:
-
Crie a sua tabela:
CREATE TABLE foo(myid INT, mymessage VARCHAR(255), mydecimal DECIMAL(8,4));
-
Crie o seu ficheiro delimitado por páginas (repare que existem páginas entre as colunas):
1 Heart disease kills 1.2 2 one out of every two 2.3 3 people in America. 4.5
-
Use o comando Carregar Dados:
LOAD DATA LOCAL INFILE '/tmp/foo.txt' INTO TABLE foo COLUMNS TERMINATED BY '\t';
Se tiver um aviso de que este comando não pode ser executado, então terá de activar o parâmetro
--local-infile=1
descrito aqui: Como posso corrigir o erro de carregamento do MySQL -
As linhas ser inserido:
Query OK, 3 rows affected (0.00 sec) Records: 3 Deleted: 0 Skipped: 0 Warnings: 0
-
Verifique se funcionou:
mysql> select * from foo; +------+----------------------+-----------+ | myid | mymessage | mydecimal | +------+----------------------+-----------+ | 1 | Heart disease kills | 1.2000 | | 2 | one out of every two | 2.3000 | | 3 | people in America. | 4.5000 | +------+----------------------+-----------+ 3 rows in set (0.00 sec)
Como especificar em que colunas carregar as suas colunas de ficheiro de texto:
Assim:LOAD DATA LOCAL INFILE '/tmp/foo.txt' INTO TABLE foo
FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n'
(@col1,@col2,@col3) set myid=@col1,mydecimal=@col3;
O conteúdo do ficheiro é colocado nas variáveis @col1, @col2, @col3. o myid fica com a coluna 1 e o meu decimal com a coluna 3. Se isto fosse executado, omitiria a segunda linha:
mysql> select * from foo;
+------+-----------+-----------+
| myid | mymessage | mydecimal |
+------+-----------+-----------+
| 1 | NULL | 1.2000 |
| 2 | NULL | 2.3000 |
| 3 | NULL | 4.5000 |
+------+-----------+-----------+
3 rows in set (0.00 sec)
Se a sua mesa está separada por outras páginas, deve especificá-la como tal...
LOAD DATA LOCAL
INFILE '/tmp/mydata.txt' INTO TABLE PerformanceReport
COLUMNS TERMINATED BY '\t' ## This should be your delimiter
OPTIONALLY ENCLOSED BY '"'; ## ...and if text is enclosed, specify here
A instrução do ficheiro de dados de carga lê linhas de um ficheiro de texto para uma tabela a uma velocidade muito elevada.
LOAD DATA INFILE '/tmp/test.txt'
INTO TABLE test
FIELDS TERMINATED BY ','
LINES STARTING BY 'xxx';
Se o ficheiro de dados se parecer com isto:
xxx"abc",1
something xxx"def",2
"ghi",3
As linhas resultantes serão ("abc", 1) e ("def", 2). A terceira linha do arquivo é ignorada porque não contém o prefixo.
LOAD DATA INFILE 'data.txt'
INTO TABLE tbl_name
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
Você também pode carregar ficheiros de dados usando o utilitário mysqlimport; ele funciona enviando uma instrução de carregamento de ficheiros de dados para o servidor
mysqlimport -u root -ptmppassword --local test employee.txt
test.employee: Records: 3 Deleted: 0 Skipped: 0 Warnings: 0
Deve definir a opção:
local-infile=1
Na tua [mysql] entrada da minha.ficheiro cnf ou ligar ao cliente mysql com a opção --local-infile:
mysql --local-infile -uroot -pyourpwd yourdbname
Tem de ter a certeza que o mesmo parâmetro está definido na sua secção [mysqld] também para activar o lado do servidor de funcionalidades "local infile".
É uma restrição de segurança.LOAD DATA LOCAL INFILE '/softwares/data/data.csv' INTO TABLE tableName;
1. se for a página delimitada do ficheiro txt:
Carregar o ficheiro LOCAL dos dados 'D:/MySQL/event.txt ' no evento da tabela
Linhas terminadas por '\r\n';
2. caso contrário:
Carregar o ficheiro LOCAL dos dados 'D:/MySQL/event.txt ' no evento da tabela
Os campos terminados por ' x '(aqui o x pode ser vírgula',', tab '\t', ponto e vírgula';', espaço')
Linhas terminadas por '\r\n';
LOAD DATA INFILE '/home/userlap/data2/worldcitiespop.txt' INTO TABLE cc FIELDS TERMINATED BY ','LINES TERMINATED BY '\r \n' IGNORE 1 LINES;
- ignorar 1 linhas para saltar sobre uma linha de cabeçalho inicial que contém os nomes das colunas
- os campos terminados por', ' é ler o ficheiro delimitado por vírgulas
- Se tiver gerado o ficheiro de texto num sistema Windows, poderá ter de usar as linhas terminadas por '\r\n' para ler o ficheiro correctamente, porque os programas do Windows normalmente usam dois caracteres como terminador de linha. Alguns programas, como o WordPad, podem usar \r como um terminador de linha ao escrever arquivos. Para ler esses arquivos, usar as linhas terminadas por'\r'.