如何在 Bigquery 中使用正则表达式

Shi*_*ndi 7 regex google-bigquery legacy-sql

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

使用普通的 MSSQL:

SELECT * from mytable where CustomTargeting like = '%u=%'  -- is all okay
Run Code Online (Sandbox Code Playgroud)

使用 Bigquery(legacy-sql) :

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

错误:

必须仅指定一个捕获组

更新:

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

在此处输入图片说明

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

Mik*_*ant 10

对于 BigQuery 旧版 SQL

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

WHERE条款 - 你可以使用
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*)')   
Run Code Online (Sandbox Code Playgroud)

对于 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*)')  
Run Code Online (Sandbox Code Playgroud)

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

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