【问题标题】:How to extract a specific string from a key,value pair data in Big Query using regexp_extract?如何使用 regexp_extract 从 Big Query 中的键值对数据中提取特定字符串?
【发布时间】:2015-10-13 19:15:08
【问题描述】:

我正在尝试提取特定键“xyz”的值并尝试使用下面的正则表达式来完成它。这是处理键值对的有效方法吗?如果有任何其他更有效的解决方案,有人可以建议我。谢谢。

**

 - Input & SQL :-



**

 SELECT FIRST( SPLIT( regexp_extract(kvp,r'SuppressFlexCacheHydrationIndicator=(.*)&'), '&' ) ) AS SuppressFlexCacheHydrationIndicator,
       regexp_extract(kvp,r'campaignName=(.*)$') AS campaign,
       regexp_extract(LOWER(kvp),r'resultcode=(.*)&') AS resultcode,       
  FROM ( SELECT 'SuppressFlexCacheHydrationIndicator=True&templateVersionId=5&vmtaText=mail2&sequenceId=300&resultCode=DoNotMailBounceList&campaignName=classicimport' AS kvp )

Output :-

    SuppressFlexCacheHydrationIndicator campaign        resultcode   
    True                                classicimport   donotmailbouncelist  

评论:-

在上面的 SQL 中,我使用 FIRST(SPLIT()) 从输入中提取子字符串,我认为它无效,可以通过使用正则表达式来实现。如果有,请分享您的见解任何其他可能的解决方案。谢谢。

【问题讨论】:

    标签: regex bigdata google-bigquery


    【解决方案1】:

    我会使用稍微不同的正则表达式来避免 SPLIT 和 FIRST 成本,以及编码有关 URL 中参数位置的特殊知识:

    SELECT regexp_extract(kvp,r'SuppressFlexCacheHydrationIndicator=([^&]*)') AS SuppressFlexCacheHydrationIndicator,
           regexp_extract(kvp,r'campaignName=([^&]*)') AS campaign,
           regexp_extract(LOWER(kvp),r'resultcode=([^&]*)') AS resultcode,       
      FROM ( SELECT 'SuppressFlexCacheHydrationIndicator=True&templateVersionId=5&vmtaText=mail2&sequenceId=300&resultCode=DoNotMailBounceList&campaignName=classicimport' AS kvp )
    

    【讨论】:

    • 谢谢莫萨。它工作正常。你能解释一下[^&]*的用法吗?通过查看结果,我了解到我们正在寻找键后面的第一个&符号。这是正确的解释吗?
    • [^&] 表示除 & 以外的任何字符,因此正则表达式匹配会在输入中看到 & 时停止。
    • 谢谢。只是想知道您是否知道/有任何好的文档(或建议),其中包含有关 BQ 中正则表达式的更多详细信息。我已经检查了正则表达式的本地 BQ 文档,但它非常有限。
    猜你喜欢
    • 1970-01-01
    • 2021-12-29
    • 2016-01-15
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    • 2021-06-08
    • 2019-03-20
    • 2020-01-04
    相关资源
    最近更新 更多