Comment importer des données du fichier texte vers la base de données mysql

j'ai un fichier de 350Mo nommé text_file.txt contenant cet onglet délimité données:

345868230   1646198120  1531283146  Keyword_1531283146  1.55    252910000
745345566   1646198120  1539847239  another_1531276364  2.75    987831000
...

MySQL nom de la base de données: Xml_Date

table de base de données: PerformanceReport

j'ai déjà créé la table avec tous les champs destination.

je veux importer ces données de fichier texte dans un MySQL. J'ai googlé et trouvé quelques commandes comme LOAD DATA INFILE et assez confus sur la façon de l'utiliser.

Comment puis-je importer ces données de fichier texte?

40
demandé sur Eric Leschinski 2012-11-27 12:10:23

7 réponses

il devrait être aussi simple que...

LOAD DATA INFILE '/tmp/mydata.txt' INTO TABLE PerformanceReport;

par défaut LOAD DATA INFILE utilise tab délimité, une ligne par ligne, donc devrait le prendre en très bien.

56
répondu Omnikrys 2012-11-27 08:17:33

Walkthrough on using MySQL LOAD DATA command:

  1. créez votre table:

    CREATE TABLE foo(myid INT, mymessage VARCHAR(255), mydecimal DECIMAL(8,4));
    
  2. créez votre fichier délimité par onglet (notez qu'il y a des onglets entre les colonnes):

    1   Heart disease kills     1.2
    2   one out of every two    2.3
    3   people in America.      4.5
    
  3. utiliser la commande de données de charge:

    LOAD DATA LOCAL INFILE '/tmp/foo.txt' 
    INTO TABLE foo COLUMNS TERMINATED BY '\t';
    

    Si vous obtenez un avertissement que cette commande ne peut pas être Exécuter, puis vous devez activer le paramètre --local-infile=1 décrit ici: Comment puis-je corriger L'erreur de charge MySQL

  4. les lignes sont insérées:

    Query OK, 3 rows affected (0.00 sec)
    Records: 3  Deleted: 0  Skipped: 0  Warnings: 0
    
  5. vérifier si cela a fonctionné:

    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)
    

comment spécifier quelles colonnes pour charger vos colonnes de fichier texte dans:

Comme ceci:

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;

le contenu du fichier est mis dans les variables @col1, @col2, @col3. myid obtient la colonne 1, et mydecimal la colonne 3. Si cela était exécuté, il omettrait la deuxième ligne:

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
répondu Eric Leschinski 2017-05-23 12:26:26

si votre table est séparée par d'autres que des onglets, vous devez La spécifier comme...

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
répondu peixe 2012-11-27 11:24:12

L'instruction LOAD DATA INFILE lit des lignes à partir d'un fichier texte dans une table à une vitesse très élevée.

LOAD DATA INFILE '/tmp/test.txt' 
INTO TABLE test
FIELDS TERMINATED BY ','
LINES STARTING BY 'xxx';

Si le fichier de données ressemble à ceci:

xxx"abc",1
something xxx"def",2
"ghi",3

les lignes résultantes seront ("abc", 1) et ("def", 2). La troisième rangée du fichier est sautée parce qu'elle ne contient pas le préfixe.

LOAD DATA INFILE 'data.txt'
INTO TABLE tbl_name
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'

vous pouvez également charger des fichiers de données en utilisant l'utilitaire mysqlimport; il fonctionne en envoyant une charge de données Déclaration INFILE au serveur

mysqlimport -u root -ptmppassword --local test employee.txt

test.employee: Records: 3  Deleted: 0  Skipped: 0  Warnings: 0
3
répondu priya gupta 2015-04-08 14:21:54

vous devez définir l'option:

local-infile=1

dans votre entrée de my.fichier cnf ou appeler le client mysql avec l'option --local-infile:

mysql --local-infile -uroot -pyourpwd yourdbname

vous devez être sûr que le même paramètre est défini dans votre section [mysqld] pour activer la fonctionnalité" LOCAL infile " côté serveur.

c'est une restriction de sécurité.

LOAD DATA LOCAL INFILE '/softwares/data/data.csv' INTO TABLE tableName;
0
répondu Balkrushna Patil 2018-01-17 12:45:52

1. si il est délimité par des tabulations de fichier txt:

LOAD DATA LOCAL INFILE "D:/MySQL/event.txt 'INTO TABLE event

LINES TERMINATED BY '\r\n';

2. autrement:

LOAD DATA LOCAL INFILE "D:/MySQL/event.txt 'INTO TABLE event

champs terminés par 'x' (ici x pourrait être virgule ',', tab '\t', point-virgule';', espace'')

LINES TERMINATED BY '\r\n';

0
répondu 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;
  • ignorer 1 lignes pour sauter au-dessus d'une ligne d'en-tête initiale contenant des noms de colonne
  • FIELDS TERMINATED BY ', 'is to read the virgule-delimited file""
  • si vous avez généré le fichier texte sur un système Windows, vous pourriez avoir à utiliser des lignes terminées par '\r\n' pour lire le fichier correctement, parce que les programmes Windows utilisent généralement deux caractères comme terminateur de ligne. Certains programmes, comme WordPad, peuvent utiliser \r comme ligne terminator lors de l'écriture de fichiers. Pour lire de tels fichiers, utilisez les lignes terminées par'\r'.
0
répondu FullStack 2018-07-27 18:06:08