2017년 8월 12일 토요일

Hive에서 GROUP_CONCAT 함수 사용하기

A. 원본 테이블
지역 업종
경기도 요식업
경기도 헬스
서울 한식
서울 학원
강원도 초등학교
강원도 커피
...
제주도 제과점

B. 변환된 결과
지역 업종
경기도 요식업, 헬스, …
서울 한식, 학원, …
강원도 초등학교, 커피, …
제주도 제과점, …

A처럼 생긴 테이블을 B와 같은 형태로 바꿀 필요가 있었다. 
일종의 텍스트 피벗이라 해야 하나(?) 

원본이 800만줄이 넘는 양이라 Hive Query 안에서 처리하고 싶어 쿼리를 복잡스럽게 짜보다가(!)
뭔가 UDF라도 있을 것 같아 재미있는 아이를 발견. 

우선, MySQL에서는 GROUP_CONCAT이라는 아이가 있었는데 이렇게 생겼다. 

GROUP_CONCAT([DISTINCT] expr [,expr ...] [ORDER BY {unsigned_integer | col_name | expr} [ASC | DESC] [,col_name ...]] [SEPARATOR str_val])

MySQL기준으로 A -> B를 해보면... 이렇게 짧게 끝난다. 

mysql> select 지역, GROUP_CONCAT (업종) from table_A GROUP BY 지역; 


Hive에서는 약간 다른데 - 
CONCAT_WS, COLLECT_SET 뭐 이런 아이들을 조합해야 한다.

hive> select 지역, CONCAT_WS(',', COLLECT_SET(업종)) from table_A GROUP BY 지역



댓글 없음:

댓글 쓰기