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?
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.
Walkthrough on using MySQL LOAD DATA command:
-
créez votre table:
CREATE TABLE foo(myid INT, mymessage VARCHAR(255), mydecimal DECIMAL(8,4));
-
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
-
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 -
les lignes sont insérées:
Query OK, 3 rows affected (0.00 sec) Records: 3 Deleted: 0 Skipped: 0 Warnings: 0
-
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)
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
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
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;
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';
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'.