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 지역