J'ai un journal d'événements CSV non normalisé d'un client que j'essaie de charger dans une table MySQL afin de pouvoir le refactoriser dans un format sain. J'ai créé une table appelée «CSVImport» qui a un champ pour chaque colonne du fichier CSV. Le CSV contient 99 colonnes, donc c'é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'est sur la table, et tous les champs contiennent des valeurs VARCHAR (256), à l'exception des colonnes qui contiennent les nombres (représentés par INT), oui / non (représentés par BIT), les prix (représentés par DECIMAL) et les textes textuels ( 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 de NULL
.
Je pense que le problème est que les textes de texte contiennent plus d'une ligne, et MySQL analyse le fichier comme si chaque nouvelle ligne correspondait à une ligne de base de données. 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 les noms des colonnes. Je pense qu'il est délimité par des virgules, et le texte est apparemment délimité par des guillemets doubles.
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
déclaration selon laquelle OpenOffice était suffisamment 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 encore beaucoup d' NULL
enregistrements complets , et aucune des données chargées ne semble être au bon endroit.
la source
Réponses:
Le cœur de votre problème semble correspondre aux colonnes du fichier CSV à celles du tableau.
De nombreux clients graphiques mySQL ont de très belles boîtes de dialogue d'importation pour ce genre de choses.
Mon préféré pour le travail est HeidiSQL basé sur Windows . Il vous donne une interface graphique pour construire la
LOAD DATA
commande; vous pouvez le réutiliser par programme plus tard.Capture d'écran: Boîte de dialogue "Importer un fichier texte"
Pour ouvrir la boîte de dialogue Importer un fichier texte ", accédez à
Tools > Import CSV file
:la source
Utilisez mysqlimport pour charger une table dans la base de données:
Je l'ai trouvé sur http://chriseiffel.com/everything-linux/how-to-import-a-large-csv-file-to-mysql/
Pour faire du délimiteur un onglet, utilisez
--fields-terminated-by='\t'
la source
mysqlimport
utiliseLOAD DATA INFILE...
dans les coulisses, donc c'est à peu près la même chose.LOAD DATA INFILE
, vous devez créer une table avant de pouvoir l'utilisermysqlimport
.LOAD DATA INFILE
.--fields-optionally-enclosed-by=\"
et `--fields-escaped-by = \`La manière la plus simple dont j'ai importé plus de 200 lignes est la commande ci-dessous dans la fenêtre sql de phpmyadmin
J'ai une simple table de pays avec deux colonnes CountryId, CountryName
voici les données .csv
voici la commande:
Gardez une chose à l'esprit, n'apparaissez jamais dans la deuxième colonne, sinon votre importation s'arrêtera
la source
LOAD DATA LOCAL INFILE
. Si cela génère une erreur 1148 "la commande utilisée n'est pas autorisée", vous pouvez l'activer en exécutant mysql sur la ligne de commande avec--local-infile
.J'ai utilisé cette méthode pour importer plus de 100 Ko d' enregistrements ( ~ 5 Mo ) en 0,046 s
Voici comment procéder:
Il est très important d'inclure la dernière ligne, si vous avez plus d'un champ c'est-à-dire que normalement il saute le dernier champ (MySQL 5.6.17)
Ensuite, en supposant que vous avez la première ligne comme titre pour vos champs, vous souhaiterez peut-être également inclure cette ligne
Voici à quoi cela ressemble si votre fichier a une ligne d'en-tête.
la source
(field_1,field_2 , field_3);
fait-il référence à la liste des colonnes dans un fichier .csv ou dans une table? c'est-à-dire, quels sont ces domaines?phpMyAdmin peut gérer l'importation CSV. Voici les étapes:
Préparez le fichier CSV pour que les champs soient dans le même ordre que les champs de la table MySQL.
Supprimez la ligne d'en-tête du CSV (le cas échéant), de sorte que seules les données se trouvent dans le fichier.
Accédez à l'interface phpMyAdmin.
Sélectionnez le tableau 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 base de données.
Cliquez sur le bouton OK et vous avez terminé.
Ceci est une note que j'ai préparée pour mon utilisation future et que je partage ici si quelqu'un d'autre peut en bénéficier.
la source
NULL
dans le CSV pour tous les champs / colonnes à incrémentation automatique.Vous pouvez résoudre ce problème en répertoriant les colonnes de votre instruction LOAD DATA. Du manuel :
... dans votre cas, vous devez répertorier les 99 colonnes dans l'ordre dans lequel elles apparaissent dans le fichier csv.
la source
Essayez ça, ça a marché pour moi
IGNORE 1 ROWS ignore ici la première ligne qui contient les noms de champs. Notez que pour le nom de fichier, vous devez taper le chemin absolu du fichier.
la source
La ligne de commande mysql est sujette à trop de problèmes lors de l'importation. Voici comment procéder:
la source
Si vous utilisez MySQL Workbench (actuellement la version 6.3), vous pouvez le faire en:
la source
LOAD DATA INFILE
etmysqlimport
("ceci n'est pas pris en charge sur cette version de mysql")INSERT
requête massive et essayé de tout faire en même temps, mais il semble que le faire de cette façon s'exécute en fait une foisINSERT
par ligne.Je vois quelque chose d'étrange. Vous utilisez pour ESCAPING le même caractère que vous utilisez pour ENCLOSING. Donc, le moteur ne sait pas quoi faire quand il trouve un '"' et je pense que c'est pourquoi rien ne semble être au bon endroit. Je pense que si vous supprimez la ligne de ESCAPING, devrait fonctionner très bien. Comme:
À moins d'analyser (manuellement, visuellement, ...) votre CSV et de trouver quel personnage utilise pour s'échapper. Est parfois «\». Mais si vous ne l'avez pas, ne l'utilisez pas.
la source
Encore une autre solution consiste à utiliser l' outil csvsql de l'incroyable suite csvkit .
Exemple d'utilisation:
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
L'option peut être utilisée pour supprimer la table si elle existe déjà.--insert
option - pour remplir le tableau à partir du fichier.Pour installer la suite
Pré - requis:
python-dev
,libmysqlclient-dev
,MySQL-python
la source
Comment importer des fichiers CSV dans des tables SQL
Fichier d'exemple: fichier
Overseas_trade_index
CSV de donnéesPas:
Besoin de créer une table pour
overseas_trade_index
.Besoin de créer des colonnes liées au fichier csv.
Requête SQL:
Besoin de connecter la base de données mysql dans le terminal.
Veuillez entrer cette commande pour importer les données csv dans les tables mysql.
Trouvez ces données d'index du commerce extérieur sur sqldatabase:
la source
Si vous utilisez une machine Windows avec une feuille de calcul Excel chargée, le nouveau plugin mySql pour Excel est phénoménal. Les gens chez Oracle ont vraiment fait du bon travail sur ce logiciel. Vous pouvez établir la connexion à la base de données directement depuis Excel. Ce plugin analysera vos données et configurera les tables pour vous dans un format cohérent avec les données. J'avais quelques gros fichiers CSV de données à 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 alimenteront la base de données en ligne. Cela a très bien fonctionné avec les fichiers mySql créés sur un hébergement partagé GoDaddy ultra peu coûteux. (Notez que lorsque vous créez la table sur GoDaddy, vous devez sélectionner certains paramètres hors standard pour permettre l'accès hors site à la base de données ...)
Avec ce plugin, vous avez une interactivité pure entre votre feuille de calcul XL et le stockage de données mySql en ligne.
la source
J'utilise mysql workbench pour faire le même travail.
Remarque: jetez un œil au fichier journal de mysql workbench pour toute erreur en utilisant "tail -f [mysqlworkbenchpath] /log/wb*.log"
la source
Voici un exemple de capture d'écran du fichier Excel:
Enregistrez sous et choisissez .csv.
Et vous aurez comme illustré ci-dessous une capture d'écran de données .csv si vous ouvrez en utilisant le bloc-notes ++ ou tout autre bloc-notes.
Assurez-vous de supprimer l'en-tête et d'aligner les colonnes dans .csv comme dans le tableau mysql. Remplacez nom_dossier par le nom de votre dossier
LOAD DATA LOCAL INFILE
'D: /folder_name/myfilename.csv' INTO TABLE mail FIELDS TERMINATED BY ',' (fname, lname, email, phone);
Si le big data, vous pouvez prendre du café et le charger!.
C'est tout ce dont vous avez besoin.
la source
Si vous utilisez Intellij https://www.jetbrains.com/datagrip/features/importexport.html
la source
Requête PHP pour importer le fichier csv dans la base de données mysql
** Exemple de données de fichier CSV **
la source
la source