【问题标题】:How to use regex in Bigquery如何在 Bigquery 中使用正则表达式
【发布时间】:2019-05-05 23:29:45
【问题描述】:

我无法在 bigquery 的 customtarget 列上应用正确的 regex

使用普通的 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%' 的数据?

【问题讨论】:

  • 如果您需要在u= 子字符串之后提取1 个或多个数字,请尝试r'u=([0-9]+)'

标签: regex google-bigquery legacy-sql


【解决方案1】:

对于 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*)')   

对于 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*)') 更新到 r'(?:^|;)u=(\d*)') - 希望它是自我描述的,但如果不是 - 它可以在字符串开头或 ; 之后搜索匹配

【讨论】:

  • 感谢您解释包含..但我得到的只有 null 作为输出。
  • 那是因为在您的问题中您使用的是^u=,其中^ 表示字符串的开头。现在 - 当您添加数据示例时 - 很明显您的 u= 不在字符串的开头 - 所以只需删除 ^ - 我将分别调整我的答案
  • 删除后有机会尝试吗?
猜你喜欢
  • 1970-01-01
  • 2023-03-08
  • 1970-01-01
  • 1970-01-01
  • 2013-12-15
  • 1970-01-01
  • 2020-09-14
  • 2013-06-10
相关资源
最近更新 更多