티스토리 뷰
반응형
hive 에서는 Array 형태의 데이터를 풀어서 ROW 로 풀어내는게 가능하다. 이때 사용하는문법이 explode 이다.
posexplode 는 무엇이냐? 인덱스번호까지 알아야할 경우가 종종 있는데 이때는 posexplode 를 쓰면 된다.
이해를 돕기위해 아래와 같은 데이터가 존재한다고 가정하자. (v_sample)
beeline> select * from v_sample;
+------------------+-------------------------+
| v_sample.tags | v_sample.title |
+------------------+-------------------------+
| ["fun","happy"] | hello! my name is haha |
| [] | test |
+------------------+-------------------------+
2 rows selected (0.098 seconds)
explode 사용 예시
tags 를 row 풀어서 보고 싶다고 가정하면 아래와 같이 표현하면 된다.
단, explode 만 사용하면 emtpry array 나 NULL 은 생략되는데, 이 데이터도 같이 봐야한다면? outer explode 를 쓰면 된다.
-- explode 만 쓰면 null, empty array 는 제거된다
beeline> SELECT
tag,
title
FROM
v_sample
LATERAL VIEW explode(tags) items as tag;
+--------+-------------------------+
| tag | title |
+--------+-------------------------+
| fun | hello! my name is haha |
| happy | hello! my name is haha |
+--------+-------------------------+
2 rows selected (4.125 seconds)
즉, 아래와 같이 LATERAL VIEW outer explode 를 쓰면 된다.
주의할건 split() 을 이용하여 처리하여 array 를 만들어 낼때, split("", ",") 와 같은 결과값은 빈 배열이 아니라, [""] 배열이 리턴되므로 Array 타입이 아닌 문자열을 split 해서 사용할때는 주의가 필요하다.
-- empty array, null 도 풀어내려면 "outer explode" 를 써야한다.
beeline> SELECT
tag,
title
FROM
v_sample
LATERAL VIEW outer explode(tags) items as tag
;
+--------+-------------------------+
| tag | title |
+--------+-------------------------+
| fun | hello! my name is haha |
| happy | hello! my name is haha |
| NULL | test |
+--------+-------------------------+
3 rows selected (4.29 seconds)
posexplode
가끔 데이터를 풀고, 그게 배열의 몇번째 아이템인지 알아야 하는 경우가 가끔 있다.
예를 들어, 배열이 너무 커서 대표값으로 3개만 써야한다거나? 대표값으로 하나만 사용해야한다거나와 같이 응용이 필요한 경우가 있다. 이런경우는 explode 가 아닌 posexplode 를 사용하면 된다.
beeline> SELECT
idx,
tag,
title
FROM
v_sample
LATERAL VIEW outer posexplode(tags) items as idx, tag
;
+--------+-------+-------------------------+
| idx | tag | title |
+--------+-------+-------------------------+
| fun | 0 | hello! my name is haha |
| happy | 1 | hello! my name is haha |
| NULL | NULL | test |
+--------+-------+-------------------------+
3 rows selected (4.358 seconds)
이녀석도 explode 와 동일하게 outer 여부에 따라 null, 빈배열을 풀어낼지 말지 선택가능하므로 필요에 따라 골라서 조합해 사용하자.
반응형
'데이터처리 > Hive' 카테고리의 다른 글
[HIVE] 타입별 test 용 데이터 표현 방법 - map/struct/array (0) | 2023.12.12 |
---|---|
[HIVE] external table 이름 변경 후 location 까지 변경하는 방법 - 파티션 포함 (0) | 2023.12.01 |
[hive] KafkaStorageHandler 에서 Failed to construct kafka consumer 오류 해결하기 (0) | 2023.07.25 |
[hive] KafkaStorageHandler 에서 SASL_PLAINTEXT 인증모듈 사용하기 (0) | 2023.07.24 |
[hive] hive 에서 kafka 를 연동하고 집계하는 방법 - KafkaStorageHandler 를 써보자 (0) | 2023.07.21 |
댓글