Google BigQuery 中的 REGEXP_EXTRACT 不返回任何结果

Posted

技术标签:

【中文标题】Google BigQuery 中的 REGEXP_EXTRACT 不返回任何结果【英文标题】:REGEXP_EXTRACT in Google BigQuery returns no results 【发布时间】:2021-05-21 15:05:39 【问题描述】:

我在 Google BigQuery 中使用 REGEXP_EXTRACT 函数从字符串中提取特定单词。虽然 regexp 在测试时效果很好,但函数 REGEXP_EXTRACT 在 Google BigQuery 中返回 null。

例如有字符串“RR_SM_Brand_A_Additive_Clean_jun2020”,我想从列表中提取一个值(Brand_A、Brand_B、Brand_C等)

当我测试 RegExp 时,我收到了正确的值 Brand_A:https://regexr.com/5tecm

正则表达式代码:Brand_A|Brand_B(感谢@Barmar)

但是当我在 Google BigQuery 中运行它时:

SELECT distinct utm_campaign, -- REGEXP_EXTRACT(utm_campaign, r"(?:Brand_A|Brand_B)") REGEXP_EXTRACT(utm_campaign, r"Brand_A|Brand_B") FROM project.dataset.table WHERE utm_campaign = "RB_Display_Brand_A_Botanica_2020"

我收到“此查询未返回任何结果。”,而不是预期的 Brand_A 值。

注意:BigQuery 不会返回“无法解析正则表达式:无效的 perl 运算符:(?"duplicate"

【问题讨论】:

【参考方案1】:

我建议您的 WHERE 子句可能存在问题。您使用的两种形式都提取了您似乎要求的品牌字符串。如果REGEXP_EXTRACT 不匹配,您仍然会得到行,但该值为 NULL。

将其转换为仅使用现有 where 子句中的文字:

SELECT 
  val,
  REGEXP_EXTRACT(val, r"(?:Brand_A|Brand_B)"),
  REGEXP_EXTRACT(val, r"Brand_A|Brand_B")
FROM
(
    SELECT "RB_Display_Brand_A_Botanica_2020" as val
)

【讨论】:

你是对的!该查询返回了预期的结果!

以上是关于Google BigQuery 中的 REGEXP_EXTRACT 不返回任何结果的主要内容,如果未能解决你的问题,请参考以下文章

BigQuery 中的 REGEXP_EXTRACT - 提取整数或带小数的数字

如何使用 REGEXP 提​​取 BigQuery 中的特定组合

如何使 BigQuery 中的 REGEXP_SUBSTR() 函数匹配非贪婪?

REGEXP_REPLACE 模式必须是 const 吗?比较 BigQuery 中的字符串

在 Google BigQuery 中将数组转换为字符串 [重复]

如何在 BigQuery 中使用 REGEXP_EXTRACT 仅提取数值?