[hive] hive 쿼리 where 조건의 in 사용시 메타 스토어 오류
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