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

Hadoop 不使用子查询更新配置单元表的列,hadoop,hive,Hadoop,Hive,这是一个关于更新配置单元表中新列的问题。因为我认为Hive不允许使用子查询更新现有表的列,所以我想问一下实现以下更新操作的最佳方法是什么 我有以下两个示例表: 表A: 密钥ID有效值 W1 V1 10 W2 V2 20 表B: 密钥ID有效值 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和

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

我有以下两个示例表:

表A:

密钥ID有效值
W1 V1 10
W2 V2 20

表B:

密钥ID有效值
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:

密钥ID有效值avgVal
W1 V1 10 20
W2 V2 20 40


如果问题不清楚,请告诉我

似乎您正试图从表B中获取表A中的聚合值。在这种情况下,表A中不能有“val”列,因为在聚合后,您希望表A中有表B中的哪个val

假设这是真正的错误,并且从表a中删除了“val”列,那么表a的insert语句应该如下所示:

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

您可以使用下面的查询来获取与表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;

您必须检查表A是否可更新才能更改架构,否则您可以创建其他表来加载数据。

您是否知道您的表是否可更新?