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
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.
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.
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'"
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.
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.
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';
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