我想导入包含以下列的大型CSV文件
SegmentId;Lengthmm;RoadClass;OptimalSpeedKph;SpeedLimitKph;WKT
1;7329;1;120;70;LINESTRING (28.97845 41.067332,28.978537 41.067332)
...
我正在使用LOAD DATA INFILE。问题是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
关于
答案 0 :(得分:3)
您可以使用变量从WKT列加载值,并使用LOAD DATA INFILE
语句的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
。
答案 1 :(得分:0)
创建一个临时表,其中WKT是一个字符串。然后运行
INSERT INTO FCD
SELECT SegmentId, Lengthmm, RoadClass, OptimalSpeedKph, SpeedLimitKph, LineStringFromText (WKT)
FROM FCD_staging;