使用子查询进行Hive更新

时间:2016-08-19 06:18:33

标签: sql hive

我试图从子查询更新Hive表,我知道hive不支持此类更新。这有什么解决办法吗?

我的更新看起来像这样

UPDATE tmp_aka
    SET guid = (SELECT mguid FROM tmp_maxs
                                        WHERE tmp_maxs.guid = tmp_aka.guid);

5 个答案:

答案 0 :(得分:2)

可能是您可以为select语句结果创建一个表,并插入一个新值,并将insert插入到新创建的表中的表选择值

答案 1 :(得分:2)

您可以在子查询中执行连接,以获得与上述查询中相同的值。请尝试使用以下查询:

< Initialization: 0.068667
< Transposition: 0.063927
---
> Initialization: 0.081022
> Transposition: 0.039169
4005c4005
< Print transposition: 3.901960
---
> Print transposition: 4.040136

答案 2 :(得分:2)

如果tmp_maxs包含tmp_aka的所有记录,则可以这样操作:

INSERT overwrite TABLE tmp_aka
SELECT tmp_aka.col1, tmp_aka.col2, …, tmp_maxs.mguid
FROM tmp_aka LEFT JOIN tmp_maxs ON tmp_aka.guid = tmp_maxs.guid

答案 3 :(得分:0)

要比较两个表中的值,您需要联接表,然后在子查询中比较值。希望对您有帮助。

UPDATE tmp_aka
    SET guid = (SELECT t1.mguid FROM tmp_maxs t1 LEFT JOIN tmp_aka t2 ON t1.guid = t2.guid);

答案 4 :(得分:0)

对于您的更新可能有一个更简单的解决方案

UPDATE tmp_aka
SET guid = (SELECT mguid FROM tmp_maxs
                                    WHERE tmp_maxs.guid IN tmp_aka.guid);