浅谈 - 大数据工程师面临的困境和要学习的技术
读书的时候,语文老师总会让同学看看作者的生平简介,谈谈作者为什么会写出这篇文章,文章诞生的背景是什么背景,一方面是让同学理解文章,另外一方面是让同学感同身受。鄙人,不是大厂,也不算外包,算是靠在阿里系的一家创业公司的交付部门的小小大数据工程师,心比天高,命比纸薄。当然,也和上学没有好好学习有关系,怨不得其他人。回到正题,咋们先从我的个人经历聊一下大数据工程师现在面临的困境和我的一些解决思路。
数据的不整齐
什么是数据的不整齐,这是我自己定义的一个概念,将不符合数据质量以及元数据模糊的数据定义为不整齐的数据。当我刚开始工作的时候,需要抽出数据用 quickbi 做一个 bi 看板,整体的逻辑相对来说很简单,根据商品名称的维度,日周月的维度划分出不同粒度的销售金额,退款金额等数据。听起来很容易,可到了正式实践的时候,发现问题来了。数据提供方根本没有办法提供需要的数据,就说商品金额和商品名称,没有对应的商品信息维表,订单中存储的商品名称会根据活动的不同增加不同的前缀,商品的金额也会因为优惠的波动而波动,不要说算 roi,就按百分比算个成本价,一个商品可以出四五个不同的成本价,更不要说还有 0 的数据。当时我和其他同事拟定,选取订单中价格最小,但不是 0 的数据作为商品本身的价格,暂时将 bi 做了出来,不过真的有人在用吗?至于元数据的模糊,这个问题是大数据绕不开的问题,就单说订单表中商品数量一个字段,这里的商品数量指的是一个订单的购买的总的商品数量,还是一个订单下一个商品的购买数量?最近在看一本叫 dama 数据管理的书,里面有一大章专门讲元数据治理,感觉要想解决这个问题,必须是公司内有一个领导可以拍板说做数据治理,才能解决这个问题,不然越往后,治理难度会更大。也可能是我目前接触过的业务仅仅是零售行业,感觉行业内的数据有点一拍脑门的感觉,金额数据中写“按照第一季度金额走”,字段写的是 coupon_id,注释里面写的是项目 id,前者看到的时候除了暂时用 rlike 匹配正则把数据清除掉,只能跟产品反映,产品再跟对接人反映,对接人再跟业务反映;后者更是找不到对应的负责人,只能自己看数据确定关联关系。这就引出了新的问题-业务还是数据?
业务的刁难
业务是永远的痛。数据本身是没有价值的,这句话在零售行业一点也没有出错,零售的大数据想创造价值,那必须是和业务紧密对接,而我目前处理的需求,也基本上都是业务的需求。可业务需要什么样的数据呢?业务本身知道,但是他们不会主动将自己的想法说出来,而是需要技术来揣摩,接触的久了,就不会发现不了,如果不是有了固定模板的数据,业务需要的数据其实只是看起来正常的数据。比如,我去年关注小程序的用户是一千万,那明年关注小程序的用户是十万,这数据肯定就不对,这个时候就需要技术来查,是不是计算逻辑出了问题,最后查到是不是源数据里面没有数据。这个故事听起来还算靠谱,但有时候需求真的过分不合理,开发一张大屏,临近尾声,节点都已经从开发提交到生产,忽然提出质疑,这里的数据不对,一查,是数据源是刚上线不久,之前的数据都是线下数据。但也不可否认,业务确实在督促技术进步。
技术的进步
从业务督促我进步的例子举几个,首先我接触的数据基本都在 dataworks,而业务很多时候都需要抽出超过一万条的数据,我去之前,其他同事都是导出到 oss,再从 oss 下载,可为了偷懒,当然也是在官方文档看多了,我用 idea 配置 conf,就可以在 idea 搭建一个 maxcomputer studio,直接下载数据,避免二次导出。再比如,有一张表里面的数据,如果有两个不同的维度,而这两个维度还互不相干,应该如何分组呢?写两个 sql 吗?或者抽明细数据在数据集等看板里面再聚合?也是在那个时候,我学会了 cube,roullup 和 grouping up,简单的 sql 处理就可以实现复杂的逻辑。业务发现问题会来和产品唠嗑,产品又会找我唠嗑,为了提前他们发现问题,学会使用 dataworks 的强弱规则,真的没有话说,每天早上起来看一眼短信就可以,尤其是针对递增的数据,同周期的波动率让我更快一步。当然,还有的需求,需要将错误数据抽离出来,dataworks 自己带的 python 节点,利用 opds 配合钉钉机器人,每天将错误信息打包成 markdown 格式报给业务。
技术的局限
不知道有没有人看到这里,如果看了上面,不难发现,我的每天工作似乎都在 dataworks 上,我承认这上面的东西很多,数据集成,离线开发,实时开发,hologres,function studio,数不清的好东西,可权限就那么多,我甚至连 hologres 的权限都没有。每天做的更多的是 odps 离线的开发,最开始还好,技术的成长很快,但几个月后,sql 的基本能力就到了瓶颈期,没有大的项目,很难再有突破。最让我难受的是,一次和业务沟通,业务忽然问我,为什么用 trino,而不是使用 implama,我感觉自己如果再这么下去,很可能真的一辈子是个 sqlboy,三十岁前可能就得找个零售行业干业务了。我不能接受这样的我,那应该怎么学习呢?
自我的进步
首先是发掘目前使用的工具的潜能,就拿 dataworks 来说,进不去 function studio,我就进 idea,在 idea 开发自定义函数,从最简单的 udf 到后面的 udtf 和 udaf,再到 mapreduce。传统的 sql 写腻歪了,那我就尝试 sql 组件节点,尝试赋值节点和分支节点。再就是学习阿里的训练营和定期的活动,都说人需要好的反馈来刺激自己继续努力,没有比这些小活动更好的激励方式,而且千万不要认为学习的东西是没有用的,触类旁通的道理武侠小说里面都有写。就拿我最近正在看的 polardb,polardbx 和 polardb for postgre 的课程来说,我从里面看到了数据库 ap 查询和 tp 查询的区别,理解大数据的存储大多都以列存储是为了更好的压缩和查询,掌握了 docker 的部分知识,自己去思考数据库和大数据的本质区别。干活可能没有那么多,但是希望诸君共勉。
版权声明: 本文为 InfoQ 作者【Geek_c8a6a0】的原创文章。
原文链接:【http://xie.infoq.cn/article/63b114546e5d204ae3ed17892】。
本文遵守【CC BY-NC】协议,转载请保留原文出处及本版权声明。
评论