如何在 BigQuery 中过滤地理数据
How to filter on geography data in BigQuery
我需要根据地理类型的列过滤我的 BigQuery table。我尝试了以下查询 SELECT * FROM bigqueryproject1-279667.mycreatedataset1.newTabelwithAllDatatype where location = ST_GEOGPOINT(-6, 6)
但这显示了验证错误 Equality is not defined for arguments of type GEOGRAPHY 。如果我用 like 运算符替换 '=',我会收到消息,说明 like 仅适用于字符串和字节。我参考了 this 文档,但不知道如何使用过滤器。
我想你想要这样的东西:
WHERE ST_INTERSECTS(location, ST_GEOGPOINT(-6, 6))
对于地理,未定义相等运算符。
您可以使用 ST_Equals
,例如 ST_Equals(location, ST_GEOGPOINT(-6, 6))
如果您真的只想要地理值(几乎)正好等于该点的行。
更多时候您会希望根据其他条件进行过滤,例如与特定点的交叉点,使用 ST_Intersects(location, ST_GEOGPOINT(-6, 6))
或在点的一定距离内的条件下,使用 ST_DWithin(location, ST_GEOGPOINT(-6, 6), 100)
其中最后一个参数是以米为单位的距离。
我需要根据地理类型的列过滤我的 BigQuery table。我尝试了以下查询 SELECT * FROM bigqueryproject1-279667.mycreatedataset1.newTabelwithAllDatatype where location = ST_GEOGPOINT(-6, 6)
但这显示了验证错误 Equality is not defined for arguments of type GEOGRAPHY 。如果我用 like 运算符替换 '=',我会收到消息,说明 like 仅适用于字符串和字节。我参考了 this 文档,但不知道如何使用过滤器。
我想你想要这样的东西:
WHERE ST_INTERSECTS(location, ST_GEOGPOINT(-6, 6))
对于地理,未定义相等运算符。
您可以使用 ST_Equals
,例如 ST_Equals(location, ST_GEOGPOINT(-6, 6))
如果您真的只想要地理值(几乎)正好等于该点的行。
更多时候您会希望根据其他条件进行过滤,例如与特定点的交叉点,使用 ST_Intersects(location, ST_GEOGPOINT(-6, 6))
或在点的一定距离内的条件下,使用 ST_DWithin(location, ST_GEOGPOINT(-6, 6), 100)
其中最后一个参数是以米为单位的距离。