3

我正在尝试使用LOAD DATA LOCAL INFILE. 数据库表中指定的某些数据元素与数据文件(多个 csv 文件)中的列名不同。例如:数据库有一个列“location_affected”,数据文件有一个相同数据元素的列名“location_name”。此外,数据文件的列数和列名都不相同。在数据库表中指定的约 200 个数据元素中,每个数据文件可能包含大约 30-40 列。谁能建议如何在 db 表和 csv 文件之间映射列名?我尝试了以下方法,但它引发了错误:“location_name 不存在”

LOAD DATA LOCAL INFILE 'pathtothefile' INTO TABLE tablename 
 FIELDS TERMINATED BY ',' ENCLOSED BY '"'
 LINES TERMINATED BY '\r'
 IGNORE 1 LINES 
(col1,col2,col3..............)
SET location_name = location_affected ;
4

3 回答 3

2

您可以通过将列分配给虚拟变量来跳过列:

LOAD DATA LOCAL INFILE 'pathtothefile' INTO TABLE tablename 
FIELDS TERMINATED BY ',' ENCLOSED BY '"'
LINES TERMINATED BY '\r'
IGNORE 1 LINES 
(col1,col2,@skipme,@skipme,col3..............);

http://dev.mysql.com/doc/refman/5.1/en/load-data.html

于 2012-11-14T04:11:03.167 回答
1

映射在您的LOAD DATA语句中定义。如果您想重新排序列,您应该在那里调整它们以匹配 CSV 文件中存在的任何内容。

IGNORE 1 LINES部分跳过了典型的 CSV 标题标签。导入过程不使用这些。

在这种情况下,SET location_name=location_affected没有任何意义。如果要导入location_name列,请在定义中指定。

于 2012-11-14T03:55:54.067 回答
-1

映射在您的 LOAD DATA 语句中定义。如果您想重新排序列,您应该在那里调整它们以匹配 CSV 文件中存在的任何内容。

IGNORE 1 LINES 部分跳过了典型的 CSV 标题标签。导入过程不使用这些。

在这种情况下, SET location_name=location_affected 没有意义。如果要导入 location_name 列,请在定义中指定

于 2013-05-15T19:10:46.187 回答