如何访问的最后一个数组中的元素?(How to access the last element in

2019-08-03 22:13发布

在我的蜂巢表中, session字段是像格式的字符串:

ip-sessionID-userIDarea-sessionID-userID

有相隔3个或4个领域“ - ”,但用户ID总是最后一个。

我想选择的用户ID,但如何访问的最后一个字段? 在Python中,有这样的: arr[-1]

但在蜂房,如何实现这一目标? 下面的SQL似乎不正确。

select split(session,"\-")[-1] as user from my_table;

谢谢!

Answer 1:

reverse(split(reverse(session), '-')[0])

虽然这可能会有点比正则表达式的解决方案更昂贵;)



Answer 2:

因为对于数组索引非常量表达式在蜂巢不支持。

会有一些其他的方法来解决问题:

  1. 使用regexp_extract ,如:

    选择REGEXP_EXTRACT(会话, '(\ - [^ \ - ] +)',1)从用户MY_TABLE;

  2. 使用自定义功能蜂箱:例如和文档可以中找到蜂巢文件



Answer 3:

我认为有以下将比从@arno_v溶液更快,因为它仅颠倒视图阵列元件,而不是整个字符串,并只反向一次:

reverse(split(session, '-'))[0]


Answer 4:

在没有一个更方法reverse ,使用数组size()-1 。 该方法是更有效的,因为它不产生中间反转串,它仅适用于阵列。

select array[size(array)-1] as userID
from
( select split(session,'-') array from your_table ) s;


文章来源: How to access the last element in an array ?
标签: arrays hive