gpt4 book ai didi

mysql - 在MYSQL中导入海量数据集csv

转载 作者:行者123 更新时间:2023-11-29 00:10:48 25 4
gpt4 key购买 nike

我正在尝试从一个包含 900000 行的 ~400MB 的 csv 文件中导入一个巨大的数据集。这个文件有两个关系表的信息。例如:

["primary_key","name","lastname","phone,"work_id","work_name"]

如果需要,我必须检查每一行是否存在用于插入或更新的主键,我还需要验证工作,因为新的工作可以出现在这个数据集中。

我的 person 表比 csv 文件有更多的列,所以我不能用 mysqlimport 替换该行。

关于如何使用它有什么想法吗?

最佳答案

Please read the documentation for LOAD DATA INFILE ;它是加载数据的好选择,即使是非常大的文件。引自 Reference manual: Speed of insert statements :

When loading a table from a text file, use LOAD DATA INFILE. This is usually 20 times faster than using INSERT statements

假设你的表比 .csv 文件的列多,那么你必须写这样的东西:

load data local infile 'path/to/your/file.csv'
into table yourTable
fields terminated by ',' optionally enclosed by '"' lines terminated by '\n'
ignore 1 lines -- if it has column headers
(col1, col2, col3, ...) -- The matching column list goes here

参见 my own question on the subject and its answer .

此外,如果您需要更快的插入,您可以:

  • 忽略外键约束,使用SET foreign_key_checks = 0;在执行load data之前,和/或
  • 在执行加载数据之前使用alter table yourTable disable keys;禁用表的索引,然后使用alter table yourTable enable keys;

未经测试: 如果您的 .csv 文件的列数多于您的表格,我认为您可以将“超出”的列分配给临时变量的文件:

load data local infile 'path/to/your/file.csv'
into table yourTable
fields terminated by ',' optionally enclosed by '"' lines terminated by '\n'
ignore 1 lines -- if it has column headers
(col1, col2, col3, @dummyVar1, @dummyVar2, col4) -- The '@dummyVarX` variables
-- are simply place-holders for
-- columns in the .csv file that
-- don't match the columns in
-- your table

关于mysql - 在MYSQL中导入海量数据集csv,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25190077/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com