《平安证券刘宏霞:教你如何保障大数据质量》要点:
本文介绍了平安证券刘宏霞:教你如何保障大数据质量,希望对您有用。如果有疑问,可以联系我们。
刘宏霞
平安证券 大数据测试组负责人
2014年加入平安证券,正值互联网金融潮流兴起,组织并参与大数据自动化以及监控体系的搭建、应用和优化.熟悉券商核心业务,对数据有着浓厚的兴趣,并把相关的技术应用到数据质量上,不断地探索券商数据质量之路.
这两年对于大数据来讲,大家看到有很多产品出来,很多公司也在利用数据做些东西,包括现在的一些电影.
前两天的时候,同事给我推荐一部叫做《庭审专家》的美剧,大概花了一天时间把它看完,故事讲的很简单:在美国庭审当中包含陪审团概念,通过大数据分析陪审团行为模式,然后预测他们的想法.这样来讲,大数据应用完全掌握在拥有数据的人身上.
那如果数据质量本身存在问题,就会导致数据分析出现误差,甚至错误的预测或者误导性的描述.所以今天我给大家分享的主题是券商的大数据保障之道 .
在分享券商大数据保障之道之前,我们先看一下平安证券在大数据方面都做了哪些.
经常使用平安证券 APP 炒股的人会发现,我们平安证券 App 过去一年变化非常大,在刚刚过去不久,由证券日报主办的第十二届证券市场年会中,我们平安证券 App 被评为最佳金融 App 大奖.
我们为用户提供个性化的服务,比如 App 功能上有一些千人千面,猜你喜欢的内容,推送的一些功能.其中包括资产收益的功能,这些数据是来自用户大数据,帮助更好为用户推荐产品,也帮助用户更方便获取信息.
在行情方面我们也会做一些股价预警,智能选股等等,可以帮助用户化繁为简,准确操盘.另外是我们的资讯,炒股人都知道,资讯很重要,帮助用户获取最新、最全的金融资讯.
我们还有大数据产品,比如牛人牛股,帮助用户追踪牛人们在买卖什么股票.还有收益类的计算器,辅助客户进行投资决策.
另外比如客户不知道要买股票还是买基金,或者买其他产品,我们也会提供智能化服务,这些都是为客户提供个性化的服务,这是一些大数据相关的产品.
除此之外,我们平安证券还会利用大数据为我们的业务人员做一些科学的决策,依据自动化的数据平台.
比如自动化报表平台,大数据自助分析平台等.我们做了这么多事情,最大的问题是怎么保障这些数据的准确性.
我首先给大家介绍一下系统,我们大数据的组成部分,其次我们在测试数据中面临哪些挑战,之后是我们解决思路是什么,最后是总结以及未来的规划.
先看一个最简单的情况,比如我现在有一个需求,西红柿炒鸡蛋,可能大家都比较熟悉这个场景,我给你一个需求是西红柿炒鸡蛋,你怎么做?
大家会吃哪盘西红柿炒鸡蛋也就一目了然了.
同样的道理,平安证券自己常用的系统大概在50个左右,另外还有数据来源于平安旗下其他子公司.如果每个分析人员都根据自己的需求直接取源数据,你会发现同一个需求不同的人做,结果都不对等的.
另外比如重复的工作量、低效的工作,无法快速响应业务需求等等问题,为了解决这些问题,我们实现了统一底层,对各个系统提供的数据都来自于统一底层.由统一底层来保障数据的质量.
看下我们统一底层的框架,从下往上看,最底层是数据源,数据源来自平安证券的所有系统(比如账户系统、交易系统、基金系统、个股期权、融资融券等等)以及部分平安旗下其他子公司的数据.
我们当前已完成指标有8万多个,这些指标是指以客户为方向,每个客户涉及标签有8万多个,每天还有不断新增的指标.
我们重点关注的是中间这部分,因为我们只有保证这部分数据准确性,我们才能保证对外提供的数据准确.
那我们怎么保证中间这一层数据准确性呢?同样我们也面临着很大的挑战.
8万多指标,仅仅用一年把它全部加进去的,对于我们测试人员来讲,8万多个指标涉及到业务,涉及到底层的很多表,那我们怎么进行处理,这是我们面临的挑战.
如果数据错了,我们往外提供的数据就是有问题的,如果每天都有业务人员跟你讲,指标好像有问题,如果把所有精力都在回答大家的问题,根本没有精力做测试.
大家可能会看到,对于大数据来讲,每个指标都是数据,这个指标你测试之前可能它都是正确的,但是如果某一天有新的数据进来,因为每天都会有新的数据在进来的过程中,你还能保证你的指标结果的正确性吗,怎么保证这是我们需要考虑的.
因为我们业务人员很多,每个业务人员口径都是不一样的,比如场外基金,对于有些业务人员指的场外基金就是场外基金,有些业务人员认为场外基金就是场外的公募基金,所以我们怎么保证对外提供的口径的一致性.
8万多指标,如果不对外提供服务,其实它都是一堆死的东西,没有任何意义的,你要让它产生效益,就要对接平安所有的平台.
我们平安证券测试团队有一百多人,看起来人力还是很多的,但是我们这些人力都分散在各个子系统下,比如交易系统、基金系统,这些都是一个个的子系统,这些人力都分散在各个子系统上,对于统一底层仅有十个人力,十个人力要对接8万多个指标,这是我们当前面临的挑战.
为了解决这些问题,我们的解决思路是:围绕数据本身,需要相关的规范和流程去保证每个环节的准确性,规范和流程需要工具去管控.
规范、流程、工具应用到开发、测试、监控各个环节来保证最后指标数据的准确性.
在数据开发平台会有 DSP 数据服务平台,和 CM 公共服务平台,这两个平台保证开发过程中数据的准确性;然后数据到自动化测试平台.
我们团队最初的时候,三个人力测试一百张底表,几乎花了一周时间.最后我们状态是什么,所有人把表分析完了,再也不想看数据了,因为那个数据看的自己都想吐的过程.
所以通过自动化平台减少我们的重复劳动,把精力花在分析数据上.数据上线后 ,通过监控系统来每天监控数据的准确运行.
我们先看一下在开发平台当中怎么保证数据一致性的,在我们平台每天会运行几千个脚本,那怎么保证所有开发人员它的操作是同步一致性的,我们是从这几个方面保证的.
所有开发人员在创建调度会保证创建调度一致性,调度创建之后开发人员进行执行,执行之后会进行比对,比对完成之后会由相关人员进行审核,审核完成之后,这些数据才能合并到主表当中.
创建调度这个环节我们是怎么保证的呢?我们主要分成下面几个层面来处理.
有些开发人员可能会觉得有些字段清洗方式还不够的情况下,你可以在外围增加清洗的方式,但是不能更改当前的清洗方式,这是流程会监控到的.
我们在创建调度环节,通过自动化的方式,来保证我们在开发过程当中,所有的生成的调度是一样的.
这时候调度创建成功了,需要进行验证,也就是我们测试执行的过程,在这个过程当中,我们开发人员需要进行自测,因为这个版本是待上线版本,需要验证,选择执行的日期,比如一些存量表要执行一天.
对于增量表可能需要执行很多天,执行以后这些数据会放在临时位置上,需要对临时数据进行校验.
我们还有一个测试比对环节,在测试比对环节所有模板都已设置,在模板当中我们会完成哪些功能呢?
第一, 我们字段里表结构,这些最基本的,我们会进行全面的验证.
第二, 一些 count、max、min、sum,还有空值、空格、NULL 值,长度、频度诊断,还有数据比对.
这样我们在整个开发流程当中,可以保证 RAW、MID 层不用再转测试,BASE 层和 fact 层,因涉及业务逻辑,需要测试人员进行验证.
在我们测试的时候,常用的方法有很多,最重要的一点是我们需要对源数据进行分析,这就是数据诊断过程.
其次,我们会做业务诊断.我们对业务诊断过程中,大家会发现对于底层表可能有几十个,我们需要分析字段和字段之间存在一对一,还是一对多,还是多对一的关系,避免数据虚增;
数据关系映射,表间映射关系,诊断通过哪些字段进行关联;
另外我们还会进行表间 HITRATE 诊断,不同表间 ID 类字段的匹配率,来确定哪张表是主表.
只有通过诊断,才能发现哪些数据或者业务存在问题,不是说业务告诉我什么样子就是什么样的情况.大家可能会很奇怪,你们做这么多诊断,你们在项目中是怎么做的.
举个例子,经常使用平安证券 App 的人会知道,我们页面上会有收益额,比如收益额 = 期末市值 – 期初市 + 卖出 – 买入.
因为交易处理方式是不一样的,比如晚上我们要做清算,可能有些公司不是这样的情况,我们要跟交易所做清算,跟 TA 公司做清算等,这些清算规则也是不一样的,不同基金清算方式不一样的.
并且我们数据来自不同系统,比如账户系统、交易系统、基金系统、融资融券等.
我们看算一个收益指标是怎么做的.
比如交易股票,可能很早之前就有数据了,但是我们场外基金是最近几年才有的,如果拉历史数据少拉一年或者少拉一天数据,算出客户最终收益都是不对的.
只有把底表历史数据拉出来以后看开始日期是不是正确的,这样才能保证上层汇总的数据是不是正确的.
BASE 层之后是业务实现层,这时候就比较简单了,我们可以根据客户粒度进行汇总,客户收益是什么样的,这种情况下,除了做诊断之外,还会做一些比较,只有这样才能算出真正收益是什么样的.
只有在不同层级保证之后,才能保证最顶层数据是不是正确的.那要做这么多数据诊断,纯粹靠人工做是不现实的事情.
所以搭建了自动化平台,会对 RAW、MID、BASE 层做各种诊断,把相应的诊断sql录入到自动化平台,后续所有执行都是由自动化平台执行的,执行出来的结果再作分析.比如现在有一个新的指标,需要对哪些字段进行相应诊断的时候,只要运行下自动化脚本,看一下结果图就可以了.
这样大大方便了测试人员,降低了手工测试成本,只需要维护测试脚本就可以了.在运行结果之后,可以看到这次运行多少个,失败多少个,看下失败的是什么造成的.
除了测试,数据是要进行上线的,上线之后不可能每天再进行测试,也没有那么多精力,对已经上线的指标通过监控平台进行监控数据运行情况.
监控平台主要从几个方面进行监控.
我们会对每个层级进行监控,监控主要分为几个部分.
一是,调度监控,因为所有大数据实现的业务逻辑都是通过调度实现的,我们就会对调度进行监控.
二是,数据相关的监控指标,对数据指标进行监控.
三是,还有业务口径相关的监控指标,这个是IT人员业务口径.
四是,还有是业务人员自己要监控的一些业务指标,通过设置要监控的参数,放到监控平台里面.
如果说每天跑完之后,有异常数据,会由告警平台发出相关邮件,通知大家要进行相应的处理.
我们现在看一下调度监控都会监控哪些东西?
目前我们运行的调度大概在1300多个,每天都会监控运行的情况,还有一部分存在依赖关系的调度,如果之前调度没有运行完的话,会定时发送邮件告诉开发人员调度是延时了,这是业务运行状态进行监控.
可能很多人会觉得,一个调度运行一个小时,两个小时觉得是很正常的事情.但在我们平台上,一个调度运行超过十分钟就要分析,这个调度的代码是否是有问题的.
有些开发人员可能说写的结果是对的,它能够跑出结果就可以.但是调度运行时间长了,往往会影响到后面整个运行的过程,那就会导致今天一天数据可能都没有办法算完.
所以我们对于每个脚本运行时间是有限制的,如果超过十分钟,开发人员就要检测是不是代码是否存在问题.
我们还有一种监控,就是依赖关系监控,大家可以看出,我们一个调度可能你的上层依赖很多调度,你的下层也依赖很多调度,那调度和调度之间是存在依赖关系的,一个调度失败可能会影响到其他调度的失败.
那么怎么监控?我们会监控到你上层依赖多少调度,下层依赖多少调度,因为这个脚本比较特殊,依赖特别多,原因它是我们最后一个调度,它需要向我们数据库推送8万个指标的,所以它的依赖特别大.
在我们调度依赖会有一些设置,如果它依赖的上层调度或者下层调度存在问题的话,就会立即停止运行,由运维人员进行处理.
另外是对于数据规则的监控,一个是基本规则的监控,第二自定义规则监控,基本规则监控相对比较简单,大家在测试和开发过程当中会做的一些长度诊断或者频度诊断等,这是作为基本功能的监控.
我们会在监控平台进行设置,还有一些是测试人员,或者我们业务人员他有自己的想法,他不想按照常规的方式,可能常规方式也不符合需求,因为这是大体上的监控,并不能保证里面的数据是不是存在问题.
在自定义监控上,开发人员和业务人员可以根据自己的需求设置相应的指标,这个平台相对而言,它灵活性比较高一些,可以被我们所有相关人员进行使用,根据需求进行监控.
除了数据监控之外,我们业务人员会根据自己的需求,从业务角度制定相关的监控.比如一些核心指标,可以在监控平台进行设置,也可以通过报表的方式进行监控,关注了哪些指标,这是业务人员可以根据自己的方式进行相关监控.
最后总结下,我们是从开发阶段、测试阶段、监控阶段,来保证大数据的数据准确性,在开发阶段主要是一站式服务,从创建到执行,到比对,开发阶段完成之后,才能够转测试,在测试阶段,我们会进行数据诊断,自动化测试.
自动化测试完成后确认脚本没有问题之后,可以上线,测试人员评审,评审通过之后,就意味着调度是可以进行上线的,就发布到预上线过程,通知运维人员调度已经完成测试,可以进行上线,后面的操作就会由运维人员进行处理.
上线之后监控平台监控调度、数据、业务是否存在问题,如果存在问题,就会快速通知到相关的开发人员或者运维人员进行相应的处理,这是目前已经实现的情况.
对于未来我们有什么考虑呢?第一我们会考虑平台互通,目前我们开发平台、测试平台、监控平台,都是相对独立的.
目前开发平台和监控平台之间还有一些关联关系,但是我们自动化平台是没有跟它们进行打通的.后面会考虑,比如说开发完一个调度之后,自动到自动化平台进行运行,可以快速保证,完成测试的过程.
另外还有一个部分,我们会考虑自动化平台和监控平台打通,打通的目的比如一个指标出现问题,可能并不清楚是哪个客户指标出现问题了,如果和监控打通的话,快速知道是哪个客户的指标出现问题.
第二部分,我们会对我们的平台进行丰富,后续我们会把很多东西加入到自动化平台来,真正的产品化.另外是监控体系,目前监控体系有一部分是由数据分析人员分析出来一些值和数据提供给我们,进行监控.
但是这些是被动的,我们后期会把一些统计分析其机器学习方法运用到监控当中,丰富监控指标.
另外当前我们做的数据都是离线数据,每天晚上交易结束之后,会把数据进行迁移,对于实时数据目前没有验证,后续我们也要考虑怎么保证实时数据的准确性.
原文来自——微信公众号(高效运维)
转载请注明本页网址:
http://www.vephp.com/jiaocheng/4320.html