拉链表在数仓的应用十分普遍。它会在原始的表字段里面添加两个新的字段:create_time和end_time这两个。这两个字段的日期代表的是这条数据的开始时间和结束时间,也就是数据的生命周期。
我在开发的过程中会有这么一个问题,那就是我要取某一天的数据,有说法是,也有说法说是:。区别在于end_time的时间是否取等号。这个问题我通过例子来详细理解。
举例:
有一张订单表,6月20号有3条记录:
订单创建日期 | 订单编号 | 订单状态 | create_time | end_time |
---|
2012-06-20 | 001 | 创建订单 | 2012-06-20 | 4921-12-31 |
2012-06-20 | 002 | 创建订单 | 2012-06-20 | 4921-12-31 |
2012-06-20 | 003 | 支付完成 | 2012-06-20 | 4921-12-31 |
到6月21号,表中有6条记录:
订单创建日期 | 订单编号 | 订单状态 | create_time | end_time |
---|
2012-06-20 | 001 | 创建订单 | 2012-06-20 | 2012-06-21 |
2012-06-20 | 001 | 支付完成 | 2012-06-21 | 4921-12-31 |
2012-06-20 | 002 | 创建订单 | 2012-06-20 | 4921-12-31 |
2012-06-20 | 003 | 支付完成 | 2012-06-20 | 4921-12-31 |
2012-06-21 | 004 | 创建订单 | 2012-06-21 | 4921-12-31 |
2012-06-21 | 005 | 创建订单 | 2012-06-21 | 4921-12-31 |
我要取2012-06-21这一天的历史快照数据,
也就是
如果是:
上面整张表里面的数据都可以取到。
如果是:
得出的结果是:
订单创建日期 | 订单编号 | 订单状态 | create_time | end_time |
---|
2012-06-20 | 001 | 支付完成 | 2012-06-21 | 4921-12-31 |
2012-06-20 | 002 | 创建订单 | 2012-06-20 | 4921-12-31 |
2012-06-20 | 003 | 支付完成 | 2012-06-20 | 4921-12-31 |
2012-06-21 | 004 | 创建订单 | 2012-06-21 | 4921-12-31 |
2012-06-21 | 005 | 创建订单 | 2012-06-21 | 4921-12-31 |
少了001创建订单这条数据,所以不取等号,我们取到的数据为这条数据到指定日期当前状态最新的数据。
最新文章
Python数据分析与展示
快讯:这是本课程第20次开课~~本课程是国家精品在线开放课程“Python网络爬虫与数据分析”的下半部分,欢迎大家加入学习!“我们
MacOS升级ruby版本
1. 历史与起源Bourne Shell (sh) ,即 Bourne Shell,是由 Stephen Bourne 在 1977 年开发的。它是最早的 UNIX Shel
一个月内三刷PB,吴艳妮发声
澎湃新闻记者 祁东 仅用两周时间,吴艳妮又一次刷新自己的个人最好成绩(PB)。 吴艳妮一个月内三刷个人最好成绩。资