数据整合是将分散的、不易用的多样性数据源整理成集中的、易用的单数据源的过程。数据整合需要多样性计算能力,包括:
1. 跨库计算能力。比如,某连锁商场各门店都有自己的数据库,总部要对这些数据进行汇总统计。
2. 计算非数据库中的结构化数据。将公司商务部门的合同信息、财务部门的付款信息整理为项目管理部门的项目付款进度信息,部分数据来自于Excel文件。
3. 半结构化数据计算能力。比如,机场的天气情况、巴士安排、航班信息需要联动响应,有些数据来自EDI,有些则来自WebService。
数据整合的过程中通常要实现特定的业务逻辑,有时是在获取源数据的阶段,有时是在异构数据源混合计算时,有时是在整合后。业务逻辑一般无法用现成的ETL功能来配置实现,通常需要用硬编码来计算完成,因此多样性数据计算能力尤为关键。比如,商场总部要统计哪些商品当天过期或三天内过期,哪些商品已断档或断档风险较大,哪些会员的积分应该奖励或会员资格可以延长。再比如:异构数据源计算,统计出不包括最近一次、且连续三次逾期未付款的项目。
SQL是数据库查询语言,具有足够的结构化数据计算能力,可以轻松实现业务逻辑硬编码,也常被当做数据整合工具。但SQL的多样性计算能力不足,尚不能很好地支持数据整合,这主要表现在:
1. SQL跨库计算在实践中表现不够好。数据库有一定的跨库计算能力,但在实践中却很少正式使用,这里有性能低的因素,也有稳定性差的因素,还有配置复杂和数据类型转换带来的麻烦。
2.不能直接计算库外的结构化数据。Txt文件、Excel等库外的结构化数据一般无法被SQL直接计算,需要经过清洗转换,再加载到数据库才能被SQL利用。为此,用户往往需要额外部署一个计算用的数据库,需要购买专用服务器和专用存储设备、需要增加数据库管理员的工作负荷。
除了增加成本,额外的时间损耗更是个严重的问题。SQL不能直接计算库外数据,就需要先将数据插入数据库。和向硬盘写文件不同,向数据库插入数据是个复杂的过程,会涉及数据一致性、日志、约束索引、数据块连续性、分区等等因素,因此它的I/O性能极低。即使经过优化,将数据复制到数据库也经常比直接复制到文件慢出1个数量级。
3. 半结构化数据的预处理工作量大。SQL对网站日志\Xml\电子邮件\Html等半结构化数据的支持不佳,需要进行复杂的字符串解析并转变为结构化数据再参与计算,这使SQL的开发的工作量进一步加大。
SQL的多样性计算能力不足,导致数据整合的性能低、成本高、额外的时间损耗严重、开发工作量大。ETL脚本虽然支持多种数据源,但缺乏批量结构化数据计算函数,因此较难实现常规的业务算法,难以在数据整合中担任关键角色。
实现数据整合中的多样性计算,集算器是一个较好的选择。它性能高、成本低、无额外时间损耗、开发工作量小,同时还具有丰富的批量结构化数据计算函数。
自有引擎支持异构数据源。集算器可直接访问各种关系型数据库和NoSQL数据库,可以轻松实现异构或同构数据库的跨库计算。集算器也可直接读取Txt文件、Excel文件中的结构化数据,从而支持异构数据源之间的混合计算。esProc内置文本分析器,支持字符串解析和正则表达式,可以直接处理半结构化数据,处理后的数据可直接参与混合计算。
结构化数据计算函数。集算器是针对结构化数据计算的程序设计语言,提供了丰富的内置对象和库函数,可以实现复杂的业务逻辑,同时还能降低从业务逻辑到程序代码的转换门槛。有序集合可以解决SQL/SP中的典型难题,比如相对位置访问、多级分组中的行间计算、复杂的排名计算。
集算器可直接进行异构数据源的混合计算,因此不必使用数据库做中转或暂存,不需要部署专用的计算数据库,也没有额外的时间损耗,在成本低的同时具有高性能的优势。集算器还支持廉价横向扩展,可进一步提升性能。由于集算器具有丰富的结构化数据计算函数,可以轻松实现数据整合中的业务逻辑,开发效率因而有效提高。
下面用“跨库计算工资”的代码片段来说明集算器的大体用法。
某企业要根据绩效和基本工资核算不同工种的员工的实际工资,基本工资存储在财务管理软件的MSSQL数据库中,而绩效分数存储在绩效考核系统的Oracle数据库中,其中绩效分数转化为工资数额是典型的业务逻辑。
代码实现:先从异构的数据库Oracle和MSSQL取数据,实现跨库关联计算,按不同的绩效得分区间计算销售部门员工的绩效工资。