逻辑一
INSERT OVERWRITE TABLE tablename_1(全量表)
SELECT A.*
FROM tablename_1 A
LEFT JOIN tablename_2(增量表) B
ON A.ID = B.ID
WHERE B.ID IS NULL
UNION ALL
SELECT B.*
FROM tablename_2 B
逻辑二
全量表建表时增加一个分区字段(requestdt)
PARTITIONED BY (requestdt date)
(数据量较多时,比如一些主表 推荐使用)
set hive.exec.dynamic.partition = true;
set hive,exec.dynamic.partition.mode = nonstrict;
INSERT OVERWRITE TABLE tablename_1(全量表) PARTITION(requestdt)
SELECT B.*
FROM tablename_2(增量表) B
逻辑三
全量表增加一个字段(requestdt)
(数据量不多的情况 推荐使用)
CREATE TABLE tablename_1(
requestdt DATE COMMENT '查询时间',
...
)
;
INSERT OVERWRITE TABLE tablename_1(全量表)
SELECT A.*
FROM tablename_1 A
WHERE A.requestdt <> "${ETLDATE}"
UNION ALL
SELECT B.*
FROM tablename_2 B
(这里也可以做一些简单的数据逻辑处理)
本文探讨了在Hive中实现全量表与增量表数据同步的三种策略:通过左连接过滤增量数据、利用分区字段进行动态分区插入以及在全量表中增加字段并按条件更新。每种方法适用于不同场景,如数据量大小和实时性需求。


被折叠的 条评论
为什么被折叠?



