配置单元-使用内联查询更新自语句

x4shl7ld  于 2022-09-27  发布在  Hive
关注(0)|答案(1)|浏览(113)

我有以下查询,我想在Hive中运行它,但Hive不支持更新中的内联查询。有谁能帮我在Hive中完成这个更新查询吗?

UPDATE TABLE1 FROM 
  (SELECT COUNT(*) AS NEW_COUNT
   FROM TABLE2
   WHERE XTRCT_DT IN (SELECT MAX(XTRCT_DT) FROM TABLE3)) AS T
SET TBL = T.NEW_COUNT
WHERE XTRCT_DT IN(SELECT MAX(XTRCT_DT) FROM TABLE4)  AND TN=1;

目前我使用的是高于3.0的配置单元版本。
我已尝试对此更新使用Merge语句,但没有成功。有人能帮忙吗?
这是我尝试使用的MERGE语句,但在ON子句中包含in时出错。

MERGE INTO TABLE1 USING (
SELECT COUNT(*) AS NEW_COUNT FROM TABLE2 WHERE XTRCT_DT IN(SELECT MAX(XTRCT_DT) FROM TABLE3)) AS T
ON XTRCT_DT IN(SELECT MAX(XTRCT_DT) FROM TABLE4)  AND TN=1
SET TBL=T.NEW_COUNT;
qacovj5a

qacovj5a1#

您的MERGE缺少WHEN MATCHED THEN UPDATE子句,并且在源子查询T和目标TABLE1之间没有联接条件。请将筛选日期移动到源子查询中,并使用它来联接:

MERGE INTO TABLE1
 USING (SELECT COUNT(*) AS NEW_COUNT,
   (SELECT MAX(XTRCT_DT) FROM TABLE4) AS MATCH_DT
   FROM TABLE2
   WHERE XTRCT_DT IN (SELECT MAX(XTRCT_DT) FROM TABLE3)
   ) AS T
ON XTRCT_DT = T.MATCH_DT AND TN=1
WHEN MATCHED THEN UPDATE
SET TBL=T.NEW_COUNT;

您可以将MATCH_DT的子查询与TABLE2交叉连接(不带ON子句的join),而不是使用SELECT列表中的标量子查询。

相关问题