如何根据hive中的另一个表b替换表a中的值?

sg2wtvxw  于 2021-06-02  发布在  Hadoop
关注(0)|答案(3)|浏览(634)

由于配置单元不支持更新。。。所以我想知道怎样才能在Hive里实现它。
例如,我有表a和表b,它们与一个名为user\u id的键相链接。如有遗漏,可在表b中填写补货日期。
因此,对于每个用户id,如果寄存器日期(在表a中)丢失,那么我想用表b中相应的b\u日期值填充它。
有什么想法吗?谢谢!

xeufq47z

xeufq47z1#

转到更新配置单元0.14。
将表a的数据移到表c。然后对表b和表c进行连接(给出条件并相应地选择)。然后插入表a。然后放下表c。
插入表C从表a中选择*
如果(tablec.register\u date为空,tableb.b\u date)from tableb join tableb.user\u id=tablec.user\u id,则插入到tablea选择用户\u id
放置表格C;

qaxu7uf2

qaxu7uf22#

您可以使用case语句来执行此操作:假设您要更新表\列名称user\ id。
如果user\u id为null,则您希望使用表b的列更新哪个b\u日期,然后可以通过触发以下查询来执行此操作:
选择case when a.user\u id is null or len(trim(user\u id)==0),然后选择b.b\u date else a.user\u id end as user\u id from table\u a join table\u b on a.id=b.id;

7hiiyaii

7hiiyaii3#

更新从hive0.14开始提供,如这里所述。你现在有充分的理由升级。
如果无法升级配置单元,可以通过连接表-a和表-b来创建新的临时表,然后删除表-a并将临时表重命名为表-a。

相关问题