#sql #hive
Вопрос:
Как чередовать запрос для этого запроса слияния, чтобы получить тот же результат, используя запрос вставки перезаписи в hive?
MERGE into cirt_16039.v_msdlp_incidentinformationcap_insight trg USING cirt_16039.v_msdlp_incidentinformationcap_stage src ON src.incidentnumber = trg.incidentnumber
WHEN MATCHED AND (trg.status != src.status AND src.archernumber IS NOT NULL) THEN UPDATE SET status =src.status, archernumber=src.archernumber, load_timestamp=src.load_timestamp
WHEN NOT MATCHED THEN INSERT VALUES ( src.archernumber, src.incidentnumber, src.sent, src.recipient, src.cc, src.bcc, src.policyname, src.policyrule, src.dismisalreason, src.status, src.country, src.load_timestamp, src.load_job, src.sent_yyyymm);
Ответ №1:
Вы можете использовать ниже SQL. Комментарии объяснят, как это работает.
insert overwrite cirt_16039.v_msdlp_incidentinformationcap_insight
select -- Existing records so UPDATE
src.archernumber, src.incidentnumber, src.sent,src.recipient,src.cc, src.bcc,
src.policyname, src.policyrule, src.dismisalreason, trg.status, src.country,
trg.load_timestamp, src.load_job, src.sent_yyyymm
from
cirt_16039.v_msdlp_incidentinformationcap_stage src,
cirt_16039.v_msdlp_incidentinformationcap_insight trg
where
--trg.status != src.status AND -- Pls note you do not need this conditoin since if status is same then no harm in updating it from trg.
src.incidentnumber = trg.incidentnumber
union all
select --New records so INSERT
src.archernumber, src.incidentnumber, src.sent, src.recipient, src.cc, src.bcc, src.policyname,
src.policyrule, src.dismisalreason, src.status, src.country, src.load_timestamp, src.load_job, src.sent_yyyymm
from cirt_16039.v_msdlp_incidentinformationcap_stage src
left join cirt_16039.v_msdlp_incidentinformationcap_insight trg on
src.incidentnumber = trg.incidentnumber
where
trg.incidentnumber is null -- This condition will select only new records.
Комментарии:
1. можем ли мы найти альтернативу последнему «не в»
2. конечно. вы можете добавить левое соединение и оно равно нулю. я изменил sql