不使用子查询更新配置单元表的列

nwlqm0z1  于 2021-05-29  发布在  Hadoop
关注(0)|答案(2)|浏览(300)

这是一个关于更新配置单元表中的新列的问题。因为我认为hive不允许使用子查询更新现有表的列,所以我想问一下实现以下更新操作的最佳方法是什么。
我有以下两个示例表:
表a:
密钥ID有效值
w1第10版
w2版本20
表b:
密钥ID有效值
w1第10版
w1版本30
w1 v3 40型
w1 v4 50型
w2版本0
w2 v2 50型
w2版本70
w2 v4 80版
我想在表a中创建另一列,假设avgval取表a中每行的keyid和valid,并取对应keyid和valid在表b中的平均值。因此,我的最终输出表应该如下所示:
更新表a:
密钥ID有效值avgval
w1版本10 20
w2版本20 40
如果问题不清楚,请告诉我。

lnlaulya

lnlaulya1#

您可以使用下面的查询来获取与表a中的行相对应的表b中数据的平均值:-

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;

您必须检查表\u a是否可更新才能更改模式,否则您可以创建其他表来加载数据。

ttp71kqs

ttp71kqs2#

似乎您正试图从表b中获取表a中的聚合值。在这种情况下,表a中不能有“val”列,因为在聚合之后,表a中需要哪个val来自表b?
假设这是真正的错误,并且从表a中删除了“val”列,那么表a的insert语句应该如下所示:

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

相关问题