什么是数据漂移
通常我们把从源系统同步进入数仓的第一层数据称为 ODS或者staging层数据,接入层 。
数据漂移是接入层数据的一个顽疾。
数据漂移定义:接入层表同一个业务日期数据中包含前一天或者后一天凌晨附近的数据或者丢失当天的变更数据。
数据漂移出现的原因
一般数仓的接入层都需要存储历史数据,按照一定时间段来切分进行分区存储,一般选择某个时间戳字段进行切分。而这些时间戳字段的准确性是导致数据漂移的根本原因。
通常,时间戳字段分为四类:
- modified_time:数据库记录某条数据更新的时间。
- log_time:数据库日志记录某条数据更新的时间。
- proc_time:具体业务过程发生时间。
- extract_time:数据记录被抽取时间。
假设接入层将每日接入的数据存储到一个分区:
- 同一条记录的数据抽取时间extract_time明显是晚于另外三个时间的,如果用这个字段切分,ODS某个分区中的数据会包含前一天末尾的数据,并丢失当天末尾的数据。
- 如果用数据库记录的更新时间modified_time,前台业务系统手工订正数据时可能会遗忘同步更新该时间,导致该抽取的数据被遗漏掉。
- 另外,由于网络或者系统压力问题,log_time或者modified_time可能会晚于proc_time,导致数据漂移。
- 如果我们直接使用proc_time时间进行切分,这种情况仅仅对包含一个业务过程的ODS表有效果,如果该表每条记录需要存储多个业务过程,则用proc_time切分会丢失其他发生在当天的业务过程记录。
以上就是出现数据漂移的主要原因。
处理数据漂移的方式
常用的方式是将ODS每个时间分区中向前、向后多冗余一些数据,保障数据只会多不会少,具体数据切分时让数仓接入层的下一层按照具体的业务场景用不同的业务时间proc_time来限制。
网友评论