2010-09-21 3 views
2

У меня есть база данных mysql, которую я пытаюсь заполнить из текстового файла. Содержимое моего файла выглядеть (как только некоторые примеры. Есть тысячи строк)MySQL Bulk Insert of Geometry fields

1:GeomFromText('Polygon(0 0, 1 1, 2 2, 0 0)') 
2:GeomFromText('Polygon(0 0, 1 2, 2 2, 0 0)') 

В моей схеме, первое поле представляет собой целое число, а второй является ГЕОМЕТРИЯ

Я стараюсь, чтобы загрузить данные

LOAD DATA LOCAL INFILE 'myfile.txt' INTO TABLE `testDb`.`testTable` FIELDS TERMINATED BY ':' LINES TERMINATED BY '\n' 

И я получаю ошибку

Error Code 1416 Cannot get geometry object from data you send to the GEOMETRY field 

Если я пытаюсь сделать индивидуальный вкладыш, как:

INSERT INTO TABLE testTable(id,region) VALUES (1,GeomFromText('Polygon(0 0, 1 1, 2 2, 0 0)')) 

Он работает без проблем. Однако это очень неэффективно для большого количества вставок. Кто-нибудь знает, почему массовая загрузка бросает эту ошибку?

спасибо, Джефф

+0

Почему бы вам не написать очень простой скрипт в bash или php или что-то, что будет выполнять все вставки при просмотре файла. Даже AWK мог бы сделать это достаточно хорошо, я бы подумал. – Scott

+0

Это несколько сотен тысяч вставок, что очень медленно в терминах баз данных. –

+0

@Scott. на самом деле были некоторые другие замедления. теперь вставка с циклом занимает всего около 4 минут, так что это работает для нашего случая. Благодарю. –

ответ

4

Массовая вставка не обрабатывает операторы SQL, он просто помещает значения в БД. Это означает, что GeomFromText ('Polygon (0 0, 1 1, 2 2, 0 0)') интерпретируется как просто строковое значение, которое не является объектом Geometry и, следовательно, не может быть вставлено в столбец Geometry.

Вы должны установить функцию, которая называется в каждой строке вставки, как показано ниже, где выделенный текстobj_id и obj_geo имена столбцов:

LOAD DATA INFILE 'c:\myFile.txt' 
INTO TABLE `tbl_myTable` 
(@var1, @var2) 
SET 
obj_id = @var1, 
obj_geo = GeomFromText(@var2); 
+0

Я пытаюсь создать csv из отдельной программы с MULTIPOLYGONS, и когда я ее импортирую, он генерирует NULL. Можете ли вы привести пример простой линии csv? – jimkont

+0

Вероятно, вам нужно использовать правильный конструктор для MySQL и MULTIPOLYGONS. Ознакомьтесь с MySQLdocs ([link] (http://dev.mysql.com/doc/refman/5.0/en/gis-class-multipolygon.html)) для этого объекта. Вам нужно будет адаптировать приведенный выше пример к этому типу и убедиться, что он хранится в столбце «Геометрия». –