问题描述
我在使用 JDBC 将 wkt 格式数据插入 geography 列时遇到错误。
我使用的代码是
private static final String QUERY_SNowFLAKE = "INSERT INTO %s " +
"(GEOM_AS_WKB,GEOM_AS_WKT,GEOID,NAMELSAD,TRACTCE,BLKGRPCE,INSIDE_CENTROID_LATITUDE," +
"INSIDE_CENTROID_LONGITUDE,AREA_SQUAREMILES,X_MIN,X_MAX,Y_MIN,Y_MAX,PART_COUNT,HOLE_COUNT,STATEFP," +
"COUNTYFP,STusps,STATE,COUNTY,VINTAGE,GEOM) VALUES (?,?," +
"?,ST_GEOGRAPHYFROMWKT(?))";
preparedStatementCENSUS_BLOCK_GROUP_GEOGRAPHY.setString(22,censusBlockGroupGeographyModel.getTheGeomText());
我遇到的错误
无效表达式 [IFF(CAST(PARSE_WKT(?) AS VARIANT) IS NULL,null,OBJECT_CONSTRUCT('_shape',CAST(PARSE_WKT(?) AS VARIANT),'version',1,'has_internal',TRUE,'内部',GEOGRAPHY_COmpuTE_INTERNAL(CAST(CAST(PARSE_WKT(?) AS VARIANT) AS OBJECT))))] 在 VALUES 子句中
任何人都知道这个错误
谢谢
解决方法
您可以直接将 WKT、WKB 或 GeoJSON 值插入到 GEOGRAPHY 列中,而无需调用解析函数。 Snowflake 将找出值的格式并尝试自动解析它。这应该适合您:
private static final String QUERY_SNOWFLAKE = "INSERT INTO %s " +
"(GEOM_AS_WKB,GEOM_AS_WKT,GEOID,NAMELSAD,TRACTCE,BLKGRPCE,INSIDE_CENTROID_LATITUDE," +
"INSIDE_CENTROID_LONGITUDE,AREA_SQUAREMILES,X_MIN,X_MAX,Y_MIN,Y_MAX,PART_COUNT,HOLE_COUNT,STATEFP," +
"COUNTYFP,STUSPS,STATE,COUNTY,VINTAGE,GEOM) VALUES (?,?," +
"?,?)";
preparedStatementCENSUS_BLOCK_GROUP_GEOGRAPHY.setString(22,censusBlockGroupGeographyModel.getTheGeomText());