이 아파치 하이브 코드의 진정한 의미를 이해하는데 문제가 있습니다. 누군가이 코드가 실제로 무엇을하는지 여부를 설명해 주시겠습니까?아파치 하이브 생성 테이블
ALTER TABLE a RENAME TO a_tmp;
DROP TABLE a;
CREATE TABLE a AS SELECT * FROM a_tmp;
이 아파치 하이브 코드의 진정한 의미를 이해하는데 문제가 있습니다. 누군가이 코드가 실제로 무엇을하는지 여부를 설명해 주시겠습니까?아파치 하이브 생성 테이블
ALTER TABLE a RENAME TO a_tmp;
DROP TABLE a;
CREATE TABLE a AS SELECT * FROM a_tmp;
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_tmp
에 a
이름을 변경하기 때문에
DROP TABLE a;
이것은 기본적으로 아무것도하지 않습니다. 그러므로 a
은 더 이상 메타 스토어에 존재하지 않습니다. 할 일이 없기 때문에 여전히 "OK"가 인쇄됩니다.
CREATE TABLE a AS SELECT * FROM a_tmp;
당신은 a
라는 새로운 테이블을 생성하고 메타 스토어에 등록하도록 요구하고있다. a_tmp
(이미 복사 한 데이터는 a
입니다.)
즉, 초기 테이블을 새 테이블로 이동 한 다음 새 테이블을 다시 복사하는 것과 동일한 데이터를 채우도록 요청하는 것입니다. 이 쿼리는 원래 데이터를 a
및 a_tmp
으로 복제하는 유일한 방법입니다.
ok, thanks a lot – user1653240
테이블에 원래 흥미로운 파일 형식 또는 SerDe가 있거나 그 밖의 다른 것이 있으면 다음과 같은 유형의 작업을 사용하여 변경할 수 있습니다. –
s3에 원본 테이블이있는 경우 테이블을 다시 만들어 로컬 저장소로 이동할 수 있다고 말할 수 있습니다. – oivoodoo