由于配置单元不支持更新。。。所以我想知道怎样才能在Hive里实现它。例如,我有表a和表b,它们与一个名为user\u id的键相链接。如有遗漏,可在表b中填写补货日期。因此,对于每个用户id,如果寄存器日期(在表a中)丢失,那么我想用表b中相应的b\u日期值填充它。有什么想法吗?谢谢!
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;
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;
7hiiyaii3#
更新从hive0.14开始提供,如这里所述。你现在有充分的理由升级。如果无法升级配置单元,可以通过连接表-a和表-b来创建新的临时表,然后删除表-a并将临时表重命名为表-a。
3条答案
按热度按时间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;
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;
7hiiyaii3#
更新从hive0.14开始提供,如这里所述。你现在有充分的理由升级。
如果无法升级配置单元,可以通过连接表-a和表-b来创建新的临时表,然后删除表-a并将临时表重命名为表-a。