spark可以将hive的数据直接同步至pg的表中,但是如果想让一个geometry格式的字符串同步至pg的geometry类型的字段中,是无法直接插入的,
会抛出想要一个geometry类型但是给了varchar类型的错误
尝试了如下几种方法:
①将geometryJSON格式的字符串变为WKT格式的字符串插入
这么做的原因是在pg数据库手动插入数据
例如:
insert into table (geometry) values(‘Point (112.113232 34.342344)’)
是可以直接插入到geometry字段且自动转为WKB格式,
但是在通过spark插入WKT格式还是报错,即使我看了spark底层也是拼接成
insert into table (geometry) values(‘Point (112.113232 34.342344)’)
可是还是无法插入
②在第一种无法实现的情况下,选择使用geospark来完成,通过导入geospark的jar包,使用st_geometryFromWKT函数将转为WKT格式的字符串转为geometry类型,想着这下字段为geometry格式了总能插入到Pg数据库中了吧,结果还真插入不进去,因为spark.write.jdbc通过jdbc方法去写入的时候jdbc底层并不支持geometry对象
③在前面两种方法都无法实现的情况下,转换思路,既然无法插入,那就先插入到geometry字段为varchar类型的中间表中,再通过
insert into table2 select * from mid table1的方法转一下来解决,结果报出varchar类型无法转换为geometry类型,无语
④经过不断尝试,最终通过直接连接pg数据库辅助解决