Snowflake中合并简化几何图形时to_geometry的allowInvalid为何失效?
疑问
这种报错属于正常行为吗?有没有其他方法可以规避边交叉问题?
原因分析
问题根源在于UDF中的mapping步骤:mapping会将合并后的几何对象直接转换为Snowflake的GEOGRAPHY类型,这个转换过程会执行严格的几何验证,而此时to_geometry的allowInvalid参数还未生效,因此验证失败的错误会提前抛出。
而之前从其他数据库导入无效几何时,是直接通过to_geometry处理字符串格式的原始数据,跳过了UDF内部的GEOGRAPHY强制转换步骤,所以allowInvalid参数能正常发挥作用,允许无效几何存入。
修复方案
修改UDF,使其返回字符串格式的几何结果,移除mapping包裹,仅保留合并逻辑:
unary_union([shape(i) for i in geoms])
修改后,原SQL语句无需调整,直接调用带allowInvalid参数的to_geometry即可正常处理简化后的几何对象,既规避16MB存储限制,又允许存在边交叉的无效几何存入Snowflake。
内容的提问来源于stack exchange,提问作者bogdan.rusu
相关产品推荐
相关产品推荐

