2013-10-07 6 views
1

후 해당 테이블을 덮어 :돼지 : 테이블의로드, 다음의 내가 테이블이 있다고 가정 해 봅시다 변환

db.table 

나는 테이블을로드하고 일부 변환을 수행하고를, 마지막으로, 시도는 그것을

를 저장
mytable = LOAD 'db.table' USING HCatLoader(); 

. 
. 
-- My transforms 
. 
. 

STORE mytable_final INTO 'db.table' USING HCatStorer(); 

그러나 코드는 기존 데이터가있는 테이블에 쓰고 있다고 불평합니다.

난이 JIRA ticket, 내가 보이지 않는 (내가 사용하는 시도하고 스토어 명령에서 여러 장소에서 덮어 쓴 것) 보았다.

나는 또한 this SO 게시물을 보았지만 저자는 한 위치에서로드하고 다른 위치에 저장하고 있습니다. 해당 게시물에있는 것을 사용하면 변환 결과에 데이터가 없습니다. 파일을 삭제하는 것은 옵션이 아닙니다. 나는 일시적으로 파일을 저장할 생각이지만, 이것이 최선의 선택인지는 모르겠다.

하이버에서 INSERT OVERWRITE를 사용하여 동작을 얻으려고합니다.

+0

"파일을 삭제하는 것이 옵션이 아닙니다." –

+0

Pig를 DAG (즉, 변환)에서 실행하도록 저장소를 수행하기 전에 파일을 삭제하는 것이 옵션이 아니라는 것을 명확히해야합니다. 우리가 그렇게한다면 결과는 아무 것도 얻지 못합니다. –

+0

다음 예외가 발생하는 유사한 문제에 직면하고 있습니다. org.apache.hcatalog.common.HCatException : 2003 : 파티셔닝되지 않은 테이블에 이미 데이터가 포함되어 있습니다 : tablename. 내 테이블을 외부 테이블로 변경했을 때 예외는 사라졌지만 스크립트는 예외 스택 트레이스가 없어도 여전히 실패하고 있습니다. –

답변

2

저는 HCatLoaderHCatStorer에 익숙하지 않습니다. 그러나 LOAD에서 STORE에서 HDFS로 이동하면 Pig는 스크립트 내에서 삭제 및 이동을 수행 할 수있는 쉘 명령을 제공합니다.

STORE A INTO '/this/path/is/temporary'; 
RMF '/this/path/is/permanent'; 
MV '/this/path/is/temporary' '/this/path/is/permanent'; 
관련 문제