如何访问数组中的最后一个元素?

qiu*_*fei 9 arrays hive

在我的hive表中,该session字段是一个字符串,格式如下:

ip-sessionID-userID 要么 area-sessionID-userID

有3或4个字段用" -" 分隔,但userID始终是最后一个.

我想选择userID,但如何访问最后一个字段?在python中,有类似的东西: arr[-1]

但在蜂巢中,如何实现这一目标?以下SQL似乎不正确.

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

谢谢!

arn*_*o_v 13

reverse(split(reverse(session), '-')[0])
Run Code Online (Sandbox Code Playgroud)

虽然这可能比正则表达式解决方案贵一点;)


pen*_*nsz 2

因为 hive 不支持数组索引的非常量表达式。

还有一些其他方法可以解决您的问题:

  1. 使用regexp_extract,例如:

    从 my_table 中选择 regexp_extract(session, '(\-[^\-]+)', 1) 作为用户;

  2. 使用自定义 hive 函数:示例和文档可以在hive 文档中找到