如何将大型csv文件中的某些行导入到MySQL表中。 我知道如何导入所有的数据,但我的问题是我的CSV文件太大,我不需要它拥有的所有数据。从CSV到MySQL的选择性导入
我只想导入“COLUMN_X”具有这些值中的任何一个的行[VALID1,VALID2,VALID3] 对于column_x具有无效值的所有其他行都应该被忽略。
任何人都可以帮助我做到这一点? 非常感谢。
如何将大型csv文件中的某些行导入到MySQL表中。 我知道如何导入所有的数据,但我的问题是我的CSV文件太大,我不需要它拥有的所有数据。从CSV到MySQL的选择性导入
我只想导入“COLUMN_X”具有这些值中的任何一个的行[VALID1,VALID2,VALID3] 对于column_x具有无效值的所有其他行都应该被忽略。
任何人都可以帮助我做到这一点? 非常感谢。
您可以使用类似:
LOAD DATA INFILE 'myfile.csv'
INTO mytable
(column1, @dummy, @dummy, column2, column3)
这将仅第1,第4,第5和列加载到数据库中。但是你需要知道你的“好”列在哪个位置提前。
解决方案:
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
;
不能用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 'filename' IGNORE
INTO TABLE `table` (field1, field2, @pk, field3, @columnx)
SET pk = IF (@columnx IN ('VALID1', 'VALID2', 'VALID3'), NULL, 'key'),
COLUMN_X = @columnx
IGNORE
如果重复键在CSV中忽略行。(field1, field2, @pk, field3, @columnx)
是CSV列到值的映射。具体做法是:在CVS的第一场进入field1
列中,CVS的第二场进入field2
列中,CSV的字段thirs进入可变@pk
等pk =
设置命名pk
到任何结果列=
之后的表达式是。在这种情况下,如果在CSV的第五列中遇到其中一个有效值,它会将列pk
设置为NULL
。否则,它设置该列'key'
这个工作,如果pk
是持有主键列,该表已经与'key'
作为主键与主键设置为auto_increment
列的记录。