2013-01-21 3 views
3

이 아파치 하이브 코드의 진정한 의미를 이해하는데 문제가 있습니다. 누군가이 코드가 실제로 무엇을하는지 여부를 설명해 주시겠습니까?아파치 하이브 생성 테이블

ALTER TABLE a RENAME TO a_tmp; 
DROP TABLE a; 
CREATE TABLE a AS SELECT * FROM a_tmp; 

답변

4
ALTER TABLE a RENAME TO a_tmp; 

이 단순히 a_tmp에 테이블을 a의 이름을 바꿀 수 있습니다.

의이 테이블 a 처음에 다음 데이터가 /user/hive/warehouse/a_tmp로 이동합니다이 명령 및 /user/hive/warehouse/a 것 더 이상 존재하지 않는 내용을 실행 한 후, /user/hive/warehouse/a를 가리키는 가정 해 봅시다. 이 HDFS 디렉토리 이동 동작은 최신 버전의 Hive에서만 존재합니다. 그 전에 RENAME 명령은 HDFS에서 디렉토리를 이동하지 않고 메타 스토어 만 업데이트하는 명령이었습니다.

마찬가지로 show tables을 수행하면 a이 더 이상 존재하지 않지만 a_tmp이 존재 함을 알 수 있습니다. 더 이상 메트로 스토어에 등록되어 있지 않으므로 더 이상 a을 쿼리 할 수 ​​없습니다. 이미 a_tmpa 이름을 변경하기 때문에

DROP TABLE a; 

이것은 기본적으로 아무것도하지 않습니다. 그러므로 a은 더 이상 메타 스토어에 존재하지 않습니다. 할 일이 없기 때문에 여전히 "OK"가 인쇄됩니다.

CREATE TABLE a AS SELECT * FROM a_tmp; 

당신은 a라는 새로운 테이블을 생성하고 메타 스토어에 등록하도록 요구하고있다. a_tmp (이미 복사 한 데이터는 a입니다.)

즉, 초기 테이블을 새 테이블로 이동 한 다음 새 테이블을 다시 복사하는 것과 동일한 데이터를 채우도록 요청하는 것입니다. 이 쿼리는 원래 데이터를 aa_tmp으로 복제하는 유일한 방법입니다.

+0

ok, thanks a lot – user1653240

+0

테이블에 원래 흥미로운 파일 형식 또는 SerDe가 있거나 그 밖의 다른 것이 있으면 다음과 같은 유형의 작업을 사용하여 변경할 수 있습니다. –

+0

s3에 원본 테이블이있는 경우 테이블을 다시 만들어 로컬 저장소로 이동할 수 있다고 말할 수 있습니다. – oivoodoo

관련 문제