使用Hive内置的collect_set,我打算实现一个查询,我可以可靠地知道数组0索引是收集的第一个元素,最后一个索引是收集的最后一个元素。 - 例如:
cookie page_num,
1234 1
1234 2
1234 3
1234 4
4444 1
4444 2
查询:
select cookie, collect_set(page_num) as page_set
from mytable
group by cookie
期望的结果:
1234 [1,2,3,4]
4444 [1,2]
实际无序结果:
1234 [2,4,1,3]
4444 [2,1]
如何收集到排序数组,其中排序基于传入行的顺序?
答案 0 :(得分:0)
Brickhouse中的'collect_max'UDF(http://github.com/klout/brickhouse)将根据值对地图进行排序。 (也许我们应该添加一个排序UDF)。你可以使用它和group_count来获得你想要的东西
SELECT cookie, map_keys(
collect_max( page_num, row_order, MAX_NUM_PAGES ) )
FROM (
SELECT cookie, page_num, group_count( cookie ) as row_order
FROM mutable
DISTRIBUTE BY cookie
SORT BY cookie, my_sort_column
) sc
GROUP BY cookie;
我很确定这会奏效。