web-dev-qa-db-fra.com

Importer un csv dans mysql via une ligne de commande

J'essaie d'importer un très gros fichier .csv (~ 4 Go) dans mysql. J'envisageais d'utiliser phpmyadmin, mais dans ce cas, vous avez une taille de téléchargement maximale de 2 Mo. Quelqu'un m'a dit que je devais utiliser la ligne de commande. 

J'allais utiliser ces instructions pour l'importer: http://dev.mysql.com/doc/refman/5.0/fr/mysqlimport.html#c5680

Quelle serait la commande pour définir la première ligne de la table .csv comme noms de colonnes dans la table mysql? Cette option est disponible via phpmyadmin, donc ils doivent aussi être une version en ligne de commande mysql, non? Aidez-moi, s'il vous plaît. Je vous remercie.

-Raj

47
de1337ed

Essayez cette commande

 load data local infile 'file.csv' into table table
 fields terminated by ','
 enclosed by '"'
 lines terminated by '\n'
 (column1, column2, column3,...)

Les champs ici sont les champs de table réels dans lesquels les données doivent rester. Les lignes délimitées par et les lignes terminées par sont facultatives et peuvent vous aider si vous avez des colonnes entourées de guillemets tels que les exportations Excel, etc.

Pour plus de détails, consultez le manual .

Pour définir la première ligne en tant que noms de colonne de la table, ignorez simplement la ligne en cours de lecture et ajoutez les valeurs à la commande. 

107
Balanivash

Tu pourrais faire un 

mysqlimport --columns='head -n 1 $yourfile' --ignore-lines=1 dbname $yourfile`

En d’autres termes, si votre fichier est séparé par des virgules et non par des points-virgules. Sinon, vous pourriez avoir besoin de sed également.

10
Niels van Adrichem

essaye ça: 

mysql -uusername -ppassword --local-infile scrapping -e "LOAD DATA LOCAL INFILE 'CSVname.csv'  INTO TABLE table_name  FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n'"
8
Rahul Arora

Pour importer csv avec une ligne d’en-tête avec mysqlimport, ajoutez simplement

--ignore-lines=N

(ignore les N premières lignes du fichier de données)

Cette option est décrite dans la page que vous avez liée.

5
Bjoern

Vous pouvez simplement importer par

mysqlimport --ignore-lines=1 --lines-terminated-by='\n' --fields-terminated-by=',' --fields-enclosed-by='"' --verbose --local -uroot -proot db_name csv_import.csv

Remarque: Le nom du fichier Csv et le nom de la table doivent être identiques.

1
Aravinthan K

Vous pouvez le dire de la manière suivante:

LOAD DATA LOCAL INFILE 'C:/Users/userName/Downloads/tableName.csv' INTO TABLE tableName FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n';

0
Daud Mabena

Une autre option consiste à utiliser la commande csvsql à partir de la bibliothèque csvkit.

Exemple d'utilisation directement en ligne de commande:

csvsql --db mysql:///test --tables yourtable --insert yourfile.csv

Cela peut être exécuté directement sur la ligne de commande ou intégré à un script python ou Shell pour l'automatisation si vous devez le faire pour plusieurs fichiers.

csvsql vous permet de créer des tables de base de données à la volée en fonction de la structure de votre csv. Il s’agit donc d’une méthode lite pour obtenir que la première ligne de votre csv soit convertie automatiquement en en-tête de table MySQL.

Documentation complète et autres exemples ici: https://csvkit.readthedocs.io/fr/1.0.3/scripts/csvsql.html

0
user1725872