我有一些多边形正在尝试上传到 BigQuery。多边形基于点(纬度和经度)和半径创建
shapely
,即 polygon = shapely.geometry.Point(lng, lat).buffer(r)
。首先使用 geojson.dumps(mapping(polygon))
将它们转换为 geojson 数据框,然后上传到 BigQuery,最后使用 SELECT SAFE.st_geogfromgeojson(polygon, make_valid => TRUE) FROM table_name
转换为 GEOGRAPHY 类型。
但是,作为此过程的一部分,某些条目变为 NULL(上传的数据框中没有缺失值)。我怀疑这与 BigQuery 没有完全识别形状良好的多边形有关,并且无效的多边形被自动删除。
有没有办法确保这种情况不会发生?
您使用的查询具有
SAFE.
前缀 - 其设计正是为了允许发生这种情况,并将 BigQuery 无法接受的内容转换为 NULL。
删除
SAFE.
前缀,查询将失败,并且您应该收到一个错误,描述为什么某些内容无法转换为 Geography
类型。
我通常做的是创建一个失败的表:
CREATE TABLE tmp.failures AS
SELECT geoid, polygon
FROM table_name
WHERE polygon IS NOT NULL
AND SAFE.st_geogfromgeojson(polygon, make_valid => TRUE) IS NULL
这会创建一个仅失败的表 - 原始多边形不为 NULL 的行,但结果为 NULL。然后,您可以通过删除
SAFE.
前缀并检查错误消息,使用诸如 之类的查询来一一检查每个失败行的原因
SELECT st_geogfromgeojson(polygon, make_valid => TRUE)
WHERE geoid = 12345