Comment importer un fichier CSV dans une table MySQL

J’ai un journal CSV d’événements-journal non-normalisé à partir d’un client que je tente de charger dans une table MySQL afin que je puisse refactoriser dans un format sain. J’ai créé une table appelée ‘CSVImport’ qui contient un champ pour chaque colonne du fichier CSV. Le CSV contient 99 colonnes, ce qui était une tâche assez difficile en soi:

CREATE TABLE 'CSVImport' (id INT); ALTER TABLE CSVImport ADD COLUMN Title VARCHAR(256); ALTER TABLE CSVImport ADD COLUMN Company VARCHAR(256); ALTER TABLE CSVImport ADD COLUMN NumTickets VARCHAR(256); ... ALTER TABLE CSVImport Date49 ADD COLUMN Date49 VARCHAR(256); ALTER TABLE CSVImport Date50 ADD COLUMN Date50 VARCHAR(256); 

Aucune contrainte n’existe sur la table et tous les champs contiennent des valeurs VARCHAR (256), à l’exception des colonnes qui contiennent des comptes (représentés par INT), oui / non (représentés par BIT), des prix (représentés par DECIMAL) représenté par TEXT).

J’ai essayé de charger des données dans le fichier:

 LOAD DATA INFILE '/home/paul/clientdata.csv' INTO TABLE CSVImport; Query OK, 2023 rows affected, 65535 warnings (0.08 sec) Records: 2023 Deleted: 0 Skipped: 0 Warnings: 198256 SELECT * FROM CSVImport; | NULL | NULL | NULL | NULL | NULL | ... 

La table entière est remplie avec NULL .

Je pense que le problème est que les textes contiennent plus d’une ligne et que MySQL parsing le fichier comme si chaque nouvelle ligne correspondait à une ligne de firebase database. Je peux charger le fichier dans OpenOffice sans problème.

Le fichier clientdata.csv contient 2593 lignes et 570 enregistrements. La première ligne contient des noms de colonne. Je pense qu’il est délimité par des virgules, et le texte est apparemment délimité par doublequote.

METTRE À JOUR:

En cas de doute, lisez le manuel: http://dev.mysql.com/doc/refman/5.0/en/load-data.html

J’ai ajouté quelques informations à la LOAD DATA selon laquelle OpenOffice était assez intelligent pour en déduire, et maintenant il charge le nombre correct d’enregistrements:

 LOAD DATA INFILE "/home/paul/clientdata.csv" INTO TABLE CSVImport COLUMNS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' ESCAPED BY '"' LINES TERMINATED BY '\n' IGNORE 1 LINES; 

Mais il y a toujours beaucoup d’enregistrements complètement NULL , et aucune des données chargées ne semble être au bon endroit.

Le cœur de votre problème semble correspondre aux colonnes du fichier CSV à celles de la table.

De nombreux clients graphiques MySQL ont de très bonnes boîtes de dialog d’importation pour ce genre de chose.

Mon préféré pour ce travail est HeidiSQL basé sur Windows. Il vous donne une interface graphique pour construire la LOAD DATA ; vous pouvez le réutiliser ultérieurement par programmation.

Importer un fichier texte

Capture d’écran: Boîte de dialog “Importer un fichier texte”

Pour ouvrir la boîte de dialog “Importer un fichier texte”, sélectionnez Tools > Import CSV file :

entrer la description de l'image ici

Utilisez mysqlimport pour charger une table dans la firebase database:

 mysqlimport --ignore-lines=1 \ --fields-terminated-by=, \ --local -u root \ -p Database \ TableName.csv 

Je l’ai trouvé sur http://chriseiffel.com/everything-linux/how-to-import-a-large-csv-file-to-mysql/

Pour que le délimiteur soit un onglet, utilisez --fields-terminated-by='\t'

La manière la plus simple dont j’ai importé plus de 200 lignes est la commande ci-dessous dans la fenêtre phpmyadmin sql

J’ai un tableau simple de pays avec deux colonnes CountryId, CountryName

