不使用Sub查询更新Hive表的列

时间:2017-03-29 19:31:03

标签: hadoop hive

这是关于更新Hive表中的新列的问题。由于我认为Hive不允许使用子查询更新现有表的列,因此我想问一下实现以下更新操作的最佳方法是什么。

我有以下两个示例表:

表A:

KeyId ValId Val
   W1 V1 10
   W2 V2 20

表B:

KeyId ValId Val
   W1 V1 10
   W1 V1 30
   W1 V3 40
   W1 V4 50
   W2 V2 0
   W2 V2 50
   W2 V2 70
   W2 V4 80

我想在表A中创建另一列,假设avgVal在表A中的每一行中获取KeyId和ValId,并获取表B中对应的KeyId和ValId的Val的平均值。因此,我的最终输出表应该是这样的:

更新了表A:

KeyId ValId Val avgVal
   W1 V1 10 20
   W2 V2 20 40

如果问题不明确,请告诉我。

2 个答案:

答案 0 :(得分:0)

您似乎正在尝试从表B中获取表A中的聚合值。在这种情况下,您不能拥有" val"表A中的列,因为在聚合后,您在表A中预期来自表B的val?

假设这是真正的错误,你删除" val"表a中的列,表a的insert语句应如下所示:

insert into table table_a select keyid,valid,avg(val) from table_b group by keyid,valid

答案 1 :(得分:0)

您可以使用以下查询来获取Table_B中与table_A中的行对应的大量数据: -

    select t1.keyid, t1.valid , t1.val , avgval from table_A t1 left join 
(select keyid as k , valid as v, avg(val) as avgval from Table_B group by keyid,valid )temp
 on k=t1.keyid and t1.valid=v;

您必须检查table_A是否可更新以更改架构,否则您可以使其他表加载数据。