Cloudera CDH/CDP 및 Hadoop EcoSystem, Semantic IoT등의 개발/운영 기술을 정리합니다. gooper@gooper.com로 문의 주세요.
임시 테이블(db_enc.hue_user_tmp)에서 데이터를 읽어서 partitioned table(db_enc.hue_user_test)에 데이터를 입력하는 impala SQL문장으로 모두 동일한 결과를 갖는다.
(임시 테이블과 최종 테이블의 table layout은 동일하며 최종 테이블에는 partition용 column이 한개 더 있다)
Kudu table을 이용하여 Parquet table을 생성하는 경우 Kudu table은 컬럼 순서가 달라서 컬럼을 일일이 지정해 주어야 하고 파티션 컬럼은 select의 마지막에 지정해줘야 한다
-- CTAS로 table을 생성하는 SQL 예시
1. create table db_enc.tb_hue_user partitioned by(partition_date) stored as parquet location '/ENC/DB_ENC/hue_user'
as select user_name, account, sentry_group, hue_last_login_date, hue_active_status, update_date, user_id, partition_date from db.hue_user;
2. create table db_enc.tb_query_history partitioned by (partition_date) stored as parquet location '/ENC/DB_ENC/query_history' as select * from db.query_history;
-- insert into 를 사용하는 다양한 SQL 예시 (아래의 4가지는 동일한 결과를 나타낸다.)
1.
insert into db_enc.hue_user_test(user_name, account, sentry_group, hue_last_login_date, hue_active_status, update_date, user_id) partition(partition_date='${partition_date}')
select user_name, account, sentry_group, hue_last_login_date, hue_active_status, update_date, user_id from db_enc.hue_user_tmp;
2.
insert into db_enc.hue_user_test(user_name, account, sentry_group, hue_last_login_date, hue_active_status, update_date, user_id) partition(partition_date)
select user_name, account, sentry_group, hue_last_login_date, hue_active_status, update_date, user_id, '${partition_date}' as partition_date from db_enc.hue_user_tmp;
3.
insert into db_enc.hue_user_test partition(partition_date)
select *, '${partition_date}' as partition_date from db_enc.hue_user_tmp;
4.
insert into db_enc.hue_user_test partition(partition_date='${partition_date}')
select * from db_enc.hue_user_tmp;