본문 바로가기

Hive, Impala, Tez

[부록] Hive 에서 만든 Table 이 Impala 에서 인식이 되지 않을 때

부제 : Impala INVALIDATE METADATA Statement


Hive 로 테이블을 만드는 경우
CREATE TABLE IF NOT EXISTS db_name.table_name
(user_id string, item_id string)
partitioned by (partition_name string);

Impala 에서

use db_name;
show tables;
# table_name 이라는 테이블이 없는 것을 볼 수 있다.


이유 is 뭔들. 

** 참고 : SQL Statement

자세한 내용은 위 링크를 봐도 좋다.

Impala 는 쿼리를 날릴때마다 Metadate 를 reload 하지 않는다. 그래서 Hive 에서 수정한 Metadata 를 available 하도록 하기 위해서는 아래와 같이 INVALIDATE METADATA 쿼리를 실행해주어야 한다. 여기서 REFRESH 쿼리와 혼동하면 안되는 것은 아직 테이블이 미 생성되었기 때문에 db_name.table_name 의 메타데이터는 없는 것으로 인식하는 중이다. 그렇기 때문에 테이블이 최초 생성 되었을 때는 INVALIDATE METADATA 쿼리를  실행시켜주어야만 한다. 


INVALIDATE METADATA db_name.table_name;

한번 메타데이터가 생성된 테이블은 그 뒤에 수정될경우 아래와 같이 REFRESH 만 해주어도 된다. 비용( performance 와 상반된 ) 적으로는 INVALIDATE METADATA 가 더 좋지 않기 때문에 Cloudera 에서 가급적 REFRESH를 쓰기를 권고한다.

REFRESH db_name.table_name;


위에서도 언급했지만 실수하기 좋은것은 처음 생성시엔 반드시 INVALIDATE METADATA 쿼리를 실행해 주어야 한다는 것! :)