Hive SQL 提取两个非字母数字字符之间不同长度的字符串
Hive SQL Extract string of varying length between two non-alphanumeric characters
我想提取位于 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
您应该可以使用 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]
我想提取位于 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
您应该可以使用 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]