Hive SQL在两个非字母数字字符之间提取不同长度的字符串

时间:2017-11-07 18:56:13

标签: hive hiveql

我想在Hive QL中提取位于两个重复下划线之间的不同长度的字符串。下面我展示了行的模式的抽样。具体来说,我想提取第3和第4下划线之间的字符串。谢谢!

2016_sadfsa_IL_THIS_xsdaf_asd_eventbyevent_tsaC_NA_300x250 
2017_thisshopper_MA_THIS_NAT_Leb_ReasonsWhy_HDIMC_NA_300x600
2017_FordShopper_IL_THESE_NAT_sov_winterEvent_HDIMC_NA_300x600 

只是继续尝试,我从以前对非Hive SQL的响应中修改了这个。我仍然有兴趣了解更好的方法。请注意,creative_str是列的名称:

select creative_str, ltrim(rtrim(substring(regexp_replace(cast(creative_str as varchar(1000)), '_', repeat(cast(' ' as varchar(1000)),10000)), 30001, 10000))) 
from impression_cr

1 个答案:

答案 0 :(得分:2)

您应该可以使用Hive的SPLIT()功能执行此操作。如果您试图获取第三个和第四个下划线之间的值,则可以执行此操作:

SELECT  SPLIT("2016_sadfsa_IL_THIS_xsdaf_asd_eventbyevent_tsaC_NA_300x250", "[_]")[3],
        SPLIT("2017_thisshopper_MA_THIS_NAT_Leb_ReasonsWhy_HDIMC_NA_300x600", "[_]")[3],
        SPLIT("2017_FordShopper_IL_THESE_NAT_sov_winterEvent_HDIMC_NA_300x600", "[_]")[3]