使用 jdbc 插入数据时,将 WKT 转换为雪花中的 Geography 数据类型时出错

问题描述

我在使用 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());