【问题标题】:Error while converting WKT to Geography data type in snowflake while using jdbc to insert data使用 jdbc 插入数据时将 WKT 转换为雪花中的地理数据类型时出错
【发布时间】:2021-02-23 08:40:21
【问题描述】:

我尝试在使用 JDBC 将 wkt 格式数据插入地理列时出错。

我使用的代码是

    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 子句中

任何人都知道这个错误

谢谢

【问题讨论】:

  • 想知道:您是否在 Snowflake 中直接尝试了该语句,而不是通过 jdbc?结果如何?
  • 是的,在雪花中它正在工作,但使用 jdbc 相同的查询不起作用
  • 我不明白的是:该错误表明存在一个无效查询,其中包含 IFFPARSE_WKT 之类的内容——我们在发布的查询中找不到这些内容。我认为这个问题缺少相关代码。
  • @FelipeHoffa 只有这个查询是通过 JDBC 运行的,我们看到的错误可能是在将 wkt 转换为几何图形时函数 ST_GEOGRAPHYFROMWKT(?) 内部发生的情况
  • 哦,对了——这很有道理。你也可以分享censusBlockGroupGeographyModel.getTheGeomText()的输出吗?

标签: jdbc geometry gis geospatial snowflake-cloud-data-platform


【解决方案1】:

您可以直接将 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());

【讨论】:

  • 感谢您的回答。真的很有帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-07
相关资源
最近更新 更多