hadoop - 컴투스 - hive란




파티션이있는 하나의 하이브 테이블에서 다른 하이브 테이블로 데이터로드 (3)

삽입 쿼리에서 파티션 정보가 누락 되었기 때문입니다.

  insert overwrite table reg_logs_org PARTITION (utc_date)
  select id, region_code, sum(count), utc_date
  from 
  reg_logs
  group by 
  utc_date, id, region_code

하나의 하이브 테이블에 데이터가 있고 또 다른 하이브 테이블에 데이터를로드하고 싶습니다.

원본 테이블은 2 개의 파티션, 날짜 및 시간이있는 reg_logs입니다. 데이터는 시간별로이 테이블에로드됩니다. 스키마는 다음과 같습니다.

CREATE EXTERNAL TABLE IF NOT EXISTS reg_logs (
id int,
region_code int,
count int
)
PARTITIONED BY (utc_date STRING, utc_hour STRING)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
STORED AS TEXTFILE
LOCATION '/ad_data/raw/reg_logs';

대상 테이블은 reg_logs_org입니다. 내가하고 싶은 것은 utc_hour 컬럼 옆의 reg_logs에서 모든 데이터를 복사하는 것입니다.

내가 만든 스키마는 다음과 같습니다 (잘못된 경우 수정하십시오).

CREATE EXTERNAL TABLE IF NOT EXISTS reg_logs_org (
id int,
region_code int,
count int
)
PARTITIONED BY (utc_date STRING)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
STORED AS TEXTFILE
LOCATION '/ad_data/reg_logs_org';

reg_logs에서 reg_logs_org로 데이터를 삽입하십시오.

insert overwrite table reg_logs_org
select id, region_code, sum(count), utc_date
from 
reg_logs
group by 
utc_date, id, region_code

에러 메시지:

 FAILED: SemanticException 1:23 Need to specify partition columns because the destination table is partitioned. Error encountered near token 'reg_logs_org'

==

Thank you,
Rio

어떤 경우에는 파티션 된 테이블에 데이터를 삽입 할 수 있도록 hive.exec.dynamic.partition.mode = nonstrict를 설정해야 할 수도 있습니다 (예 :

CREATE TABLE hivePartitionedTable
(
          c1    int
        , c2    int
        , c3    string
)
PARTITIONED BY (year  int)
ROW FORMAT DELIMITED
    FIELDS TERMINATED BY ','
STORED AS SEQUENCEFILE
;

이 INSERT가 작동합니다 :

set hive.exec.dynamic.partition.mode=nonstrict;

INSERT INTO hivePartitionedTable PARTITION (year)
VALUES (1,2,'3', 1999);

데이터를 삽입하는 동안 마지막 열로 분할 된 열을 사용하는 것이 필수입니다. Hive는 마지막 열에있는 데이터를 가져옵니다.

그래서 그 삽입 쿼리를 기반으로해야합니다 :

  insert overwrite table reg_logs_org PARTITION (utc_date)
  select id, region_code, sum(count), utc_date
  from 
  reg_logs
  group by 
  utc_date, id, region_code

documentation :

동적 파티션 열은 SELECT 문의 열 중 마지막으로 PARTITION () 절에 나타나는 것과 같은 순서로 지정 해야합니다





hive