java – Hive:在主表上执行递增更新的最佳方法

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

我希望能够加载每月的增量数据更新
拥有大量数据的十亿行.会有新数据
以及更新的条目.

解决此问题的最佳方法是什么,我知道Hive最近升级并支持更新/插入/删除.

我一直在想的是以某种方式找到将要更新的条目并从主表中删除它们然后只插入新的增量更新.但是在尝试此操作后,插入速度非常快,但删除速度非常慢.

另一种方法是使用update语句执行某些操作以匹配主表和增量更新中的键值并更新其字段.我还没试过这个.这听起来也很痛苦,因为Hive必须逐个更新每个条目.

任何人都有任何想法,如何最有效和最有效地做到这一点?
我对Hive和数据库很新.

解决方法:

如果您无法使用MERGE在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():https://stackoverflow.com/a/44755825/2700344

相关文章

校园网上订餐系统系统主要功能模块包括公告内容(公告栏、轮...
从今天开始,正式进入项目阶段。本次的项目是跟着黑马的瑞吉...
在可预见的将来,IT不会萎缩,只会越发展越庞大,最终会渗透...
vulntarget-b靶场最详细通关记录。
MongoDB是一个开源、高性能、支持海量数据存储的。
【NoSQL数据库技术与应用】课本代码、课后答案(持续更新)