Я полагаю, что 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.
Для других геометрий (линий и т. Д.) Вам необходимо пройти через сериализацию текста.