Bagaimana untuk mengimport fail CSV ke dalam jadual MySQL?
P粉785957729
P粉785957729 2023-10-09 14:59:12
0
2
731

Saya mempunyai CSV log peristiwa yang tidak dinormalkan daripada pelanggan yang saya cuba muatkan ke dalam jadual MySQL supaya ia boleh dibina semula ke dalam format biasa. Saya mencipta jadual yang dipanggil "CSVImport" dengan medan untuk setiap lajur fail CSV. CSV mengandungi 99 lajur, jadi ini adalah tugas yang sukar dengan sendirinya:

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);

Tiada kekangan pada jadual, semua medan mengandungi nilai VARCHAR(256) kecuali kiraan (diwakili oleh INT), ya/tidak (diwakili oleh BIT), harga (diwakili oleh DECIMAL) dan keterangan teks (diwakili oleh TEKS) .

Saya cuba memuatkan data ke dalam fail:

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               | 
...

Seluruh meja penuhNULL.

Saya rasa masalahnya ialah pengenalan teks mengandungi lebih daripada satu baris, dan MySQL sedang menghuraikan fail seolah-olah setiap baris baharu sepadan dengan baris pangkalan data. Saya boleh memuatkan fail ke dalam Open tanpa sebarang masalah.

Fail

clientdata.csv mengandungi 2593 baris dan 570 rekod. Baris pertama mengandungi nama lajur. Saya rasa ia dibatasi koma dan teksnya jelas dibatasi oleh petikan berganda.

Kemas kini:

Jika anda mempunyai sebarang soalan, sila baca manual: http://dev.mysql.com/doc/refman/5.0/en/load-data.html

Saya menambahkan beberapa maklumat pada LOAD DATA pernyataan, cukup bijak untuk membuat kesimpulan, dan kini ia memuatkan bilangan rekod yang betul:

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;

Tetapi masih terdapat banyak NULL rekod sepenuhnya, dan tiada data yang dimuatkan nampaknya berada di tempat yang betul.

P粉785957729
P粉785957729

membalas semua(2)
P粉057869348

Gunakan mysqlimport untuk memuatkan jadual ke dalam pangkalan data: p>

mysqlimport --ignore-lines=1 \
            --fields-terminated-by=, \
            --local -u root \
            -p Database \
             TableName.csv

Saya menemuinya di http://chriseiffel.com/everything-linux/how-to-import-a-large-csv-file-to-mysql/

Untuk menjadikan pemisah sebagai tab, gunakan --fields-termerated-by='t'

P粉210405394

Inti masalah nampaknya memadankan lajur dalam fail CSV dengan lajur dalam jadual.

Ramai pelanggan mySQL grafik mempunyai dialog import yang sangat bagus untuk perkara seperti ini.

Pekerjaan kegemaran saya ialah berasaskan Windows HeidiSQL. Ia memberikan anda antara muka grafik untuk membina LOAD DATA perintah; anda boleh menggunakannya semula secara pemprograman kemudian.

Tangkapan skrin: Dialog "Import fail teks"

Untuk membuka kotak dialog Import Fail Teks, pergi ke 工具 > 导入 CSV 文件:

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan