9

我无法在 bigquery 中的 customtarget 列上应用正确的正则表达式。

使用普通的 MSSQL:

SELECT * from mytable where CustomTargeting like = '%u=%'  -- is all okay

使用 Bigquery(legacy-sql) :

SELECT REGEXP_EXTRACT(CustomTargeting, r'[^u=\d]') as validate_users
from [project:dataset.impressions_4213_20181112] Limit 10

错误:

必须指定一个捕获组

更新:

但无法获得子字符串 u ='anystring'

在此处输入图像描述

如何提取 CustomTargeting ='%u=somestring%' 的数据?

4

1 回答 1

11

对于 BigQuery 旧版 SQL

SELECT声明列表中,您可以使用
SELECT REGEXP_EXTRACT(CustomTargeting, r'(?:^|;)u=(\d*)')

InWHERE子句 - 您可以使用
WHERE REGEXP_MATCH(CustomTargeting, r'(?:^|;)u=(\d*)')

所以,你的查询看起来像

#legacySQL
SELECT CustomTargeting, REGEXP_EXTRACT(CustomTargeting, r'(?:^|;)u=(\d*)') 
FROM [project:dataset.impressions_4213_20181112]
WHERE REGEXP_MATCH(CustomTargeting, r'(?:^|;)u=(\d*)')   

对于 BigQuery 标准 SQL

相同SELECT
但不同WHERE-WHERE REGEXP_CONTAINS(CustomTargeting, r'(?:^|;)u=(\d*)')

#standardSQL
SELECT CustomTargeting, REGEXP_EXTRACT(CustomTargeting, r'(?:^|;)u=(\d*)') 
FROM `project.dataset.impressions_4213_20181112`
WHERE REGEXP_CONTAINS(CustomTargeting, r'(?:^|;)u=(\d*)')  

更新 - 解决提供的数据示例:

正则表达式从r'^u=(\d*)')to更新r'(?:^|;)u=(\d*)')- 希望它是自描述的,但如果不是 - 它会在字符串开头或之后搜索匹配;

于 2018-12-04T15:30:11.277 回答