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



2017년 8월 11일 금요일

Mac에서의 docker troubleshooting

Mac OS에서 종종 맞닥뜨리는 docker관련 에러들에 대한 troubleshooting을 차차 업데이트 / 정리할 예정.

1. docker container를 시작할 수 없는 경우 
(Error message) docker: Cannot connect to the Docker daemon. Is the docker daemon running on this host?.
See 'docker run --help'.

커맨드 라인에서 다음 명령어 실행
> eval "$(docker-machine env default)"

1.1) 위 명령어에서 또 에러가 나는 경우
(Error message) Error checking TLS connection: Host is not running

커맨드 라인에서 다음 명령어로 TLS Cert를 재생성
> docker-machine regenerate-certs default

1.1.1) TLS Cert 생성이 에러 나는 경우: 아예 docker default machine을 재생성해주자.
> docker-machine rm default
> docker-machine create --driver virtualbox default

1.1.2) 그래도 에러가 나면...
Virtual Box를 직접 실행하고 떠 있는 아이 (Running)는 reset.
다시 1.1.1 실행.

(to be updated)