表概念
1.全量表:用来记录当前所有事物的最新信息,包括变化的和没有变化的.
2.增量表:用来记录事务的有变化的量。只记录有变化的没有变化的不需要记录.
3.快照表:快照表是有时间分区的,每个分区里面的数据都是分区时间对应的前一天的所有全量数据.
4.拉链表: 记录一个事物从开始,一直到当前状态的所有变化的信息.
不分区保留历史数据方式以及计算影响
ods层新增数据插入到原表中,这样原表中会保存所有有过变化的历史数据,计算时需要将数据按照进入数仓的时间倒序取第一条(去重)做最新状态的计算。
分区保留历史数据方式以及计算影响
ods层变化缓慢以及数据量小,按每天全量分区存储(快照表),另需要维护一张最新状态的全量表,计算取最新状态的全量表做计算。小文件多,后期数据量冗余存储量大,可定期将分区内数据压缩备份存储
例:ods_xxx ods_xxx_part_day
#快照表数据清洗
INSERT overwrite table ods_xxx_part_day partition(dw_day='${yesterday}')
SELECT
*
FROM source_xxx;
#全量表数据清洗
INSERT overwrite table ods_xxx
SELECT
*
FROM
ods_xxx_part_day
WHERE dw_day = '${yesterday}';
ods层增长速度快或者数据量大,增量数据按每天分区存储,另需要维护一张最新状态的全量表,将每天增量数据插入到一张全量表中,计算时需取全量表数据做最新状态的计算
例:ods_xxx ods_xxx__incr_part_day
#每日增量分区表数据清洗
#创建时需要将所有历史数据先清洗到一个分区中