挑战一个 ETL 数据清洗的小案例

浏览: 9133

开篇语

这是我以前做过一个汽车金融项目中的数据处理案例,从原业务系统中抽取业务数据然后按照规则计算出每一个ID对应的时间周期。原数据结构和我这里描述的大同小异,业务规则也比较接近,我整理一个数据原型,大家有时间可以做的试一下。可以用 SQL 的方式,也可以用 ETL 工具,要做的事情就是将很不规则的原数据按照要求清洗成规范的数据,最后得到每一个 ID 的 DURATION 值,我们的报表要呈现的就是这些值。

测试数据

最左侧是测试数据,中间的是我当时清洗数据的时候创建的中间表,用来后续记录并检查数据逻辑的,最左侧是最终每一个 ID 的有效时间天数。

1.jpg

对应的规则解释与清洗过程逻辑描述,规则见最下方。

2.jpg

3.jpg

1.jpg

清洗规则

8.jpg

如果要说 ETL 处理的是什么样的数据,处理场景是怎么样的,这个案例就可以算一个。

补充

上述的只是测试数据涉及到 7 个 ID,实际上我们处理的数据量有几千万,覆盖 20 多个场景,所以也可以自行补充一些数据测试来验证程序的正确性。

PS:感谢@要选就选S型的提醒,数据源的中数据 ID=1005中 其中原 0034 更正为 0022。

推荐 13
本文由 BIWORK 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

16 个评论

第一个捧场哈,认真完成 认真挑战
建议弄一个挑战系列,各种场景的
求高手分解。
就期待这样的,学习有动力。第二个完成,认真挑战。
这个可以有
郑大鹏

郑大鹏 回复

已经做完了?
悟

回复 郑大鹏

没有呢,有一种想用TSQL完成的冲动。
请问,ID=1005 按照规则 连续的 0034 队列取时间最早的 0034 时间点,连续的 0048 队列取时间最晚的 0048 时间点
展现是否应该是这样?
Start_date End_date DURATION
2015-01-18 2015-01-22 4
2015-01-23 2015-01-24 1
看的很仔细啊!非常正确,应该是我的一个笔误,没有标粗的就不应该是0034,我把这个0034改成其它的就可以了!非常感谢提醒!
感谢@要选就选S型的提醒,数据源的中数据 ID=1005中 其中原 0034 更正为 0022。
好的。
赞同 字数
清晰规则中特定编码为:0034、0046、0048 ,0046是不是应该是0036啊?
清洗规则的描述中是0036,测试数据中也没有0046编码。
是的,是0036,小笔误,感谢纠正。
好像看过用窗口函数处理这些会比较好处理,之前在一本sqlserver窗口函数的书上看过类似的。
有完成的大牛没?

要回复文章请先登录注册