在HIVE中寻找子串

时间:2016-04-04 09:20:34

标签: hive impala

我试图从String(composite_key)获取子字符串值: 我的composite_key如下所示:

string1|string2|string3|string4|string5|string6|string7 

我可以使用impala的substring方法找到string1,string2,string3,string4和string5

有人可以帮我用substring方法找到String6和String7吗?

任何帮助都会得到帮助。

2 个答案:

答案 0 :(得分:1)

您已使用Hive子查询+数组数据结构+拆分功能来完成此任务。但是,这仅适用于Hive。 Impala不支持嵌套数据结构,但Impala 2.3(对应于CDH 5.5)及更高版本的基于镶木地板的表除外。

select 
key_array[0] part0,
key_array[1] part1, 
key_array[2] part2, 
key_array[3] part3, 
key_array[4] part4, 
key_array[5] part5, 
key_array[6] part6, 
from (
select split(composite_key,'|') as key_array 
from mytable
) as temp

答案 1 :(得分:0)

我可以使用以下查询来执行此操作:

对于String7

select substring(composite_key,locate('|',composite_key,locate('|',composite_key,locate('|',composite_key,locate('|',composite_key,locate('|',composite_key, locate('|',composite_key) + 1)+1)+1)+1)+1)+1)as a

对于String6

select
substring(composite_key,
locate('|',composite_key,
locate('|',composite_key,
locate('|',composite_key,
locate('|',composite_key, 
locate('|',composite_key) + 1)+1)+1)+1)+1, 
locate('|',composite_key,
locate('|',composite_key,
locate('|',composite_key,
locate('|',composite_key,
locate('|',composite_key, 
locate('|',composite_key) + 1)+1)+1)+1)+1)
- locate('|',composite_key,
locate('|',composite_key,
locate('|',composite_key,
locate('|',composite_key, 
locate('|',composite_key) + 1)+1)+1)+1)-1) 
as a