hive의 쿼리에서 in 을 이용하여 데이터를 비교할 때 다음과 같이 transform 구문을 이용하여 처리하였다.
그랬는데 비교부분 테이블의 파티션이 늘어나면서 다음과 같이 BufferOverflowException 이 발생하였다.
SELECT *
FROM table1
WHERE create_date in (
select explode( split( yyy.date_list, ',' ) )
...
)
파티션의 정보를 비교하다가 버퍼 오퍼플로우 익셉션이 발생하였다.
2018-09-09T01:11:11,111 WARN [pool-5-thread-200([])]:
metastore.MetaStoreDirectSql (MetaStoreDirectSql.java:executeWithArray(1750)) - Failed to execute [
select "PARTITIONS"."PART_ID"
from "PARTITIONS" inner join "TBLS" on "PARTITIONS"."TBL_ID" = "TBLS"."TBL_ID"
and "TBLS"."TBL_NAME" = ? inner join "DBS" on "TBLS"."DB_ID" = "DBS"."DB_ID"
and "DBS"."NAME" = ?
where "PARTITIONS"."PART_NAME" in (?,?,?,?,?,?,
java.nio.BufferOverflowException
우선 해결방법은 쿼리의 in 비교 부분을 explode 로 하지 않고 고정 문자열로 하던지, between 구문으로 수정한다.
그리고 하이브 메타스토어를 재실행한다.
hive --service metastore
'빅데이터 > hive' 카테고리의 다른 글
[hive] hive에서 함수용 테스트 array, map 데이터 생성하는 법 (0) | 2018.04.12 |
---|---|
[hive] rank() 함수 처리중 Caused by: org.apache.hive.com.esotericsoftware.kryo.KryoException: java.lang.IndexOutOfBoundsException (0) | 2018.04.09 |
[hive] Hive의 데이터를 CSV 형태의 파일로 export 하는 방법 (0) | 2018.03.30 |
[hive] 하이브에서 insert, delete, update 사용 (0) | 2018.03.30 |
[hive] CBO처리중 힌트 사용시 오류 (0) | 2018.03.29 |