Измените запрос для этого запроса слияния, чтобы получить тот же результат, используя запрос вставки перезаписи в hive

#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