【问题标题】:REGEXP_EXTRACT in Google BigQuery returns no resultsGoogle BigQuery 中的 REGEXP_EXTRACT 不返回任何结果
【发布时间】: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"

【问题讨论】:

    标签: regex google-bigquery


    【解决方案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
    )
    

    【讨论】:

    • 你是对的!该查询返回了预期的结果!
    猜你喜欢
    • 1970-01-01
    • 2020-01-11
    • 1970-01-01
    • 2015-09-14
    • 2015-04-21
    • 1970-01-01
    • 2022-10-07
    • 2017-05-20
    • 1970-01-01
    相关资源
    最近更新 更多