如何使用 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 也开心地走向了星巴克,又到了每天下午的咖啡时间。
--完--
往期精彩: