hadoop – 从Hive中的分割数组的末尾开始评估

我需要拆分看起来像“B1 / AHU / _1 / RoomTemp”,“B1 / AHU / _1 / 109 / Temp”的标签,所以使用具有可变数量字段的变量.我有兴趣获得最后一个字段,有时候是最后一个字段.我很失望地发现负数索引不计算在右边,允许我像在Python中一样选择Hive中数组的最后一个元素.

select tag,split(tag,'[/]')[ -1] from sensor

当这不起作用时我更惊讶:

select tag,split(tag,'[/]')[ size(split(tag,'[\]'))-1 ] from sensor

两次都给我一个错误:

FAILED: SemanticException 1:27 Non-constant expressions for array indexes not supported. 
Error encountered near token '1'

那么任何想法?我是Hive的新手.也许是正则表达式?或者是否有一些我不知道的语法糖?

最佳答案
这个问题得到了很多观点(现在已超过一千),所以我认为它需要一个正确的答案.如果我用这个解决了它:

select tag,reverse(split(reverse(tag),'[/]')[0]) from sensor

在其他建议的答案中没有明确说明 – 我从评论中的建议中得到了这个想法.

这个:

>反转字符串(所以“abcd / efgh”现在是“hgfe / dcba”)
>将它“/”拆分成一个数组(所以我们有“hgfe”和“dcba”)
>提取第一个元素(即“hgfe”)
>然后终于重新逆转(给我们所需的“efgh”)

另请注意,可以通过将1替换为0来检索倒数第二个元素,依此类推其他元素.

转载注明原文:hadoop – 从Hive中的分割数组的末尾开始评估 - 代码日志