我正在尝试从字符串(复合\u键)获取子字符串值:我的复合\u键如下所述:
string1|string2|string3|string4|string5|string6|string7
我可以使用impala的substring方法找到string1、string2、string3、string4和string5有人能帮我用子串方法找到string6和string7吗?任何帮助都会被满足的。
lo8azlld1#
我可以通过以下查询完成:对于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
selectsubstring(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
select
substring(composite_key,
locate('|',composite_key,
locate('|',composite_key) + 1)+1)+1)+1)+1,
locate('|',composite_key) + 1)+1)+1)+1)+1)
- locate('|',composite_key,
locate('|',composite_key) + 1)+1)+1)+1)-1)
as a
zfciruhq2#
您必须使用配置单元子查询+数组数据结构+拆分函数来实现这一点。然而,这只适用于Hive。impala不支持嵌套数据结构,除了impala2.3(对应于cdh5.5)和更高版本中基于parquet的表。
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
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
2条答案
按热度按时间lo8azlld1#
我可以通过以下查询完成:
对于string7
对于string6
zfciruhq2#
您必须使用配置单元子查询+数组数据结构+拆分函数来实现这一点。然而,这只适用于Hive。impala不支持嵌套数据结构,除了impala2.3(对应于cdh5.5)和更高版本中基于parquet的表。