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)