Hive实现拉链存储
Contents
什么是拉链存储?数据仓库经常用到,通过给record增加两个字段: 生效日期、失效日期,来记录数据的生命周期变化;好处是既节省存储空间,又保证历史数据变化的完整性,最重要的还能快速访问不同时段的数据快照
原理
那为什么叫拉链呢?因为每回新更新record进来后,都会对旧record进行闭链(更改失效日期),同时对新record开链(更改生效日期),就像链条一样,一环扣一环
下面以用户数据为例:
Hive/ODPS实现方法
Hive两个特性:only write once
, schema on read
一般来说存储底层是HDFS(当然有可能是spark或其他,本文不考虑),所以是做不了update的,update成本都不如覆盖重写了,可以考虑利用LEAD Function解决
SELECT |
该方法不具有幂等性,重复执行会导致多出
EFFECTIVE_DT = EXPIRED_DT
的数据;如果无法避免重复执行,子查询里面需要去重