基于另一个表更新配置单表中的列

时间:2018-01-30 15:58:36

标签: hadoop hive hiveql

我有一种情况需要根据另一个表中的某些条件更新列的值。数据如下:

ID  Date   Amount
00  02/01  0
00  02/01  0
01  05/01  100
01  05/01  0

另一张表包含以下内容:

ID  Date   Amount
00  02/01  0
00  02/01  0

我需要更改第二个表中的日期列以匹配第一个表中ID“01”的日期值。我尝试了加入它的选项,但它似乎无法正常工作。什么是最简单的解决方案?

2 个答案:

答案 0 :(得分:1)

插入覆盖表table2选择t1.id,t2.Date,t2.amount from table2 t2 left join table t1 on t1.id = t2.id

如果您在table1中缺少ID缺省值,则可以包含when case

插入覆盖表table2 select case(当t1.id为null)然后0 else t1.id end,t2.Date,t2.amount from table2 t2 left join table t1 on t1.id = t2.id

希望这可以解决您的问题。

答案 1 :(得分:0)

您可以创建一个新表并删除旧表,因为除非表中设置了事务属性,否则无法更新表。

create new_table2 
location 'HDFS path' as 
select t2.id,d.date,t2.amount
from table2 t2 
cross join (select max(date) as date from table1 where id='01') d;
/*This assumes there is one distinct date for id=01 in table1*/

drop table table2 purge;