2014-04-08 3 views
2

집합을 수집하고 배열 0 인덱스가 수집 된 첫 번째 요소는 쿼리를 구현하고 마지막 인덱스는 수집 된 마지막 인덱스였습니다. ~ 실시 예 :Hive의 built_set을 사용하여 하이브에

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 

희망의 reults :

1234 [1,2,3,4] 
4444 [1,2] 

실제 않은 주문 결과 : 나는 정렬 된 배열로 수집 할 수있는 방법

1234 [2,4,1,3] 
4444 [2,1] 

정렬은 순서에 따라 결정됩니다. 들어오는 행?

답변

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; 

저는 제대로 작동 할 것이라고 확신합니다.

+0

array_sort에 대한 udf는 좋을 것입니다. 나는 테스트 할 때 들어오는 행의 순서를 순서대로 수집하는 것으로 보이는 brickhouse를 사용하여 끝냈습니다. 고마워. 고마워. – user2726995

+0

JIRA를 제출 했으므로 sort_array가 결국 Brickhouse에서 종료 될 수 있습니다. –