hive - 如何将合并查询转换为插入覆盖查询
问题描述
SQL -
MERGE into (target table) trg USING (source table) 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)
解决方案
UPDATE trg
SET trg.status = src.status,
trg.archernumber = src.archernumber,
trg.load_timestamp = src.load_timestamp
FROM target table AS trg
INNER JOIN source table AS src
ON src.incidentnumber = trg.incidentnumber
WHERE trg.status <> src.status AND src.archernumber IS NOT NULL
INSERT INTO (target table)
(
archernumber,
incidentnumber,
sent,
recipient,
cc,
bcc,
policyname,
policyrule,
dismisalreason,
status,
country,
load_timestamp,
load_job,
sent_yyyymm
)
SELECT 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 source table AS src
LEFT JOIN target table AS trg
ON src.incidentnumber = trg.incidentnumber
WHERE trg.incidentnumber IS NULL
推荐阅读
- android - 在 Android 的 dimen 文件中定义边距和填充
- c# - C# 和 SQL 动态 where 子句
- javascript - react-router-dom - 将参数添加到索引 url 但接受页面
- apache2 - 如何在 apache 2.4 RewriteRule 中使用发布数据规则编写替换和重定向 url(两者同时)?
- java - libgdx如何创建自己的textureregionLoader
- java - 清理 Excel 表格(替换文本)
- c++ - c ++三角函数返回意外值
- python - 自动化 C 脚本以处理多个文件
- shell - 从命令行参数将密码传递给 CVS 登录
- powerapps - PowerApps:如何从表导航到另一个表