Импорт данных геометрии в MySQL с помощью LOAD DATA LOCAL INFILE - PullRequest
0 голосов
/ 19 декабря 2018

Я пытаюсь импортировать данные CSV в MySQL, используя синтаксис LOAD DATA LOCAL INFILE.Обычно это довольно простая задача, но в этом случае данные включают в себя геометрическое поле, которое сбивает меня с толку.

Когда я пытаюсь запустить импорт, я получаю такие ошибки:

SQLSTATE [HY000]: общая ошибка: 4079 Недопустимый тип данных параметра longblob для операции 'st_geometryfromwkb'

Записи в моем CSV-файле выглядят следующим образом:

'Somewhere', -0.574823, 51.150771, '0x0101000000000000000000F03F000000000000F0BF'

Итак, у меня есть имя местоположения, координаты широты и долготы и поле геометрии в двоичном формате WKB.(приведенный выше пример представляет собой простую геометрию, которая переводится в POINT(1,1); реальные данные имеют сложные многоугольники, но содержимое не имеет значения; проблема с этим простым примером та же).

Моя таблица выглядиткак это:

CREATE TABLE IF NOT EXISTS `mapping` (
  `id` int AUTO_INCREMENT PRIMARY KEY,
  `location` varchar(80) DEFAULT NULL,
  `longitude` double DEFAULT NULL,
  `latitude` double DEFAULT NULL,
  `geom` geometry NOT NULL,
  INDEX mapping_by_location (location),
  SPATIAL KEY `mapping_by_geom` (`geom`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

И мой запрос на импорт выглядит так:

LOAD DATA LOCAL INFILE '{$file}'
REPLACE INTO TABLE `mapping`
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '\"'
LINES TERMINATED BY '\n'
(@col1, @col2, @col3, @col4)
SET
`location` = @col1,
`latitude` = @col2,
`longitude` = @col3,
`geom` = GeomFromWKB(@col4);

Как уже говорилось, с этим запросом на импорт я получаю ошибку Illegal parameter data type, показанную в верхней частиэтот вопрос.

Однако запрос работает, если я заменяю последнюю строку жестко закодированной геометрической строкой, например так:

`geom` = GeomFromWKB(0x0101000000000000000000F03F000000000000F0BF);

Очевидно, что это не очень хорошо, так как янужно поле для загрузки из CVS, а не жестко закодированное значение в запросе, но оно работает, в то время как загрузка того же значения из CSV в @col4 не делает.

Я пробовал нескольковарианты этого запроса - с вызовом GeomFromWKB() и без него, с обозначениями X'...' и 0x... для шестнадцатеричного значения;кажется, ничего не работает.

Кто-нибудь может мне помочь, пожалуйста?

...