标签:
每日指标计算脚本是本系统大部分指标的基础,设计十多个计算指标,以及三十多个取数指标,所以计算过程比较复杂,整个过程如下图所示,下面挑比较典型的几种指标的计算详细介绍。
日指标计算主要是从2个表控件进行数据输入,如下图所示:
因为每个数据库连接只能单独使用一个表输入,本系统在设计上是先将基础数据抽取本地,而瞬时数据则计算后直接抛弃,并且数据也来自不同数据源(前者来自数据共享中心、后者来自海量平台),所以采用2个表输入作为数据源,表输入时,尽量将过滤条件在输入之前应用上,以减少不必要的数据输入,以减少网络与IO的开销,哪怕是需要数据库服务器进行额外的计算也不要吝啬,因为网络与IO的开销总是会更慢。
第一个表输入主要是输入电量监测系统瞬时数据,取之前需要先过在数据库端滤掉不完整的电量监测点数据(少于96条),同时根据系统计算参数的要求,预置好三相不平衡度的计算时间区间。因为后续的大部分转换控件都不支持输入之前预置好的变量进行计算,所以在表输入时就将该变量值作为一个常量字段一起输入到数据流中,并输入到下一个控件进行计算,(因为采用变量时无法进行调试,所以注释部分的脚本可以作为开发过程中调试用数据)控件设置如下图所示:
瞬时数据示意图
第二个表输入主要是输入外部系统以及本系统的台区基础数据、技术参数等信息(每行就是一个台区),主要涉及到十多个表的关联查询,其中某些大表数据量在300W左右,最终本控件形成一个具备台区所有基本信息的结果集,并以复制方式(复制成2份)
分发给后续计算控件引用,一路作为瞬时数据计算参数,一路作为最终数据的雏形。控件设置如下图所示(经实测该表输入过程执行需5-10分钟即可完成):
台区基本信息数据示意图
在台区基础数据的表输入控件执行完成后,通过字段选择控件将计算瞬时值时用到的字段过滤出来,最后通过连接控件将2个表输入的结果内联合(INNER JOIN)起来,2个表共同的联合参数为电量监测点ID(CJ_MP_ID),进一步可以去掉电量监测瞬时多余的数据,这时得到的数据集只剩下真正有意义的瞬时数据(减少了2/3的数据量),这样输入下一步计算控件中的数据将基本不再有无效数据。
在完成数据输入后,数据会分成多份分别进入不同的计算流程中,进行指标计算,每份数据都一定会携带台区编号字段,在计算完成后通过不断的左连接完成结果的合并,其中由设备信息、用户信息、电量监测3个系统内联接输入的台区基本信息为最左边,其他计算结果不论是否有结果都存在该台区的一行数据,特别要注意的是连接的2个数据流一定要先进行根据连接字段做排序才能正常,如果输入控件是表输入的也可以在SQL语句用ORDERBY排序,否则会造成连接结果有误如下图所示:
应用Pentaho Data Integration(Kettle) 6.1 进行数据抽取以及指标计算(四、每日指标的计算上)
标签:
原文地址:http://www.cnblogs.com/wheel/p/5903319.html