如何在大查询中使用regexp_extract从键值对数据中提取特定字符串



我试图提取特定键'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())从输入中提取子字符串,我认为这是无效的,可以通过使用正则表达式来实现。请分享您的见解,如果有任何其他可能的解决方案。谢谢。

我会使用稍微不同的正则表达式来避免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 )

最新更新