1

我尝试通过 JDBC 转换器将 Postresql 数据加载到 Geomesa(带有 Cassandra 数据存储)中。

从形状加载工作正常,所以 Cassandra 和 GeoMesa 设置没问题

接下来我尝试从 PostgreSQL 加载数据

命令:

echo "从 v_gewaspercelen2018 中选择年份、geom、grondgebruik、crop_code、crop_name、fieldid、global_id、面积、周长、geohash" | bin/geomesa-cassandra 摄取 -c 目录 -P cassandraserver:9042 -k agrodatacube -f parcel -C geomesa.converters.parcel -u -p

转换器定义文件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

有人知道这里有什么问题吗?

4

2 回答 2

2

您可以在logs文件夹中检查更详细的错误。但是,乍一看,JDBC 转换器遵循标准结果集编号,这意味着第一个字段是$1(not $0)。此外,您可能需要使用变换函数来变换几何,即geometry($2).

于 2019-04-25T12:52:43.357 回答
0

谢谢埃米利奥,这两个建议都有意义!

  1. 使转换器字段计数从 1 开始
  2. 转换器定义文件内部发生了变化

{名称=“geom”,变换=“$2”}

进入

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

  1. SQL 选择命令应该是:

选择年份,ST_AsText(geom),.... FROM v_gewaspercelen2018

顺便说一句,用户名和密码是连接字符串的一部分(位于文件 geomesa.converters.parcel 中):

连接 = "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, area, perimeter, geohash FROM v_gewaspercelen2018" | bin/geomesa-cassandra 摄取 -c 目录 -P cassandraserver:9042 -k agrodatacube -f parcel -C geomesa.converters.parcel

通过这些更改,它可以工作。

再次感谢!

雨果

于 2019-04-26T13:18:25.057 回答