복붙노트

[HADOOP] 추가 열 새로운 외부 테이블에 2 개 하이브 외부 테이블의 데이터를 삽입

HADOOP

추가 열 새로운 외부 테이블에 2 개 하이브 외부 테이블의 데이터를 삽입

다음과 같이 나는이 개 외부 하이브 테이블을 가지고있다. 나는 Sqoop을 사용하여 오라클에서 그 데이터를 채워왔다.

create external table transaction_usa
(
tran_id int,
acct_id int,
tran_date string,
amount double,
description string,
branch_code string,
tran_state string,
tran_city string,
speendby string,
tran_zip int
)
row format delimited
stored as textfile
location '/user/stg/bank_stg/tran_usa';

create external table transaction_canada
(
tran_id int,
acct_id int,
tran_date string,
amount double,
description string,
branch_code string,
tran_state string,
tran_city string,
speendby string,
tran_zip int
)
row format delimited
stored as textfile
location '/user/stg/bank_stg/tran_canada';

가있는 테이블에서 어떤 데이터가를 확인하기 위해 위의 두 테이블로하지만 1 추가 열이 모두 같은 필드가 1 개 외부 하이브 테이블에서와 같이 지금은 두 테이블의 데이터 위에 병합 할. SOURCE_TABLE과 같은 추가 열이있는 새로운 외부 테이블. 다음과 같이 새 외부 테이블입니다.

create external table transaction_usa_canada
(
tran_id int,
acct_id int,
tran_date string,
amount double,
description string,
branch_code string,
tran_state string,
tran_city string,
speendby string,
tran_zip int,
source_table string
)
row format delimited
stored as textfile
location '/user/gds/bank_ds/tran_usa_canada';

내가 어떻게 해.?

해결법

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

    1.각 테이블에서 선택하고 이러한 결과를 UNION 모든 작업을 수행하고 마지막으로 세 번째 테이블에 결과를 삽입 않습니다.

    각 테이블에서 선택하고 이러한 결과를 UNION 모든 작업을 수행하고 마지막으로 세 번째 테이블에 결과를 삽입 않습니다.

    아래는 최종 하이브 쿼리는 다음과 같습니다

    INSERT INTO TABLE transaction_usa_canada
    SELECT tran_id, acct_id, tran_date, amount, description, branch_code, tran_state, tran_city, speendby, tran_zip, 'transaction_usa' AS source_table FROM transaction_usa
    UNION ALL
    SELECT tran_id, acct_id, tran_date, amount, description, branch_code, tran_state, tran_city, speendby, tran_zip, 'transaction_canada' AS source_table FROM transaction_canada;
    

    이 도움말을 희망!

  2. ==============================

    2.당신은 아주 잘뿐만 아니라 수동 파티션에 의해 그것을 할 수 있습니다.

    당신은 아주 잘뿐만 아니라 수동 파티션에 의해 그것을 할 수 있습니다.

    CREATE TABLE transaction_new_table (
    tran_id int,
    acct_id int,
    tran_date string,
    amount double,
    description string,
    branch_code string,
    tran_state string,
    tran_city string,
    speendby string,
    tran_zip int
    )
    PARTITIONED BY (sourcetablename String)
    

    그런 다음 명령 아래 실행,

    load data inpath 'hdfspath' into table transaction_new_table   partition(sourcetablename='1')
    
  3. ==============================

    3.당신은 하이브의 절에 INSERT를 사용할 수 있습니다

    당신은 하이브의 절에 INSERT를 사용할 수 있습니다

    INSERT INTO TABLE table transaction_usa_canada 
    SELECT tran_id, acct_id, tran_date, ...'transaction_usa' FROM transaction_usa;
    
    INSERT INTO TABLE table transaction_usa_canada 
    SELECT tran_id, acct_id, tran_date, ...'transaction_canada' FROM transaction_canada;
    
  4. from https://stackoverflow.com/questions/37299136/insert-data-of-2-hive-external-tables-in-new-external-table-with-additional-colu by cc-by-sa and MIT license