[英]Selective Import from CSV to MySQL
我如何將某些行從大型csv文件導入到MySQL表中。 我知道如何導入所有數據,但是我的問題是我的csv文件太大,我不需要它具有的所有數據。
我只想導入其中“ COLUMN_X”具有以下兩個值之一的行:[VALID1,VALID2,VALID3]對於column_x,所有其他具有無效值的行都應忽略。
有人可以幫我嗎? 非常感謝。
您無法使用LOAD DATA INFILE過濾掉行,因此可以通過預處理CSV文件來過濾掉這些行,或者將數據加載到臨時表中並將相關行插入到主表中,例如:
CREATE TEMP TABLE import LIKE my_main_table;
LOAD DATA LOCAL INFILE 'myfile.csv' into import;
INSERT INTO my_main_table SELECT * FROM import
WHERE column_x IN(VALID1, VALID2, VALID3)
您可以使用類似:
LOAD DATA INFILE 'myfile.csv'
INTO mytable
(column1, @dummy, @dummy, column2, column3)
它將僅將第1、4和5列加載到數據庫中。 但是您需要提前知道“好”列的位置。
LOAD DATA INFILE 'filename' IGNORE
INTO TABLE `table` (field1, field2, @pk, field3, @columnx)
SET pk = IF (@columnx IN ('VALID1', 'VALID2', 'VALID3'), NULL, 'key'),
COLUMN_X = @columnx
IGNORE
忽略行。 (field1, field2, @pk, field3, @columnx)
是CSV列到值的映射。 具體來說:CVS的第一個字段進入列field1
,CVS的第二個字段進入列field2
,CSV的第三字段進入變量@pk
等。 pk =
將名為pk
的列設置為=
后面的表達式的結果。 在這種情況下,如果在CSV的第五列中遇到有效值之一,則它將pk
列設置為NULL
。 否則,它將該列設置為'key'
如果pk
是保存主鍵的列,該表已經具有以'key'
作為主鍵的記錄,並且具有主鍵的列設置為auto_increment
。
從注釋到mysql文檔的解決方案:
CREATE TABLE your_table ( .....)
PARTITION BY LIST (COLUMN_X)
(
PARTITION main VALUE IN (VALID1, VALID2, VALID3)
);
LOAD DATA INFILE 'your_file.csv' IGNORE INTO your_table .....
如果需要將數據追加到現有表中,則可以創建一個新的臨時表並將數據導入到該表中,如上所述,然后將其INSERT INTO old_table SELECT * FROM your_table
;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.