복붙노트

[HADOOP] 하나의 insert 문을 사용하여 여러 파티션에 데이터 삽입

HADOOP

하나의 insert 문을 사용하여 여러 파티션에 데이터 삽입

테이블 A와 테이블 B가 있는데, 여기서 B는 X라는 필드를 사용하는 A의 분할 된 테이블입니다.

A에서 B로 데이터를 삽입하려면 일반적으로 다음 명령문을 실행합니다.

INSERT INTO TABLE B PARTITION(X=x) SELECT <columnsFromA> FROM A WHERE X=x

이제 달성하고자하는 것은 X 범위를 삽입 할 수 있다는 것입니다. x1, x2, x3을 말합시다. 하나의 문장으로 어떻게 이것을 달성 할 수 있습니까?

해결법

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

    1.동적 파티션로드를 사용하십시오.

    동적 파티션로드를 사용하십시오.

    set hive.exec.dynamic.partition=true;
    set hive.exec.dynamic.partition.mode=nonstrict;
    
    INSERT OVERWRITE TABLE table_B PARTITION(X)
    select 
    col_1,
    col_2,
    ...
    col_N,
    X --partition column is the last one
     from 
          table_A
    where X in ('x1', 'x2', 'x3'); --filter here
    

    또는 A와 B의 열 순서가 동일한 경우 select * from table_A를 사용하십시오. 파티션 열 (X)은 마지막 열이어야합니다.

  2. from https://stackoverflow.com/questions/48901332/insert-data-in-many-partitions-using-one-insert-statement by cc-by-sa and MIT license