如何使用 SQL 做好 ETL 中的数据指纹

点击蓝色“有关SQL”关注我哟

加个“星标”,天天与8000人一起快乐成长

图 | 榖依米

“ 今天这份数据一定要搞定,不管你几点下班 ” 主任那嗓门,隔着三道门,都能冲破。

看着小 C 从总监办出来,一脸羞红的样子,肯定没少挨骂。很好奇,为什么主任发这么大伙。空调是没开,但全办公室就三台电风扇,已经两台在他办公室了啊。

L 凑近办公室,“一份统计数字,搞了5遍没对上,能不火吗,都老员工了”,主任还是没停下牢骚。

对数据这事,如果不是因为统计口径,还真不好找出逻辑错误。在数据这行业,没碰上点数据一致性问题,那是不可能的。就算老司机,还有熄火儿的时候。更何况小C,才3,5年经验,哪能见识了那么多。

L 靠近小C,“数据又对不上了?”

“ 哎,真没办法。跑了个 ETL,谁想老是感觉掉数据。”

“掉数据?你意思,不是算法错了,而是 ETL 中丢了数据?”

“感觉就是,我用 Kettle 写的,抽了生产库和仓库的数据,但就是和主任手上的对不拢。”

“那数据指纹,你怎么做的?”

“啥啥,数据指纹,是啥意思?L 又有新概念?”

见小C眼里来了精神,L 也不马虎:“ ETL 只是个抽数据的工具,配套的还是思想。”

“思想我有啊,我做了一张大宽表,全部维度都集成在 一起,保证无遗漏”

“那是技术思想,你还得有个工程思想”

"有啥不一样么?"

“工程是要收尾的,你的ETL收尾没做完美”

“怎么不完美?”

“你把各个系统数据抽进数据仓库了,那源系统数据属于输入,数据仓库的数据属于结存。输入与结存是不是要比对下?打个比方,你借给别人10万块,别人每次还你1,2千,你如果不记账,是不是自己都不知道别人还了多少,最终还欠你多少?”

“10万块,那我肯定记得啊”

“那在ETL中,你也要记得每一个批次啊。不仅如此,还要给每个批次中每条数据,加上数据指纹。拿着这份指纹,去和源系统核对,才行啊”

“那数据指纹怎么计算呢,主键ID又不能各个系统平均分配,肯定有重合的啊”

“当然不是拿自增列去做。举个例子,第15厂过来的芯片,你可以选择厂号+日期+批次作为主键,给这份主键加指纹,全集团公司只有这一份指纹,那么到哪个数据仓库,都不会有问题了啊。如果把该厂某天的所有批次的数据指纹都聚合起来,生成一个总指纹,那么就可以监控到每个批次的数据一致性啊”

“那怎么生成数据指纹啊,L快说嘛,急死我了都。这都4点半了”

“简单点用 checksum 这个自带函数搞定。只不过checksum的参数一定要选择唯一标识键,就像刚才的 厂号+日期+批次,当然你可以再细化下粒度。在你的源头数据和数据仓库宽表中,再加一列 checksum 生成的数值,两相对比就可以知道,是不是 ETL 中有遗漏啊”

生怕自己没说明白,L 当场写了个小例子


“Copy, Roger That!”

看着小C又活跃起来,L 也开心地走向了星巴克,又到了每天下午的咖啡时间。

--完--

往期精彩:

本号精华合集(二)

如何写好 5000 行的 SQL 代码

如何提高阅读 SQL 源代码的快感

我在面试数据库工程师候选人时,常问的一些题

零基础 SQL 数据库小白,从入门到精通的学习路线与书单

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dbLenis

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值