我想从另一个表中更新一个表中某些列的数据。
对于cust_tabl表中的这三列cf_mng,cf_sds,cf_htg,没有数据。
我想更新cust_tabl的这三列cf_mng,cf_sds,cf_htg的数据 使用custom_hist表的三列cust_cd_cnt_1,cust_cd_cnt_2,cust_cd_cnt_3的数据。
此表格包含201505年至201509年的数据。
CREATE TABLE custom_hist(
cust_no varchar(20),
cust_cd_cnt_1 float,
cust_cd_cnt_2 float,
cust_cd_cnt_3 float,
cust_dt date,
cust_name string)
PARTITIONED BY (yyyymm int);
此表格包含201403至201606的数据。
CREATE TABLE cust_tabl(
cust_no string,
cf_mng double,
cf_sds double,
cf_htg double,
cust_loc string,
cust_region string,
cust_country string,
cust_reg_id smallint)
PARTITIONED BY (yyyymm int);
请帮帮我。
提前致谢。
答案 0 :(得分:1)
按主键加入表并覆盖已连接的分区。检查主键。连接基数应为1:1或1:0,否则您应该应用一些row_number
或rank
或某些聚合(如max()
)来限制加入后的行:
set hive.exec.dynamic.partition.mode=nonstrict;
set hive.exec.dynamic.partition=true;
insert overwrite table cust_tabl partition (yyyymm)
select
c.cust_no,
coalesce(h.cust_cd_cnt_1,c.cf_mng) as cf_mng, --take history column if joined
coalesce(h.cust_cd_cnt_2,c.cf_sds) as cf_sds, --take original if not joined
coalesce(h.cust_cd_cnt_3,c.cf_htg) as cf_htg,
c.cust_loc, --original columns
c.cust_region,
c.cust_country,
c.cust_reg_id,
c.yyyymm --partition is the last
from cust_tabl c
left join custom_hist h
--assume this is the primary key:
on c.cust_no = h.cust_no and c.yyyymm = h.yyyymm;