我有一列包含数组,我想提取数组中的最后X个元素。
示例尝试提取最后两个元素:
Column A
['a', 'b', 'c']
['d', 'e']
['f', 'g', 'h', 'i']
预期输出:
Column A
['b', 'c']
['d', 'e']
['h', 'i']
最好的情况是不使用UDF进行操作
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"]
也许不雅致,但仅使用内置函数