Ale*_*lex 3 java hadoop hive nosql
所以我在Hive中有一个主表,它将存储我的所有数据.
我希望能够每月加载大量数据数十亿行的增量数据更新.将有新数据和更新的条目.
解决此问题的最佳方法是什么,我知道Hive最近升级并支持更新/插入/删除.
我一直在想的是以某种方式找到将要更新的条目并从主表中删除它们然后只插入新的增量更新.但是在尝试此操作后,插入速度非常快,但删除速度非常慢.
另一种方法是使用update语句执行某些操作以匹配主表和增量更新中的键值并更新其字段.我还没试过这个.这听起来也很痛苦,因为Hive必须逐个更新每个条目.
任何人都有任何想法,如何最有效和最有效地做到这一点?我对Hive和数据库很新.
如果您无法使用ACID模式进行更新,MERGE
则可以使用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);
Run Code Online (Sandbox Code Playgroud)
可以通过限制将被覆盖和连接的target_data中的分区来优化它.
此外,如果要使用新数据更新所有列,可以将此解决方案应用于UNION ALL+row_number()
:https://stackoverflow.com/a/44755825/2700344
归档时间: |
|
查看次数: |
1977 次 |
最近记录: |