Mysql 加载数据填充和线字符串
我想导入包含以下列的大型CSV文件Mysql 加载数据填充和线字符串,mysql,Mysql,我想导入包含以下列的大型CSV文件 SegmentId;Lengthmm;RoadClass;OptimalSpeedKph;SpeedLimitKph;WKT 1;7329;1;120;70;LINESTRING (28.97845 41.067332,28.978537 41.067332) ... 我正在使用加载数据填充。问题是WKT是一个LINESTRING。 实际上,如果我使用以下查询添加一个条目: INSERT INTO FCD VALUES (3,1,1,1,1,LineStr
SegmentId;Lengthmm;RoadClass;OptimalSpeedKph;SpeedLimitKph;WKT
1;7329;1;120;70;LINESTRING (28.97845 41.067332,28.978537 41.067332)
...
我正在使用加载数据填充。问题是WKT
是一个LINESTRING。
实际上,如果我使用以下查询添加一个条目:
INSERT INTO FCD
VALUES (3,1,1,1,1,LineStringFromText( 'LINESTRING (28.947971 41.050192,28.94754 41.049887)'));
它被插入到表中
但是,我不知道如何在LOAD DATA INFILE命令中访问WKT参数并对其进行转换
LOAD DATA LOCAL INFILE '/home/username/userfile.csv'
INTO TABLE `FCD`
FIELDS TERMINATED BY ';'
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 LINES
它给了我以下错误:
ERROR 1416 (22003): Cannot get geometry object from data you send to the GEOMETRY field
关于创建一个暂存表,其中WKT是一个字符串。然后跑
INSERT INTO FCD
SELECT SegmentId, Lengthmm, RoadClass, OptimalSpeedKph, SpeedLimitKph, LineStringFromText (WKT)
FROM FCD_staging;
您可以使用变量从WKT列加载值,并使用语句的
SET
子句在表达式中使用变量值并将其分配给列:
LOAD DATA LOCAL INFILE '/home/username/userfile.csv'
INTO TABLE `FCD`
FIELDS TERMINATED BY ';'
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 LINES
(SegmentId, Lengthmm, RoadClass, OptimalSpeedKph, SpeedLimitKph, @WKT)
SET WKT = LineStringFromText(@WKT)
我假设CSV文件的第一行包含表列的名称。备注列表中的最后一个字段是
@WKT
,它是一个变量,然后SET
子句将变量@WKT
的值用于表达式,然后将其分配给列WKT,我也将尝试您的解决方案。现在我正在尝试前面的答案,但我的文件包含1200万个条目。只要完成了,我就回答