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*)')- 希望它是自描述的,但如果不是 - 它会在字符串的开头或之后进行搜索;