首页 > 解决方案 > 有效 WKT 线串的正则表达式(在 BigQuery 中)?

问题描述

到目前为止,我有以下内容:

 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

如何在 Google BigQueryregex中过滤掉所有无效的 LINESTRING?我不能使用ST_NUMPOINTS(),因为它需要一个对象,如果字符串无效GEOGRAPHY,我无法将其转换为。GEOGRAPHY

编辑:WKT LINESTRINGs 具有以下格式:LINESTRING (x1 y1, x2 y2, x3 y3, ..., xn yn)其中每(xn, yn)对代表第 n 个纬度/经度对。

标签: regexgoogle-bigquerygiswkt

解决方案


不要使用 REGEXP - 它不可能解决所有问题。例如,WKT 的纬度可能大于 90 度,这会导致 ST_GeogFromText 失败,但在 REGEXP 中几乎不可能捕获。或者您可能有两个相同的点LINESTRING (1 2, 1 2),这也是无效的 LineString。

改用SAFE 前缀,当输入无效时,它会导致函数返回 NULL 而不是查询失败。这给了你准确的验证!

select SAFE.ST_GeogFromText('foo')
NULL

推荐阅读