파서를 안쓰고 하둡에서 바로 데이터 처리할때, 

LATERAL VIEW explode 와 LATERAL VIEW posexplode기능은 매우 유용하다.


예를 들어, 다음과 같은 데이터를 풀고 싶은 경우가 있다.


■ 원본

 name

 objects

 홍길동

 카메라,라면,고기

 둘리

 소고기,노트북


■ 바꾸고 싶은 결과

name 

 object

 objects

 홍길동

 카메라

  카메라,라면,고기

 홍길동

 라면

  카메라,라면,고기

 홍길동

 고기

  카메라,라면,고기

 둘리

 소고기

  소고기,노트북

 둘리

 노트북

  소고기,노트북


해결방법

1. LATERAL VIEW explode 사용하기
이런식으로 푸는게 가능하다. 하지만, objects 의 순서(index) 가 알고 싶으면 어떻게 할까?
첫번째 아이템만 알고 싶을경우...

hive> select 
  name,
  object,
  objects
from (
  select '홍길동' as name, '카메라,라면,고기' as objects
  UNION ALL
  select '홍길동' as name, '소고기,노트북'  as objects
) log 
LATERAL VIEW explode(split(objects, ",")) `_objects` AS object


OK
name    object  objects
홍길동       카메라       카메라,라면,고기
홍길동       라면  카메라,라면,고기
홍길동       고기  카메라,라면,고기
홍길동       소고기       소고기,노트북
홍길동       노트북       소고기,노트북
Time taken: 13.055 seconds, Fetched: 5 row(s)



2. LATERAL VIEW posexplode 사용하기


구분자로 쪼갠 인덱스까지 알고 싶다면  posexplode 를 쓰면 된다.

사용법은 거의 같다.


hive> select 

  name,

  idx,

  object,

  objects

from (

  select '홍길동' as name, '카메라,라면,고기' as objects

  UNION ALL

  select '홍길동' as name, '소고기,노트북'  as objects

) log 

LATERAL VIEW posexplode(split(objects, ",")) `_objects` AS object, idx


OK

name    idx     object  objects

홍길동       카메라       0       카메라,라면,고기

홍길동       라면  1       카메라,라면,고기

홍길동       고기  2       카메라,라면,고기

홍길동       소고기       0       소고기,노트북

홍길동       노트북       1       소고기,노트북




+ Recent posts