Как загрузить данные PostgreSQL в GeoMesa (с хранилищем данных Cassandra)? - PullRequest
1 голос
/ 25 апреля 2019

Я попытался загрузить данные Postresql в Geomesa (с хранилищем данных Cassandra) с помощью JDBC Converter.

Загрузка из фигуры работает нормально, поэтому с настройками Cassandra и GeoMesa все в порядке

ДалееЯ пытался загрузить данные из PostgreSQL

Команда:

echo "ВЫБЕРИТЕ год, geom, grondgebruik, crop_code, crop_name, fieldid, global_id, площадь, периметр, геохэш FROMv_gewaspercelen2018 "|bin / geomesa-cassandra ingest -c каталог -P cassandraserver: 9042 -k agrodatacube -f посылка -C geomesa.converters.parcel -u -p * 101 * *

Файл определения конвертера geomesa.converters.parcel выглядит так:

geomesa.converters.parcel = {

type = "jdbc"

connection = "dbc:postgresql://postgresserver:5432/agrodatacube"

id-field="toString($5)"

fields = [

    { name = "fieldid",    transform = "$5"        }

    { name = "global_id",    transform = "$6"        }

    { name = "year",    transform = "$0"         }

    { name = "area",  transform = "$7"        }

    { name = "perimeter",  transform = "$8"         }

    { name = "grondgebruik",   transform = "$2"      }

    { name = "crop_code",    transform = "$3"     }

    { name = "crop_name",   transform = "$4"       }

    { name = "geohash",   transform = "$9"     }

    { name = "geom",   transform = "$1"      }

]
}

Вывод geomesa:

INFO  Schema 'parcel' exists

INFO  Running ingestion in local mode

INFO  Ingesting from stdin with 1 thread
[                                                         ]   0% complete 0 i[                                                            ]   0% complete 0 ingested 0 failed in 00:00:01

ERROR Fatal error running local ingest worker on <stdin>

[                                                            ]   0% complete 0 i[                                                            ]   0% complete 0 ingested 0 failed in 00:00:01

INFO  Local ingestion complete in 00:00:01

INFO  Ingested 0 features with no failures for file: <stdin>

WARN  Some files caused errors, ingest counts may not be accurate

У кого-то есть подсказка, что здесь не так?

Ответы [ 2 ]

2 голосов
/ 25 апреля 2019

Вы можете проверить в папке logs более подробные ошибки. Однако, на первый взгляд, преобразователь JDBC следует стандартной нумерации результирующего набора , что означает, что первое поле - $1 (не $0). Кроме того, вам может потребоваться преобразовать вашу геометрию с помощью функции преобразования, т.е. geometry($2).

0 голосов
/ 26 апреля 2019

Спасибо, Эмилио, оба предложения оправдались!

  1. Сделал так, чтобы счетчик полей конвертера начинался с 1
  2. Внутри файла определения конвертера изменено

{name = "geom", transform = "$ 2"}

в

{name = "geom", transform = "geometry ($ 2)"}

Команда SQL Select должна быть:

SELECT год, ST_AsText (geom) , .... FROM v_gewaspercelen2018

Кстати, имя пользователя и пароль являются частью строки подключения (которая находится внутри файла geomesa.converters.parcel):

connection = "dbc: postgresql: // postgresserver: 5432 / agrodatacube? user = username & password = password "

Таким образом, флаги -u и -p не отображаются в последней команде:

echo" SELECT year, ST_AsText (geom), grondgebruik, crop_code, crop_name, fieldid, global_id, площадь, периметр, геохеш FROM v_gewaspercelen2018 "|bin / geomesa-cassandra ingest -c каталог -P cassandraserver: 9042 -k agrodatacube -f посылка -C geomesa.converters.parcel

С этими изменениями он работает.

Еще раз спасибо!

Хьюго

...