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.
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
:
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
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:
Préparez le fichier CSV pour avoir les champs dans le même ordre que les champs de la table MySQL.
Supprimez la ligne d’en-tête du fichier CSV (le cas échéant), afin que seules les données figurent dans le fichier.
Accédez à l’interface phpMyAdmin.
Sélectionnez la table dans le menu de gauche.
Cliquez sur le bouton d’importation en haut.
Accédez au fichier CSV.
Sélectionnez l’option “CSV utilisant LOAD DATA”.
Entrez “,” dans les “champs terminés par”.
Entrez les noms de colonne dans le même ordre que dans la table de firebase database.
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:
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:
Désavantages
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:
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,ChristopherKGritton@inbound.plus Brandon Wilson,541-309-5149,BrandonMWilson@inbound.plus Craig White,516-795-8065,CraigJWhite@inbound.plus David Whitney,713-214-3966,DavidCWhitney@inbound.plus
Voici un exemple de capture d’écran du fichier Excel:
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.
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.
pip install csvkit
Prérequirejs: python-dev
, libmysqlclient-dev
, MySQL-python
apt-get install python-dev libmysqlclient-dev pip install MySQL-python