Google bigquery 地理字段在一个表中不工作在另一个表中工作?

Google bigquery 地理字段在一个表中不工作在另一个表中工作?,google-bigquery,Google Bigquery,我有两个带有单个地理列的表,该列具有用于多边形的WRT字符串。一个表上的查询在另一个表上运行良好,返回所有行,而不是一行 在“地理”列中具有多边形的表。使用ST_CONTAINS和single point查询时,返回所有行而不是单个行。如果我将字段内容转换为字符串,然后再转换回地理位置,它会工作,但速度非常慢。我有另一个类似的表,它在更多的记录上运行得非常快 返回所有记录的查询: SELECT count(1) FROM pur.sections WHERE ST_CONTAINS((POLYG

我有两个带有单个地理列的表,该列具有用于多边形的WRT字符串。一个表上的查询在另一个表上运行良好,返回所有行,而不是一行

在“地理”列中具有多边形的表。使用ST_CONTAINS和single point查询时,返回所有行而不是单个行。如果我将字段内容转换为字符串,然后再转换回地理位置,它会工作,但速度非常慢。我有另一个类似的表,它在更多的记录上运行得非常快

返回所有记录的查询:

SELECT count(1) FROM pur.sections WHERE ST_CONTAINS((POLYGON), ST_GEOGPOINT(-121.253763, 38.354874))
查询哪个工作正常但速度较慢-23秒!:

SELECT polygon FROM pur.sections WHERE ST_CONTAINS(ST_GEOGFROMTEXT(ST_ASTEXT(POLYGON)), ST_GEOGPOINT(-121.253763, 38.354874))
返回:

[
  {
    "polygon": "POLYGON((-121.241934066695 38.3649672043987, -121.241834795711 38.350891363934, -121.260351761597 38.3508607773966, -121.260367162138 38.3649633106378, -121.241934066695 38.3649672043987))"
  }
]
表有164K行


第一个查询返回单行的速度非常快。

我有一个合理的解释,说明了这是如何发生的。问题可能是多边形方向:

如果数据是从文件加载到表中的,BigQuery假定多边形的方向符合此链接中描述的规则:

如果按输入顶点的顺序遍历多边形的边界,则多边形的内部位于左侧

很可能这些多边形的方向错误,因此BigQuery将它们解释为巨大的互补多边形,所以现在ST_大部分时间都返回true

在第二个查询中,您打印多边形,然后调用ST_GEOGFROMTEXT而不使用定向参数,这里BigQuery将WKT解释为描述面积较小的多边形,因此您可以得到预期的结果

假设所有多边形都小于半球体,则可以修复该表,运行以下命令可能就是这种情况:

CREATE OR REPLACE pur.sections AS 
SELECT * EXCEPT(POLYGON), ST_GEOGFROMTEXT(ST_ASTEXT(POLYGON)) AS POLYGON
FROM pur.sections

之后,您将从更简单的查询中获得预期结果。

是和是!我忘了发布它,但在阅读了BigQuery如何解释WKT字符串的小字本之后,我得到了相同的想法,并以同样的方式修复了它。无论如何谢谢你!