[HADOOP] HIVE 삽입 분할 된 테이블로 덮어
HADOOPHIVE 삽입 분할 된 테이블로 덮어
나는 파티션 테이블에 삽입 덮어 쓰기를 실행. 명령 후, 예를 들어 아래의 파티션이 생성됩니다 말한다. 에이 비 씨 디이
지금은 삽입 덮어 쓰기 테이블,하지만 데이터의 완전히 다른 세트로 시간을 다시 실행합니다. 2 삽입 한 후, 아래의 파티션이 생성 얻을, 예를 들어 말. F, G, H, I, J
설문 번째 인서트의 데이터가 먼저 삽입에 속하는 데이터를 덮어 쓰지. 난 여전히 폴더 2 삽입 후 HDFS에서 A, B, C, D, E를 참조하십시오. 하지만 HIVE를 통해 쿼리 할 때, A, B, C, D 파티션, 전자는 표시되지 않습니다.
이 삽입 덮어 쓰기 테이블의 예상되는 행동인가? 또는 여기 아무것도 실종?
해결법
-
==============================
1.다음은 몇 가지 샘플 스크립트와 그 효과입니다.
다음은 몇 가지 샘플 스크립트와 그 효과입니다.
이제 우리는 세 개의 필드, A, B, 그리고 C, 2 개 개의 파티션 필드 YEAR 및 MONTH와 테이블 SOME_TABLE 있다고 가정 해 봅시다. 이제 우리는 테이블에 데이터가 아니라 테이블의 구조를 삭제할 것을 가정 해 보자.
1. 어떤 파티션 사양하지
우리가 실행하는 경우
INSERT OVERWRITE TABLE SOME_TABLE PARTITION ( YEAR ,MONTH ) SELECT A,B,C,YEAR,MONTH FROM SOME_TABLE WHERE FALSE
다음 쿼리는 실행하지만 데이터가 유지됩니다.
2. 부분 파티션 사양
우리가 실행하는 경우
INSERT OVERWRITE TABLE SOME_TABLE PARTITION ( YEAR=2018 ,MONTH ) SELECT A,B,C,MONTH FROM SOME_TABLE WHERE FALSE
다음 같은 상황이 발생합니다 데이터가 유지됩니다.
3. 전체 파티션 사양
우리가 실행하는 경우
INSERT OVERWRITE TABLE SOME_TABLE PARTITION ( YEAR=2018 ,MONTH=11 ) SELECT A,B,C FROM SOME_TABLE WHERE FALSE
단지 다음 데이터가 삭제되고, 단지 특정 연도와 달. 다른 파티션의 데이터는 삭제되지 않습니다.
어떤 파티션이 삭제되지 않았는지주의 및 INSERT의 덮어 쓰기를 실행하기 전에 존재하는 것을 포함하여 모든 파티션을 반환 SOME_TABLE 쇼 파티션.
사이드 참고 : 나는 기존의 모든 데이터를 삭제하는 방법이 있는지 알고 호기심하지만 테이블 구조를 유지하는 것입니다. DROP 테이블 구조를 드롭한다. DROP 파티션은 대상 파티션을 삭제 것 ... 표를 ALTER, 그래서 우리는 각 파티션 필드가 소요 값의 어떤 범위를 미리 알고 있어야합니다. 이 예제에서, 우리는 할 수
ALTER TABLE SOME_TABLE DROP PARTITION(year>=0,month>0) PURGE;
하지만 여전히 너무 복잡 솔루션을 보인다.
-
==============================
2.이상하다. 나는 위의 시나리오를 시도했지만 다른 결과를 참조하십시오. 우선 인서트 A, B, C, D, E의 파티션을 생성하는 덮어 않았다. 쇼 PARTITIONS뿐만 아니라 데이터를 반환 검색어를 선택을 할 수 명령을 통해 그들을 볼 수.
이상하다. 나는 위의 시나리오를 시도했지만 다른 결과를 참조하십시오. 우선 인서트 A, B, C, D, E의 파티션을 생성하는 덮어 않았다. 쇼 PARTITIONS뿐만 아니라 데이터를 반환 검색어를 선택을 할 수 명령을 통해 그들을 볼 수.
그럼 난 g, f를 다섯 개의 새로운 paritions을 만들어 또 다른 삽입 덮어 쓰기는 H, I, J,했다. 내가 SHOW 파티션을 할 때 나는에서 J까지의 모든 파티션을 참조하십시오. 또한 데이터는 모든 파티션에 그대로 선택 문을 통해 가져올 수 있어요.
다음 단계로 내가 기존 파티션에 데이터를로드하는 시도는 말을하고 그 데이터가 파티션에 기존 데이터를 덮어 씁니다 볼 수 있었다. 이것은 예상 된 동작입니다.
당신이 그것으로 테이블 및로드 데이터를 생성하는 데 사용되는 문장을 공유하십시오.
-
==============================
3.하이브에 덮어으로 삽입하여 기존의 모든 데이터를 삭제하고, (당신이 당신의 테이블을 만들 때) 당신이 이전에 생성 된 파티션에 새로운 데이터를 쓰기보다. 당신은 파티션을 만들 때, 그들은 메타 데이터를 하이브 추가됩니다,하지만 당신은 파티션이나 table.Thus을 떨어질 때까지 그들은 당신이``테이블 overwrite`, 그 파티션은 여전히 새로운 데이터에 적용 할 때, 거기에있어.
하이브에 덮어으로 삽입하여 기존의 모든 데이터를 삭제하고, (당신이 당신의 테이블을 만들 때) 당신이 이전에 생성 된 파티션에 새로운 데이터를 쓰기보다. 당신은 파티션을 만들 때, 그들은 메타 데이터를 하이브 추가됩니다,하지만 당신은 파티션이나 table.Thus을 떨어질 때까지 그들은 당신이``테이블 overwrite`, 그 파티션은 여전히 새로운 데이터에 적용 할 때, 거기에있어.
from https://stackoverflow.com/questions/40143249/hive-insert-overwrite-into-a-partitioned-table by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] hadoop.security - UserGroupInformation.getLoginUser (UserGroupInformation.java) (0) | 2019.09.18 |
---|---|
[HADOOP] 이 / tmp를 / 아래 디렉토리를 만들 수 없습니다로 충돌 원사 타임 라인 서비스 (0) | 2019.09.18 |
[HADOOP] 이진 입력이 하둡 스트리밍 작업? (0) | 2019.09.18 |
[HADOOP] 클러스터를 하둡과 "하둡 단지"로 실행하는 실행 항아리 보내기 (0) | 2019.09.18 |
[HADOOP] 어떻게 하이브 저장 데이터 (HDFS에서로드)? (0) | 2019.09.18 |