这是关于更新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
如果问题不明确,请告诉我。
答案 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是否可更新以更改架构,否则您可以使其他表加载数据。