【数仓面试】什么是拉链表?
面试官:什么是拉链表?
当一条数据有变动时,如更新、删除、新增,即想在原表中保留这条数据变更前的历史数据,又想保存最新的数据,就需要拉链表。
也就是,当一条数据有变动时,不把历史数据删除覆盖,而是既保存一条失效的历史记录,又保存一条最新的记录。
面试官:拉链表和增量表、全量表相比,有什么优势?
- 增量表:只保留一份最新全量数据,无法记录历史数据状态
- 全量表:每天保留一份全量数据,可以保留所有历史数据,但占用过多存储空间
- 拉链表:既能保留历史数据状态,有能保存最新数据状态,且不浪费存储
面试官:拉链表设计方法,怎么更新?
可以在增量表的基础上增加2个字段:
- 数据有效期起始日期
- 数据有效期结束日期
拉链表数据更新方法:
当数据状态有删除变更时,历史数据置为失效(结束日期设置为前一日),同时新增一条数据的最新记录(起始日期设置为当日,结束日期设置为业务失效日期或'9999-12-31')。
下游从拉链表取数:
where 起始日期<=当日 and 结束日期>=当日(即只取有效日期内的数据)
浙公网安备 33010602011771号