voici les données .csv FICHIER CSV

voici la commande:

 LOAD DATA INFILE 'c:/country.csv' INTO TABLE country FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n' IGNORE 1 ROWS 

Gardez une chose en tête, ne jamais apparaître, dans la deuxième colonne, sinon votre importation s’arrêtera

Je sais que la question est ancienne , mais je voudrais partager cette

J’ai utilisé cette méthode pour importer plus de 100K enregistrements ( ~ 5MB ) dans 0.046sec

Voici comment vous le faites:

 LOAD DATA LOCAL INFILE 'c:/temp/some-file.csv' INTO TABLE your_awesome_table FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n' (field_1,field_2 , field_3); 

Il est très important d’inclure la dernière ligne, si vous avez plus d’un champ, c’est-à-dire normalement, il saute le dernier champ (MySQL 5.6.17).

 LINES TERMINATED BY '\n' (field_1,field_2 , field_3); 

Ensuite, en supposant que vous ayez la première ligne en tant que titre pour vos champs, vous pouvez également inclure cette ligne

 IGNORE 1 ROWS 

Voici à quoi cela ressemble si votre fichier a une ligne d’en-tête.

 LOAD DATA LOCAL INFILE 'c:/temp/some-file.csv' INTO TABLE your_awesome_table FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n' IGNORE 1 ROWS (field_1,field_2 , field_3); 

phpMyAdmin peut gérer l’importation CSV. Voici les étapes:

  1. Préparez le fichier CSV pour avoir les champs dans le même ordre que les champs de la table MySQL.

  2. Supprimez la ligne d’en-tête du fichier CSV (le cas échéant), afin que seules les données figurent dans le fichier.

  3. Accédez à l’interface phpMyAdmin.

  4. Sélectionnez la table dans le menu de gauche.

  5. Cliquez sur le bouton d’importation en haut.

  6. Accédez au fichier CSV.

  7. Sélectionnez l’option “CSV utilisant LOAD DATA”.

  8. Entrez “,” dans les “champs terminés par”.

  9. Entrez les noms de colonne dans le même ordre que dans la table de firebase database.

  10. Cliquez sur le bouton Aller et vous avez terminé.

Ceci est une note que j’ai préparée pour mon utilisation future, et partage ici si quelqu’un d’autre peut en bénéficier.

Vous pouvez résoudre ce problème en répertoriant les colonnes de votre instruction LOAD DATA. A partir du manuel :

 LOAD DATA INFILE 'persondata.txt' INTO TABLE persondata (col1,col2,...); 

… dans votre cas, vous devez lister les 99 colonnes dans l’ordre dans lequel elles apparaissent dans le fichier csv.

La ligne de commande mysql est sujette à trop de problèmes lors de l’importation. Voici comment vous le faites:

  • utiliser Excel pour éditer les noms d’en-tête sans espace
  • enregistrer sous .csv
  • utiliser le navigateur gratuit Navicat Lite Sql pour importer et créer automatiquement une nouvelle table (lui donner un nom)
  • ouvrir la nouvelle table insérer une colonne de numéro automatique primaire pour l’ID
  • changer le type des colonnes comme vous le souhaitez.
  • terminé!

Vous pouvez également essayer cet outil en ligne pour générer des instructions de création / insertion SQL en fonction de votre CSV. http://www.convertcsvtomysql.com/

Ce que j’aime de cet outil:

  • Simple
  • Il génère non seulement des instructions INSERT, mais aussi des instructions CREATE pour générer une table.
  • Lorsque vous générez des instructions CREATE, cet outil ne rend pas simplement tous les champs VARCHAR: il parsing les données de votre fichier CSV et, en fonction de cette parsing, choisit le type de données approprié.

Désavantages

  • La taille du fichier d’entrée est limitée à 3 Mo
  • Vous pourriez ne pas être disposé à donner vos données à un tiers

Essayez ceci, cela a fonctionné pour moi

  LOAD DATA LOCAL INFILE 'filename.csv' INTO TABLE table_name FIELDS TERMINATED BY ',' ENCLOSED BY '"' IGNORE 1 ROWS; 

