Ich habe eine nicht normalisierte Ereignisprotokoll-CSV-Datei von einem Client, die ich in eine MySQL-Tabelle laden möchte, damit sie in ein normales Format rekonstruiert werden kann. Ich habe eine Tabelle namens „CSVImport“ mit einem Feld für jede Spalte der CSV-Datei erstellt. Die CSV-Datei enthält 99 Spalten, daher ist dies an sich schon eine gewaltige 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);
Es gibt keine Einschränkungen für die Tabelle, alle Felder enthalten VARCHAR(256)-Werte außer count (dargestellt durch INT), Ja/Nein (dargestellt durch BIT), Preis (dargestellt durch DECIMAL) und Textbeschreibung (dargestellt durch TEXT) .
Ich habe versucht, die Daten in eine 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ülltNULL
.
Ich denke, das Problem besteht darin, dass die Texteinleitung mehr als eine Zeile enthält und MySQL die Datei so analysiert, als ob jede neue Zeile einer Datenbankzeile entspricht. Ich kann die Datei problemlos in Open laden.
Die Dateiclientdata.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 offensichtlich durch doppelte Anführungszeichen getrennt.
Update:
Wenn Sie Fragen haben, lesen Sie bitte das Handbuch: http://dev.mysql.com/doc/refman/5.0/en/load-data.html
Ich habe der LOAD DATA
-Anweisung einige Informationen hinzugefügt, die intelligent genug sind, um darauf schließen zu können, und jetzt wird die richtige Anzahl an 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;
Aber es gibt immer noch viele vollständige NULL
Datensätze und keine der geladenen Daten scheint am richtigen Ort zu sein.
使用mysqlimport将表加载到数据库中: p>
我在 http 找到它://chriseiffel.com/everything-linux/how-to-import-a-large-csv-file-to-mysql/
要使分隔符成为制表符,请使用
--fields-termerated-by='\t'
问题的核心似乎是将 CSV 文件中的列与表中的列进行匹配。
许多图形化的 mySQL 客户端对于此类事情都有非常好的导入对话框。
我最喜欢的工作是基于 Windows 的 HeidiSQL。它为您提供了一个图形界面来构建
LOAD DATA
命令;您可以稍后以编程方式重复使用它。屏幕截图:“导入文本文件”对话框
要打开“导入文本文件”对话框,请转至
工具 > 导入 CSV 文件
: