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 中的字符串