[解決済み] CSVファイルをMySQLのテーブルにインポートするには?
質問内容
クライアントからの非正規化されたイベントダイアリーのCSVがあり、それをMySQLのテーブルにロードして、まともなフォーマットにリファクタリングしようとしています。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で表現)、yes/no(BITで表現)、価格(DECIMALで表現)、テキストぼかし(TEXTで表現)を含む列を除いて、すべてのフィールドがVARCHAR(256)値を保持しています。
ファイルにデータを読み込もうとしました。
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
.
問題は、テキストが2行以上あり、MySQLが新しい行が1つのデータベース行に対応するようにファイルをパースしていることだと思います。OpenOfficeには問題なくファイルを読み込むことができます。
clientdata.csvファイルには2593行、570レコードが含まれています。最初の行はカラム名を含んでいます。カンマ区切りで、テキストはダブルクオートで区切られているようですね。
UPDATE
迷ったら、マニュアルを読もう。 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
のレコードがあり、読み込まれたデータのどれもが正しい場所にないように見えます。
どうすればいいですか?
問題の核心は、CSVファイルのカラムとテーブルのカラムを一致させることにあるようです。
多くのグラフィカルなmySQLクライアントには、このようなことを行うための非常に優れたインポートダイアログがあります。
私のお気に入りは、Windowsベースの
ハイディエスキューエル
. グラフィカルなインターフェースで
LOAD DATA
このコマンドは後でプログラム的に再利用することができます。
スクリーンショット: "テキストファイルのインポート"ダイアログ
テキストファイルのインポート(Import textfile")]ダイアログを開くには
Tools > Import CSV file
:
関連
-
MySQLはこのようなUpdateステートメントを書くべきではありません
-
[解決済み] ユニークなテーブル/エイリアスではない
-
msql クエリでのエラー 'where 節' の不明な列 'yellow fruit'
-
[解決済み] MySQLでコマンドラインを使用してSQLファイルをインポートするにはどうすればよいですか?
-
[解決済み] SQL Server で複数行のテキストを 1 つのテキスト文字列に連結する方法
-
[解決済み] MySQLのAUTO_INCREMENTをリセットする方法
-
[解決済み] MySQLの複数行を1つのフィールドに連結することはできますか?
-
[解決済み] MySQLのクエリ結果をCSV形式で出力するにはどうすればよいですか?
-
[解決済み] MySQLテーブルへの挿入または存在する場合の更新
-
[解決済み] MySQLがCSVデータからNULL値を読み込む
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
MySQLデータベース・インデックスの左端一致の原則
-
mysqlにおけるvarcharの日付比較とソートの実装
-
SQL集計、グループ化、ソート
-
MySQLインストールチュートリアル(Linux版
-
CMakeエラー。ソースディレクトリ "/xxx/mysql-5.6.21" に CMakeLists.txt がないようです。
-
[解決済み] SQLを使用してSUMとSUBTRACTを行うには?
-
[解決済み] INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL JOINの違いは何ですか?[重複しています]。
-
[解決済み] ブーリアン値を格納するために使用するMySQLデータ型
-
[解決済み] MySQLで複数のカラムに一意制約を指定するには?
-
[解決済み】クエリによるMySQLのダンプ