到目前为止,我有以下内容:
select WKT, column1, column2
from table
where REGEXP_CONTAINS(WKT, r"-?(?:\.\d+|\d+(?:\.\d*)?)") is true
这可以解决大多数情况,但是我仍然遇到以下错误:
ST_GeogFromText failed: Linestring should have at least two unique points, but had 1
如何使用regex
过滤掉Google BigQuery中的all无效LINESTRING?我不能使用ST_NUMPOINTS()
,因为它需要一个GEOGRAPHY
对象,并且如果该字符串无效,则无法将其转换为GEOGRAPHY
。
编辑:WKT LINESTRING具有以下格式:LINESTRING (x1 y1, x2 y2, x3 y3, ..., xn yn)
,其中每个(xn, yn)
对表示第n个纬度/经度对。
不要使用REGEXP-它不可能解决所有问题。例如。 WKT的纬度可能大于90度,这会导致ST_GeogFromText失败,但几乎无法在REGEXP中发现。
使用SAFE prefix代替,当输入无效时,它使函数返回NULL而不是查询失败。这可以为您提供确切的验证!
select SAFE.ST_GeogFromText('foo')
NULL
尝试以下原始正则表达式的扩展名
WHERE REGEXP_CONTAINS(WKT, r'LINESTRING \((?:(?:\.\d+|\d+(?:\.\d*)?) (?:\.\d+|\d+(?:\.\d*)?)(?:, |\))){2,}')