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

Tabela de bases de dados: 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?

Author: Eric Leschinski, 2012-11-27

7 answers

Deve ser tão simples quanto isso...
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.

 56
Author: Omnikrys, 2012-11-27 08:17:33

Passar por cima ao usar o comando de dados de carga do MySQL:

  1. Crie a sua tabela:

    CREATE TABLE foo(myid INT, mymessage VARCHAR(255), mydecimal DECIMAL(8,4));
    
  2. 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
    
  3. 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

  4. As linhas ser inserido:

    Query OK, 3 rows affected (0.00 sec)
    Records: 3  Deleted: 0  Skipped: 0  Warnings: 0
    
  5. 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)
 42
Author: Eric Leschinski, 2017-05-23 12:26:26

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
 13
Author: peixe, 2012-11-27 11:24:12

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
 3
Author: priya gupta, 2015-04-08 14:21:54

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;
 0
Author: Balkrushna Patil, 2018-01-17 12:45:52

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';

 0
Author: Shu Zhang, 2018-03-16 21:40:43
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'.
 0
Author: FullStack, 2018-07-27 18:06:08