提取SQL中的数组的最后N个元素(配置单元)

问题描述 投票:0回答:1

我有一列包含数组,我想提取数组中的最后X个元素。

示例尝试提取最后两个元素:

     Column A
     ['a', 'b', 'c']
     ['d', 'e']
     ['f', 'g', 'h', 'i']

预期输出:

     Column A
    ['b', 'c']
    ['d', 'e']
    ['h', 'i']

最好的情况是不使用UDF进行操作

sql arrays hive hiveql
1个回答
0
投票
再次使用反向,爆炸,过滤和重新组装数组的一种方法:

with your_table as ( select stack (4, 0, array(), --empty array to check it works if no elements or less than n 1, array('a', 'b', 'c'), 2, array('d', 'e'), 3, array('f', 'g', 'h', 'i') ) as (id, col_A) ) select s.id, collect_list(s.value) as col_A from (select s.id, a.value, a.pos from your_table s lateral view outer posexplode(split(reverse(concat_ws(',',s.col_A)),',')) a as pos, value where a.pos between 0 and 1 --last two (use n-1 instead of 1 if you want last n) distribute by s.id sort by a.pos desc --keep original order )s group by s.id

结果:

s.id col_a 0 [] 1 ["b","c"] 2 ["d","e"] 3 ["h","i"]

也许不雅致,但仅使用内置函数
© www.soinside.com 2019 - 2024. All rights reserved.