Hive:在主表上执行增量更新的最佳方式

所以我在Hive中有一个主表,它会存储我所有的数据。

我希望能够在大量数据量为几十亿行的情况下,每月加载增量数据更新。 将有新的数据以及更新的条目。

什么是最好的方法来处理这个问题,我知道Hive最近升级并支持更新/插入/删除。

我一直在想的是以某种方式find将被更新的条目,并从主表中删除它们,然后插入新的增量更新。 但是,尝试这样做后,插入非常快,但删除非常缓慢。

另一种方法是使用update语句来匹配主表中的键值和增量更新并更新其字段。 我还没有尝试过。 由于Hive必须逐一更新每个条目,这听起来也很慢。

任何人有任何想法,如何做到最有效和最有效的? 一般来说,我对Hive和数据库相当陌生。

如果您不想在ACID模式下更新,那么可以使用FULL OUTER JOIN进行更新。 要查找所有将要更新的条目,您需要使用旧数据连接增量数据:

insert overwrite target_data [partition() if applicable] SELECT --select new if exists, old if not exists case when i.PK is not null then i.PK else t.PK end as PK, case when i.PK is not null then i.COL1 else t.COL1 end as COL1, ... case when i.PK is not null then i.COL_n else t.COL_n end as COL_n FROM target_data t --restrict partitions if applicable FULL JOIN increment_data i on (t.PK=i.PK); 

可以通过限制target_data中将被覆盖和连接的分区来优化这一点。

另外,如果您想要使用新数据更新所有列,可以使用UNION ALL+row_number()应用此解决scheme: https : UNION ALL+row_number()