web-dev-qa-db-fra.com

Comment importer des données d'un fichier texte dans la base de données mysql

J'ai un fichier de 350 Mo nommé text_file.txt contenant ces données délimitées par des tabulations:

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

Nom de la base de données MySQL: Xml_Date

Table de base de données: PerformanceReport

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

Je veux importer ces données de fichier texte dans un MySQL. J'ai cherché sur Google et trouvé des commandes telles que LOAD DATA INFILE et je ne comprenais pas trop comment l'utiliser.

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

42

Cela devrait être aussi simple que ...

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

Par défaut, LOAD DATA INFILE utilise des lignes délimitées par des tabulations, une ligne par ligne.

59
Omnikrys

Procédure pas à pas pour utiliser la commande LOAD DATA de MySQL:

  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 des tabulations (notez qu'il y a des tabulations entre les colonnes):

    1   Heart disease kills     1.2
    2   one out of every two    2.3
    3   people in America.      4.5
    
  3. Utilisez la commande load data:

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

    Si vous recevez un avertissement indiquant que cette commande ne peut pas être exécutée, vous devez activer le paramètre --local-infile=1 décrit ici: Comment corriger l'erreur de chargement 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érifiez 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 les colonnes dans lesquelles charger les colonnes de votre fichier texte dans:

Comme ça: 

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 placé dans les variables @ col1, @ col2, @ col3. myid obtient la colonne 1 et mydecimal, la colonne 3. Si cela était exécuté, la deuxième ligne serait omise:

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)
44
Eric Leschinski

Si votre table est séparée par d'autres que des tabulations, vous devez la spécifier comme suit:.

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
peixe

L'instruction LOAD DATA INFILE lit les lignes 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 ligne du fichier est ignorée car 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 aussi charger des fichiers de données en utilisant l'utilitaire mysqlimport; il fonctionne en envoyant une instruction LOAD DATA INFILE au serveur

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

test.employee: Records: 3  Deleted: 0  Skipped: 0  Warnings: 0
3
priya gupta

1. s'il s'agit d'un fichier txt délimité par des tabulations:  

LOAD DATA LOCAL INFILE 'D: /MySQL/event.txt' INTO TABLE événement

LIGNES TERMINÉES PAR '\ r\n';

2. sinon:  

LOAD DATA LOCAL INFILE 'D: /MySQL/event.txt' INTO TABLE événement

ZONES TERMINÉES PAR 'x' (ici, x pourrait être une virgule ',', onglet '\ t', point-virgule ';', espace '')

LIGNES TERMINÉES PAR '\ r\n';

0
Shu Zhang

Vous devriez définir l'option:

local-infile=1

dans votre entrée [mysql] du fichier my.cnf ou appelez le client mysql avec l'option --local-infile:

mysql --local-infile -uroot -pyourpwd yourdbname

Vous devez également vous assurer que le même paramètre est défini dans votre section [mysqld] pour activer le côté serveur "infile local".

C'est une restriction de sécurité.

LOAD DATA LOCAL INFILE '/softwares/data/data.csv' INTO TABLE tableName;
0
Balkrushna Patil
LOAD DATA INFILE '/home/userlap/data2/worldcitiespop.txt' INTO TABLE cc FIELDS TERMINATED BY ','LINES TERMINATED BY '\r \n' IGNORE 1 LINES;
  • IGNOREZ 1 LIGNES pour ignorer une ligne d’en-tête initiale contenant des noms de colonnes
  • Les champs terminés par ',' consistent à lire le fichier délimité par des virgules
  • Si vous avez généré le fichier texte sur un système Windows, vous devrez peut-être utiliser LINES TERMINATED BY '\ r\n' pour lire le fichier correctement, car les programmes Windows utilisent généralement deux caractères comme terminateur de ligne. Certains programmes, tels que WordPad, peuvent utiliser\r comme terminateur de ligne lors de l’écriture de fichiers. Pour lire de tels fichiers, utilisez LINES TERMINATED BY '\ r'. 
0
Amitesh