2017-03-01 6 views
1

My Hadoop Cluster는 11:00에 모든 데이터에 대해 배치 작업을 수행합니다.파티션과 관련된 hdfs 파일 삭제 후 하이브 테이블 파티션에 연결할 수 없습니다.

작업이 하이브 테이블 파티션을 생성합니다 (예. p_date = 201702, P_DOMAIN = 0)과 ETL 같은 하이브 테이블 파티션에 수입 RDBMS 데이터 .... (하이브 테이블이 외부 테이블 없음)

하지만, 작업이 실패했으며, 재 처리를 위해 일부 hdfs 파일 (파티션 위치 => p_date = 20170228, p_domain = 0)이 제거되었습니다.

그것은 내 실수, 직선에서 드롭 파티션 난 그냥 입력 쿼리 ...

내가 이런 식으로 쿼리 할 때 나는 요령 연락 "테이블 _에서 *를 선택할 경우 p_date = 20170228, P_DOMAIN = 0" 그러나 "select * from table_name where p_date = 20170228, p_domain = 6"은 성공합니다.

나는 오류 로그를 찾을 수 및 콘솔 메시지가

가 어떻게이 문제를 해결할 수 표시되지 않는 이유는 무엇입니까?

그리고 영어가 부족하다는 것을 이해하시기 바랍니다.

답변

1

그런 식으로 하이브 테이블에서 파티션을 삭제하면 안됩니다. 이 작업을 수행하는 특별한 명령이 있습니다.

ALTER TABLE table_name DROP IF EXISTS PARTITION (partitioncolumn = 'somevalue');

HDFS에서 파일을 삭제하는 것만으로는 충분하지 않습니다. 메타 스토어에서 데이터를 정리해야합니다. 이를 위해서는 관계형 데이터베이스에 연결하여 MetaStore 데이터베이스의 파티션 관련 테이블에서 데이터를 제거해야합니다.

mysql 

mysql> use hive; 

mysql> SELECT PART_ID PARTITIONS WHERE PART_NAME like '%p_date=20170228,p_domain=0%' 

+---------+-------------+------------------+--------------------+-------+--------+ 
| PART_ID | CREATE_TIME | LAST_ACCESS_TIME | PART_NAME   | SD_ID | TBL_ID | 
+---------+-------------+------------------+--------------------+-------+--------+ 
|  7 | 1487237959 |    0 | partition name  | 336 | 329 | 
+---------+-------------+------------------+--------------------+-------+--------+ 


mysql> DELETE FROM PARTITIONS WHERE PART_ID=7; 

mysql> DELETE FROM PARTITION_KEY_VALS WHERE PART_ID=7; 

mysql> DELETE FROM PARTITION_PARAMS WHERE PART_ID=7; 

이 하이브의 뒤에는이 파티션의 사용을 중단해야합니다.

+0

대단히 감사합니다. 하지만 귀하의 의견을하기 전에 ** 잠금 해제 ** 하이브 명령을 사용하여 내 문제를 해결합니다. 내 방식과 방식이 비슷한 것 같아요. –