【问题标题】:Updating records in hive tables更新 hive 表中的记录
【发布时间】:2017-08-12 21:20:04
【问题描述】:

如何覆盖 hive 表的某些记录?
例如:
我有一个表 t1 有 100 条记录。现在我只需要覆盖这 100 条记录中的 30 条。

怎么做?

【问题讨论】:

    标签: hive hiveql overwrite


    【解决方案1】:

    Hive 从 Hive-0.14 开始支持 ACID 属性。使用 Hive 事务,您可以更新或删除现有记录。

    执行更新和删除操作需要遵循一些规则。您可以参考to this blog 了解 Hive 事务的更多详细信息和实现。

    【讨论】:

    • 基本上,我必须合并两个表。如果两个表的 ID 匹配,则第一个表中的记录必须被第二个表的记录覆盖。否则第二个表的记录将被插入到第一个表中。
    【解决方案2】:

    我的声誉太低,无法直接回复您的评论,但这里有一个方法来完成它:

    INSERT OVERWRITE TABLE table_a
    SELECT * FROM table_a a WHERE a.id NOT IN (SELECT id FROM table_b) 
    UNION ALL
    SELECT * FROM table_b;
    

    【讨论】:

    • NOT IN 在这种情况下的行为方式是否与NOT EXISTS 相同? documentation 明确表示要使用 NOT EXISTS
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-20
    • 1970-01-01
    • 2019-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多