복붙노트

[HADOOP] INSERT OVERWRITE의 SELECT 쿼리가 결과를 반환하지 않는 경우 Hive 테이블이 덮어 쓰지 않도록하는 방법이 있습니까?

HADOOP

INSERT OVERWRITE의 SELECT 쿼리가 결과를 반환하지 않는 경우 Hive 테이블이 덮어 쓰지 않도록하는 방법이 있습니까?

HDFS 파일에서 하이브 테이블로 데이터를로드하는 배치 작업을 개발 중입니다. 데이터의 흐름은 다음과 같습니다.

이 흐름은 1 단계에서 외부 테이블을 읽을 파일이 입력 디렉터리에있는 경우 제대로 작동합니다. 파일이 없으면 외부 테이블은 비어있을 것이고 결과적으로 2 단계를 실행하면 최종 테이블이 비워집니다. 외부 테이블이 비어 있으면 최종 테이블 (이전 실행 중에로드 된 데이터)에 기존 데이터를 유지하려고합니다.

마지막 테이블이 일부 데이터로 덮어 쓰기 될 때만 덮어 쓸 수 있도록 설정할 수있는 하이브 속성이 있습니까?

HDFS 명령을 사용하여 입력 파일이 있는지, 조건부로 하이브 요청을 실행할 수 있는지 확인할 수 있습니다. 그러나 내가 Hive에서 직접 같은 동작을 달성 할 수 있는지 궁금해서이 여분의 검증을 피할 수있게되었습니다.

해결법

  1. ==============================

    1.더미 파티션을 테이블에 추가하려고하면 (예 : LOAD_TAG) 동적 파티션로드를 사용하십시오.

    더미 파티션을 테이블에 추가하려고하면 (예 : LOAD_TAG) 동적 파티션로드를 사용하십시오.

    set hive.exec.dynamic.partition=true;
    set hive.exec.dynamic.partition.mode=nonstrict;
    
    INSERT OVERWRITE TABLE your_table PARTITION(LOAD_TAG)
    select
          col1,
          ...
          colN,
          'dummy_value' as LOAD_TAG
      from source_table;
    

    귀하의 경우 파티션 값은 항상 동일해야합니다.

  2. from https://stackoverflow.com/questions/47451261/is-there-a-way-to-prevent-a-hive-table-from-being-overwritten-if-the-select-quer by cc-by-sa and MIT license