Ich habe eine nicht normalisierte Ereignistagebuch-CSV von einem Client, den ich in eine MySQL-Tabelle laden möchte, damit ich sie in ein vernünftiges Format umgestalten kann. Ich habe eine Tabelle namens 'CSVImport' erstellt, die ein Feld für jede Spalte der CSV-Datei enthält. Die CSV enthält 99 Spalten, daher war dies an sich schon eine schwierige Aufgabe:
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);
Die Tabelle enthält keine Einschränkungen, und alle Felder enthalten VARCHAR (256) -Werte, mit Ausnahme der Spalten, die Zählwerte (dargestellt durch INT), Ja / Nein (dargestellt durch BIT), Preise (dargestellt durch DECIMAL) und Klappentexte (dargestellt) enthalten. vertreten durch TEXT).
Ich habe versucht, Daten in die Datei zu laden:
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 |
...
Der ganze Tisch ist gefüllt mit NULL
.
Ich denke, das Problem ist, dass die Klappentexte mehr als eine Zeile enthalten und MySQL die Datei so analysiert, als würde jede neue Zeile einer Datenbankzeile entsprechen. Ich kann die Datei problemlos in OpenOffice laden.
Die Datei clientdata.csv enthält 2593 Zeilen und 570 Datensätze. Die erste Zeile enthält Spaltennamen. Ich denke, es ist durch Kommas getrennt, und der Text ist anscheinend durch doppelte Anführungszeichen getrennt.
AKTUALISIEREN:
Lesen Sie im Zweifelsfall das Handbuch: http://dev.mysql.com/doc/refman/5.0/en/load-data.html
Ich habe der LOAD DATA
Aussage, dass OpenOffice intelligent genug war, um daraus zu schließen, einige Informationen hinzugefügt , und jetzt wird die richtige Anzahl von Datensätzen geladen:
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;
Trotzdem gibt es viele vollständige NULL
Datensätze, und keine der geladenen Daten scheint am richtigen Ort zu sein.
quelle
Antworten:
Der Kern Ihres Problems scheint darin zu bestehen, die Spalten in der CSV-Datei mit denen in der Tabelle abzugleichen.
Viele grafische mySQL-Clients haben sehr schöne Importdialoge für solche Dinge.
Mein Favorit für diesen Job ist Windows-basiertes HeidiSQL . Es bietet Ihnen eine grafische Oberfläche zum Erstellen des
LOAD DATA
Befehls. Sie können es später programmgesteuert wiederverwenden.Screenshot: Dialog "Textdatei importieren"
Um das Dialogfeld "Textdatei importieren" zu öffnen, gehen Sie zu
Tools > Import CSV file
:quelle
Verwenden Sie mysqlimport , um eine Tabelle in die Datenbank zu laden:
Ich fand es unter http://chriseiffel.com/everything-linux/how-to-import-a-large-csv-file-to-mysql/
Verwenden Sie, um das Trennzeichen zu einer Registerkarte zu machen
--fields-terminated-by='\t'
quelle
mysqlimport
verwendetLOAD DATA INFILE...
hinter den Kulissen, so ist es so ziemlich das gleiche.LOAD DATA INFILE
müssen Sie eine Tabelle erstellen, bevor Sie sie verwenden könnenmysqlimport
.LOAD DATA INFILE
.--fields-optionally-enclosed-by=\"
und `--fields-entkommen-by = \`Der einfachste Weg, wie ich mehr als 200 Zeilen importiert habe, ist unter dem Befehl im phpmyadmin-SQL-Fenster
Ich habe eine einfache Landestabelle mit zwei Spalten CountryId, CountryName
Hier sind CSV-Daten
Hier ist Befehl:
Beachten Sie eines: Erscheinen Sie niemals in der zweiten Spalte, da sonst der Import gestoppt wird
quelle
LOAD DATA LOCAL INFILE
. Wenn dies den Fehler 1148 "Verwendeter Befehl ist nicht erlaubt" auslöst, können Sie ihn aktivieren, indem Sie MySQL in der Befehlszeile mit ausführen--local-infile
.Ich habe diese Methode verwendet, um mehr als 100.000 Datensätze ( ~ 5 MB ) in 0,046 Sekunden zu importieren
So geht's:
Es ist sehr wichtig, die letzte Zeile einzuschließen, wenn Sie mehr als ein Feld haben, dh normalerweise wird das letzte Feld übersprungen (MySQL 5.6.17).
Angenommen, Sie haben die erste Zeile als Titel für Ihre Felder, möchten Sie möglicherweise auch diese Zeile einfügen
So sieht es aus, wenn Ihre Datei eine Kopfzeile hat.
quelle
(field_1,field_2 , field_3);
Bezieht es sich in dieser Zeile auf die Liste der Spalten in einer CSV-Datei oder in einer Tabelle? dh was sind diese Felder?phpMyAdmin kann den CSV-Import verarbeiten. Hier sind die Schritte:
Bereiten Sie die CSV-Datei so vor, dass die Felder in derselben Reihenfolge wie die MySQL-Tabellenfelder angezeigt werden.
Entfernen Sie die Kopfzeile aus der CSV (falls vorhanden), sodass nur die Daten in der Datei enthalten sind.
Gehen Sie zur Schnittstelle phpMyAdmin.
Wählen Sie die Tabelle im linken Menü.
Klicken Sie oben auf die Schaltfläche Importieren.
Navigieren Sie zur CSV-Datei.
Wählen Sie die Option "CSV using LOAD DATA".
Geben Sie "," in die "Felder abgeschlossen mit" ein.
Geben Sie die Spaltennamen in derselben Reihenfolge ein wie in der Datenbanktabelle.
Klicken Sie auf die Schaltfläche Los und Sie sind fertig.
Dies ist eine Notiz, die ich für meine zukünftige Verwendung vorbereitet und hier geteilt habe, wenn jemand anderes davon profitieren kann.
quelle
NULL
in der CSV automatisch inkrementierende Felder / Spalten festzulegen.Sie können dies beheben, indem Sie die Spalten in Ihrer LOAD DATA-Anweisung auflisten. Aus dem Handbuch :
... in Ihrem Fall müssen Sie die 99 Spalten in der Reihenfolge auflisten, in der sie in der CSV-Datei angezeigt werden.
quelle
Versuchen Sie das, es hat bei mir funktioniert
IGNORE 1 ROWS ignoriert hier die erste Zeile, die die Feldnamen enthält. Beachten Sie, dass Sie für den Dateinamen den absoluten Pfad der Datei eingeben müssen.
quelle
Die MySQL-Befehlszeile ist anfällig für zu viele Probleme beim Import. So geht's:
quelle
Wenn Sie MySQL Workbench (derzeit Version 6.3) verwenden, können Sie dies folgendermaßen tun:
quelle
LOAD DATA INFILE
und gabmysqlimport
("dies wird in dieser Version vonINSERT
Abfrage erstellt und versucht hätte, alles auf einmal zu tun, aber es sieht so aus, als würde dies tatsächlich einmalINSERT
pro Zeile ausgeführt.Ich sehe etwas Seltsames. Sie verwenden für ESCAPING dasselbe Zeichen, das Sie für ENCLOSING verwenden. Der Motor weiß also nicht, was er tun soll, wenn er ein '"' gründet, und ich denke, deshalb scheint nichts am richtigen Ort zu sein. Ich denke, wenn Sie die ESCAPING-Linie entfernen, sollte es großartig laufen. Wie:
Es sei denn, Sie analysieren (manuell, visuell, ...) Ihre CSV und finden heraus, welcher Charakter für die Flucht verwendet wird. Manchmal ist '\'. Aber wenn Sie es nicht haben, verwenden Sie es nicht.
quelle
Eine weitere Lösung besteht darin, das csvsql- Tool aus der erstaunlichen csvkit- Suite zu verwenden.
Anwendungsbeispiel:
Dieses Tool kann automatisch die Datentypen ableiten (Standardverhalten), eine Tabelle erstellen und die Daten in die erstellte Tabelle einfügen.
--overwrite
Option kann verwendet werden, um eine Tabelle zu löschen, falls sie bereits vorhanden ist.--insert
Option - um die Tabelle aus der Datei zu füllen.So installieren Sie die Suite
Voraussetzungen:
python-dev
,libmysqlclient-dev
,MySQL-python
quelle
So importieren Sie CSV-Dateien in SQL-Tabellen
Beispieldatei:
Overseas_trade_index
Daten-CSV-DateiSchritte:
Müssen Tabelle für erstellen
overseas_trade_index
.Sie müssen Spalten erstellen, die sich auf die CSV-Datei beziehen.
SQL-Abfrage:
Müssen Sie MySQL-Datenbank im Terminal verbinden.
Bitte geben Sie diesen Befehl ein, um die CSV-Daten in MySQL-Tabellen zu importieren.
Finden Sie diese Daten des Übersee-Handelsindex auf sqldatabase:
quelle
Wenn Sie einen Windows-Computer mit geladener Excel-Tabelle verwenden, ist das neue mySql-Plugin für Excel phänomenal. Die Leute bei Oracle haben wirklich gute Arbeit mit dieser Software geleistet. Sie können die Datenbankverbindung direkt aus Excel herstellen. Dieses Plugin analysiert Ihre Daten und richtet die Tabellen für Sie in einem Format ein, das mit den Daten übereinstimmt. Ich hatte einige Monster große CSV-Dateien von Daten zu konvertieren. Dieses Tool hat viel Zeit gespart.
http://dev.mysql.com/downloads/windows/excel/
Sie können Aktualisierungen in Excel vornehmen, die online in die Datenbank eingefügt werden. Dies funktionierte außerordentlich gut mit mySql-Dateien, die auf einem äußerst kostengünstigen Shared Hosting von GoDaddy erstellt wurden. (Beachten Sie, dass Sie beim Erstellen der Tabelle bei GoDaddy einige nicht standardmäßige Einstellungen auswählen müssen, um den externen Zugriff auf die Datenbank zu ermöglichen ...)
Mit diesem Plugin haben Sie reine Interaktivität zwischen Ihrer XL-Tabelle und dem Online-MySQL-Datenspeicher.
quelle
Ich benutze MySQL Workbench, um den gleichen Job zu machen.
Hinweis: Überprüfen Sie die Protokolldatei der mysql workbench auf Fehler, indem Sie "tail -f [mysqlworkbenchpath] /log/wb*.log" verwenden.
quelle
Hier ist ein Beispiel für einen Screenshot einer Excel-Datei:
Speichern unter und wählen Sie .csv.
Und Sie haben wie unten gezeigt .csv-Daten-Screenshot, wenn Sie mit Notepad ++ oder einem anderen Notepad öffnen.
Stellen Sie sicher, dass Sie die Kopfzeile entfernen und die Spaltenausrichtung in .csv wie in der MySQL-Tabelle haben. Ersetzen Sie den Ordnernamen durch Ihren Ordnernamen
LOAD DATA LOCAL INFILE
'D: /folder_name/myfilename.csv' IN TABELLE E-Mail-FELDER BEENDET VON ',' (fname, lname, email, phone);
Wenn es sich um Big Data handelt, können Sie Kaffee trinken und laden!.
Das ist alles was du brauchst.
quelle
Falls Sie Intellij https://www.jetbrains.com/datagrip/features/importexport.html verwenden
quelle
PHP-Abfrage zum Importieren einer CSV-Datei in die MySQL-Datenbank
** Beispiel für CSV-Dateidaten **
quelle
quelle