正常な形式にリファクタリングできるように、MySQLテーブルにロードしようとしているクライアントからの非正規化イベント日誌CSVがあります。CSVファイルの列ごとに1つのフィールドを持つ「CSVImport」というテーブルを作成しました。CSVには99列が含まれているため、これ自体は十分に困難な作業でした。
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);
テーブルに制約はなく、カウント(INTで表される)、はい/いいえ(BITで表される)、価格(DECIMALで表される)、およびテキストのぼかし( TEXTで表されます)。
ファイルにデータをロードしようとしました:
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 |
...
テーブル全体がで埋められていNULL
ます。
問題は、テキストのテキストに複数の行が含まれており、MySQLが新しい行を1つのデータベース行に対応するようにファイルを解析していることだと思います。OpenOfficeに問題なくファイルをロードできます。
clientdata.csvファイルには、2593行と570レコードが含まれています。最初の行には列名が含まれています。私はそれがコンマで区切られていると思います、そしてテキストはどうやら二重引用符で区切られています。
更新:
疑問がある場合は、マニュアルを読んでください:http : //dev.mysql.com/doc/refman/5.0/en/load-data.html
LOAD DATA
OpenOfficeは十分に推論できるほどスマートであり、正しい数のレコードが読み込まれるというステートメントに情報を追加しました。
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;
しかし、それでも完全に多くのNULL
レコードがあり、ロードされたデータはどれも正しい場所にないようです。