Импорт пространственных данных из Oracle (12+) в HDFS с использованием NiFi - PullRequest
0 голосов
/ 04 октября 2018

Я пытаюсь перенести данные из базы данных Oracle (12+) с NiFi на HDFS.Процессоры «QueryDatabaseTable» и «ExecuteSQL» не могут обрабатывать тип данных геометрии (SDO_GEOMETRY).

Я получаю сообщение об ошибке "Неизвестный тип SQL 2002, невозможно преобразовать в тип avro"

При альтернативном преобразовании типа данных в длинную строку с помощью "sdo_util.to_wktgeometry ()"функция, кажется невозможнойдля первого процессора, а для второго выдается ошибка: «SDO_UTIL.TO_WKTGEOMETRY () недопустимый символ»

У кого-нибудь есть советы по переносу типов данных Geometry из Oracle (12+) с помощью NiFi?Строка строки достаточно информации от объекта Geometry (на данный момент)

1 Ответ

0 голосов
/ 26 октября 2018

Я полагаю, что NiFi не знает, как обрабатывать объекты любого типа, определенные в реляционных базах данных.И, очевидно, гораздо меньше понимания сложных типов, таких как пространственные типы.Даже если бы он понимал типы объектов, у вас осталось бы что-то сложное в использовании, так как он раскрыл бы внутренности этого типа, и вам потребовался бы глубокий анализ руководств Oracle для декодирования содержимого, чтобы использовать информацию.

Самое простое - это определенно получить пространственные типы в сериализованной строке или двоичной записи.У вас есть выбор между несколькими нотациями и двумя подходами для их извлечения:

Использование методов типа объекта:

Важно: обратите внимание, что необходимо использоватьпсевдоним таблицы для вызова методов объекта!

WKT:

SQL> select c.location.get_wkt() from us_cities c where city='New York';

C.LOCATION.GET_WKT()
-------------------------------------------------------------------------------
POINT (-73.943849 40.6698)

1 row selected.

GML:

SQL> select c.location.get_gml() from us_cities c where city='New York';

C.LOCATION.GET_GML()
-------------------------------------------------------------------------------
<gml:Point srsName="EPSG:4326" xmlns:gml="http://www.opengis.net/gml"><gml:coordinates decimal="." cs="," ts=" ">-73.943849,40.6698 </gml:coordinates></gml:Point>

1 row selected.

GeoJSON:

SQL> select c.location.get_geojson() from us_cities c where city='New York';

C.LOCATION.GET_GEOJSON()
-------------------------------------------------------------------------------
{ "type": "Point", "coordinates": [-73.943849, 40.6698] }

1 row selected.

Использование функций:

WKT

SQL> select sdo_util.to_wktgeometry(location) from us_cities c where city='New York';

SDO_UTIL.TO_WKTGEOMETRY(LOCATION)
-------------------------------------------------------------------------------
POINT (-73.943849 40.6698)

1 row selected.

GML

SQL> select sdo_util.to_gmlgeometry(location) from us_cities c where city='New York';

SDO_UTIL.TO_GMLGEOMETRY(LOCATION)
-------------------------------------------------------------------------------
<gml:Point srsName="EPSG:4326" xmlns:gml="http://www.opengis.net/gml"><gml:coordinates decimal="." cs="," ts=" ">-73.943849,40.6698 </gml:coordinates></gml:Point>

1 row selected.

GeoJSON

SQL> select sdo_util.to_geojson(location) from us_cities c where city='New York';

SDO_UTIL.TO_GEOJSON(LOCATION)
-------------------------------------------------------------------------------
{ "type": "Point", "coordinates": [-73.943849, 40.6698] }

1 row selected.

В этих примерах показаны только точки.Геометрия, конечно, может быть более сложной: линии, многолинии, многоугольники, многоугольники, многоугольники с пустотами.Также 3D-структуры: поверхности и тела ...

Для тех геометрий, которые являются точками, вы можете просто извлечь координаты X и Y прямо из объектов.Снова обратите внимание на использование псевдонимов .

select city, c.location.sdo_point.x longitude, c.location.sdo_point.y latitude 
from us_cities c;

CITY                            LONGITUDE   LATITUDE
------------------------------ ---------- ----------
New York                       -73.943849    40.6698
Los Angeles                     -118.4112  34.112101
....
Sioux Falls                      -96.7301  43.544201
Simi Valley                     -118.7513   34.26305

195 rows selected.

Для других геометрий (линий и т. Д.) Вам необходимо пройти через сериализацию текста.

...