regex - 有效 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 个纬度/经度对。
解决方案
不要使用 REGEXP - 它不可能解决所有问题。例如,WKT 的纬度可能大于 90 度,这会导致 ST_GeogFromText 失败,但在 REGEXP 中几乎不可能捕获。或者您可能有两个相同的点LINESTRING (1 2, 1 2)
,这也是无效的 LineString。
改用SAFE 前缀,当输入无效时,它会导致函数返回 NULL 而不是查询失败。这给了你准确的验证!
select SAFE.ST_GeogFromText('foo')
NULL
推荐阅读
- node.js - Angular CLI Docker 开发环境
- regex - 如何在Perl中匹配正则表达式单个组合与多组相同模式
- r - 收到错误“必须使用 aes 创建映射”,有关如何修复它的任何建议?
- javascript - 可访问性:`tabindex="-1"` 是否意味着该元素对屏幕阅读器不可见(类似于 `aria-hidden="true"`)
- xml - UPS Quantum View API 错误:失败:给定请求没有文件。(330023)
- reactjs - Formik 在 useEffect 中使用 setErrors 方法
- javascript - 未设置 useState 初始状态
- d3.js - 在 D3 中将两个具有相同类的 g 分组
- vue.js - 如何将 Vue 组件导入 Vue 并替换一个值?
- scala - 带有布尔默认值的 Scala 中带有 getOrElse 的选项