2017-02-06 3 views
0

기존 버킷 테이블에 YEAR, MONTH, DAY 파티셔닝이 있지만 추가 테이블을 INGESTION_KEY (기존 테이블에없는 컬럼)으로 추가하려고합니다. 이것은 향후 테이블 삽입을 수용하기 위해서 해당 날짜에 데이터를 취할 때마다 OVERWRITEYEAR, MONTH, DAY 파티션을 가질 필요가 없습니다. 간단하게 INSERT INTO을 수행하고 새로운 INGESTION_KEY 파티션을 만들 수 있습니다.파티션 디렉토리를웨어 하우스에 복사하여 하이브 관리 테이블 복사

새 테이블에 1 년 동안의 데이터가 필요하므로 기존 테이블의 파티션을 새 테이블로 복사하고 싶습니다. 각 파티션마다 Hive INSERT을 사용하는 대신에 distcp을 사용하여 HDFS의 Hive웨어 하우스 디렉토리에있는 새 테이블의 파티션 디렉토리에 파일을 복사 한 다음 새 테이블에 ADD PARTITION을 복사하는 것이 더 빠를 것이라고 생각했습니다.

그래서,이 내가 뭘 전부입니다 :

hadoop distcp /apps/hive/warehouse/src_db.db/src_tbl/year=2017/month=02/day=06 /apps/hive/warehouse/dest_db.db/dest_tbl/year=2017/month=02/day=06/ingestion_key=123 

hive -e "ALTER TABLE dest_tbl ADD PARTITION (year=2017,month=02,day=06,ingestion_key='123')" 

모두 관리 테이블, dest_tblsrc_tbl로 버킷 같은 번호로 같은 열을 기준으로 클러스터 된 새 테이블, 그리고 유일한 차이점은 in schema는 INGESTION_KEY이 추가 된 것입니다.

지금까지 나의 SELECT * FROM dest_tbl은 정상적으로 보이는 새 테이블의 모든 것을 보여줍니다. 그래서 내 질문은 :이 접근 방식에 문제가 있습니까? 이 방법으로 관리되는 양동이 테이블에 INSERT이 안 좋은가? 또는 복사 된 데이터에 변환이 수행되지 않은 경우 INSERT에 대한이 대안을 사용할 수 있습니까?

감사합니다.

+0

백업/복원 작업이 아니라 'INSERT'로 생각하면 안됩니다. Hive 메타 스토어는 디렉터리 구조의 데이터 파일 만 추적합니다. 그래서 파일 구조가 메타 데이터와 일치하는 한, 그것은 공평합니다. –

+0

BTW는 생산 데이터를 샘플링하여 테스트 또는 QA 클러스터에 제공하는 편리한 방법이기도합니다 ... –

답변

2

내가 하이브 쿼리 복사를 선호하지만 단지 하이브에 모든 것을 만들지 만, 그것은 다른 도구를 사용하여 데이터 파일을 복사 좋아하지만 할 ...는

  • 새로운 파티션을 추가 전용 명령이 메타 데이터, 당신은 alter table add partition..의 장소에서 사용할 수 있으며, 한 번에 여러 파티션을 추가 할 수 있습니다 partionKey=partitionValue

  • :

    MSCK REPAIR TABLE dest_tbl; 
    
  • 보관할 하이브 기본 파티션 형식을 사용하여