IGNORE 1 ROWS ignore ici la première ligne contenant les noms de champs. Notez que pour le nom de fichier, vous devez taper le chemin absolu du fichier.

Si vous utilisez une machine Windows avec une feuille de calcul Excel chargée, le nouveau plug-in mySql pour Excel est phénoménal. Les gens d’Oracle ont vraiment fait du bon travail sur ce logiciel. Vous pouvez établir la connexion à la firebase database directement à partir d’Excel. Ce plugin parsingra vos données et configurera les tables pour vous dans un format compatible avec les données. J’ai eu quelques gros fichiers de données CSV de monstres à convertir. Cet outil était un gros gain de temps.

http://dev.mysql.com/downloads/windows/excel/

Vous pouvez effectuer des mises à jour à partir d’Excel qui seront intégrées à la firebase database en ligne. Cela a très bien fonctionné avec les fichiers mySql créés sur l’hébergement mutualisé GoDaddy ultra-économique. (Remarque: lorsque vous créez la table sur GoDaddy, vous devez sélectionner des parameters non standard pour permettre l’access hors site à la firebase database …)

Avec ce plugin, vous avez une interactivité pure entre votre feuille de calcul XL et le stockage de données en ligne mySql.

Changez le nom de serveur, le nom d’utilisateur, le mot de passe, le nom de la firebase database, le chemin de votre fichier, le nom de la table et le champ qui se trouve dans votre firebase database que vous voulez insérer

 alert("Oops... Some Error occured.");'; exit(); //exit(mysqli_error()); }else{ echo '' } ?> 

Si vous utilisez MySQL Workbench (actuellement version 6.3), vous pouvez le faire en:

  1. Faites un clic droit sur “Tables”;
  2. Assistant d’importation de données de table choisies;
  3. Choisissez votre fichier csv et suivez les instructions (JSON pourrait également être utilisé); La bonne chose est que vous pouvez créer une nouvelle table basée sur le fichier csv que vous souhaitez importer ou charger des données dans une table existante

entrer la description de l'image ici

PHP Query pour importer le fichier csv dans la firebase database mysql

 $query = <<db, $query)) { exit(mysqli_error($this->db)); } 

** Données de fichier CSV **

 name,mobile,email Christopher Gritton,570-686-3439,[email protected] Brandon Wilson,541-309-5149,[email protected] Craig White,516-795-8065,[email protected] David Whitney,713-214-3966,[email protected] 

Voici un exemple de capture d’écran du fichier Excel:

entrer la description de l'image ici

Enregistrez sous et choisissez .csv.

Et vous aurez, comme indiqué ci-dessous, la capture d’écran des données .csv si vous ouvrez en utilisant notepad ++ ou tout autre bloc-notes.

entrer la description de l'image ici

Assurez-vous de supprimer l’en-tête et d’avoir l’alignement des colonnes dans .csv comme dans la table mysql. Remplacez folder_name par votre nom de dossier

CHARGEMENT DES DONNÉES LOCALES INFILE
‘D: /nom_de_fichier/nom_fichier.csv’ INTO TABLE mail FIELDS TERMINATED BY ‘,’ (nom, prénom, adresse électronique, téléphone);

Si les données sont importantes, vous pouvez prendre le café et le charger!

C’est tout ce dont vous avez besoin.

Une autre solution consiste à utiliser l’outil csvsql de la suite csvkit .

Exemple d’utilisation:

 csvsql --db mysql://$user:$password@localhost/$database --insert --tables $tablename $file 

Cet outil peut automatiquement déduire les types de données (comportement par défaut), créer une table et insérer les données dans la table créée. --overwrite option --overwrite peut être utilisée pour supprimer une table si elle existe déjà. Option --insert – pour remplir la table à partir du fichier.

Pour installer la suite

 pip install csvkit 

Prérequirejs: python-dev , libmysqlclient-dev , MySQL-python

 apt-get install python-dev libmysqlclient-dev pip install MySQL-python