J'ai un fichier CSV contenant 10 colonnes. Je veux sélectionner seulement quelques colonnes de ce fichier et les charger dans une base de données MySQL en utilisant la commande LOAD DATA INFILE
.Comment insérer des colonnes sélectionnées d'un fichier CSV dans une base de données MySQL à l'aide de LOAD DATA INFILE
Répondre
LOAD DATA INFILE 'file.csv'
INTO TABLE t1
(column1, @dummy, column2, @dummy, column3, ...)
FIELDS TERMINATED BY ',' ENCLOSED BY '"' ESCAPED BY '"'
LINES TERMINATED BY '\r\n';
Il suffit de remplacer le colonne1, colonne2, etc .. avec vos noms de colonnes, et mis @dummy anwhere il y a une colonne dans le CSV que vous voulez ignorer. Tous les détails here.
Charger des données dans une table MySQL et spécifier des colonnes:
LOAD DATA LOCAL INFILE 'file.csv' INTO TABLE t1
FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n'
(@col1,@col2,@col3,@col4) set [email protected],[email protected] ;
@ col1,2,3,4 sont des variables pour tenir les colonnes du fichier csv (assumer 4) nom, id sont des colonnes de table.
Je lance votre réponse dans mysql et affiche une erreur: 'ERROR 1148 (42000): La commande utilisée n'est pas autorisée avec cette version de MySQL'. – shgnInc
@shgnInc refere this http://stackoverflow.com/questions/16285864/how-can-i-correct-mysql-load-error – ArK
Et si j'ai 100 colonnes et que je veux juste importer 2 colonnes, alors devrais-je écrire (@ col1, @ col2, ... @ col100) nom de l'ensemble = @ col4, id- @ col2; ou il y a un moyen facile? – Dharma
Spécifiez le nom des colonnes dans le fichier CSV dans l'instruction de chargement de fichier de données.
Le code est comme ceci:
LOAD DATA INFILE '/path/filename.csv'
INTO TABLE table_name
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\r\n'
(column_name3, column_name5);
Ici vous allez avec l'ajout de données à deux colonnes (vous pouvez les choisir avec le nom de la colonne) à la table. La seule chose à faire est que vous ayez un fichier CSV (filename.csv) avec deux valeurs par ligne (ligne). Sinon, veuillez mentionner. J'ai une solution différente.
Merci.
probablement les autres réponses sont un peu obsolètes. celui-ci a fonctionné pour moi avec MySQL 5.6 –
Merci d'avoir mis le chemin d'accès complet au fichier. Pendant un moment, je cherchais le répertoire MySQL dans lequel je devais mettre le fichier csv! – Shrinath
Celui-ci fonctionne le mieux, bien que le chemin doit être à partir des zones sécurisées autorisées. Exécutez cette commande AFFICHER DES VARIABLES COMME "secure_file_priv"; , puis déposez le fichier csv à cet emplacement –
Exemple:
contenu du fichier ae.csv:
"Date, xpto 14"
"code","number","year","C"
"blab","15885","2016","Y"
"aeea","15883","1982","E"
"xpto","15884","1986","B"
"jrgg","15885","1400","A"
CREATE TABLE Tabletmp (
rec VARCHAR(9)
);
Pour mettre seulement la colonne 3:
LOAD DATA INFILE '/local/ae.csv'
INTO TABLE Tabletmp
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
IGNORE 2 LINES
(@col1, @col2, @col3, @col4, @col5)
set rec = @col3;
select * from Tabletmp;
2016
1982
1986
1400
Je reçois une erreur de syntaxe quand je cours quelque chose comme ça. Je dois mettre le '(champ, noms)' juste avant le point-virgule à la fin pour le faire fonctionner. –
Cela ne se produit pas si vous ne connaissez pas toutes les colonnes csv. –