쿼리 튜닝을 위해 고민을 하다가
Hive 가 아닌 Impala 로 쓰기로 결정!
그냥 대놓고 돌렸더니...!! Syntax 에러가 난다.
찾아보니... Impala 에서는 UDAF 가 안된다구... 그래서 Hive 에 내장되어 있는 collect_set, collect_list( UDAF ) 와 같은 함수는 사용할 수가 없다.
또한, Hive 에 기본으로 내장되어 있는 explode ( UDTF ) 함수 또는 UDF 같은 함수를 바로 쓸수는 없고 java 나 C++ 로 만들어서 쓸수는 있다.
그러니 아래 쿼리는 Hive 에서만 동작하지 Impala 에서는 동작하지 않는 것이다 ㅠㅠ
SELECT a.uid, collect_list(a.items) FROM ( SELECT a.items, b.uid as uid FROM ( SELECT a.uids, a.items FROM ( SELECT ui.items, collect_set(ui.uid) as uids, count(ui.items) as count FROM ( SELECT uid, items FROM xxx.xxxxx_xxxx_xxxxxxx WHERE ... GROUP BY uid, items ) ui GROUP BY ui.items ) a WHERE a.count >= 4 ) a LATERAL VIEW explode(a.uids) b as uid ) a GROUP BY a.uid limit 100;
'Hive, Impala, Tez' 카테고리의 다른 글
[부록] Hive 에서 만든 Table 이 Impala 에서 인식이 되지 않을 때 (0) | 2017.02.01 |
---|