之前的文章已经大致给大家介绍过大数据计算引擎-润乾集算器了。想必很多人心里还是存在疑惑,集算器作为大数据分析系统,到底它能做些什么?这篇文章,就为大家详细介绍。
降低报表开发难度
降低开发难度从而提高开发效率是集算器的设计初衷,是最容易理解的作用,前面已有粗略介绍。
这方面的细节内容太多,我们会再做一个专门话题详细讲述集算器如何解决报表开发中的各种具体难题以及与常规手段的对比。在这里只做总结性地阐述。
比Java和SQL更易写
如前所述,集算器的设计目标是为了解决报表的数据准备,而目前这个工作一般采用Java或复杂SQL完成,存储过程及中间表也可以算作是SQL。
与Java这类没有提供直接结构化计算的语言相比,采用集合化语法的集算器代码会更为短小,这很容易理解,毕竟集算器基于Java提供了更高层的类库和方法。
短小不仅仅是写得快,而且还能容易理解和排错。一个页面内能看到更多的代码,从而能更完整地理解代码的含义。使用集算器编码时,伪实代码的比例大约是只有1.5:1,绝大多数报表的数据准备算法可以在一个屏幕内显示出来。
而使用Java就很难这样,几十行代码下来仅仅能做个简单的汇总,一个完整的业务逻辑动辄需要几百行代码,翻看到后面时已经忘了前面是怎么做的了。
除了代码本身简短的外,集算器特有的网格式编码和调试方式还能进一步强化这个特色。程序员可以在一行写多句相关的代码,某句长代码不必完全显示出来从而不影响查看算法整体结构,循环可以用更直观的方式呈现,单步执行和单元格变量可以随时查看每一步的结果而提高调试效率。
这些,都可以让程序员专注于数据计算中的业务逻辑而非技术细节。
与SQL这类本身就支持结构化计算的语言相比,集算器完善了对分步计算、集合化、有序计算和对象引用等几方面的支持。对于日期和字串等运算,集算器也比大部分SQL提供了更丰富的方法。
许多情况用SQL也不是写不出来,但不能直接按自然思维实现,很费脑筋,这种代码放时间长了程序员自己都会忘了是怎么写出来的,给将来的维护也造成麻烦。
集算器代码则没有这些问题,符合自然思维习惯,即使是与SQL相同的思路也能更清晰地表达,很容易理解和维护。
比报表中计算更广泛
报表工具一般都可以完成计算列、分组排序等运算。基于非线性报表模型的工具还提供了跨行组和相对格与格集引用方案,可以完成相当复杂的运算。
报表呈现环节的计算是一种状态式的计算。所谓状态式计算,就是把所有计算表达式一次性都写出来,由报表工具根据依赖关系决定计算次序。这种直接把运算写到布局中的好处是很直观,在依赖关系不太复杂时能一目了然地了解各单元格的运算目标。
但是,在依赖关系较为复杂,计算需要分成多步时,这种状态式计算就显得困难了。还有的时候,计算的中间结果并不要呈现,这样就会出现隐藏格。隐藏格不仅将很大程度地破坏状态性运算的直观性,而且还会导致运算效率低下,占用更多内存。
比如要列出销售额占前一半的大客户,这时就有典型的过程性计算,在报表中要使用隐藏行列手段将不该列出来的条目隐藏,而不能直接过滤掉。再比如带明细的分组报表要按汇总值排序,这需要先分组再排序,而采用状态式计算的报表工具无法控制这个次序,这个报表也就无法完成了。
对于这类过程性计算或需要隐藏格的复杂报表,采用集算器在数据准备阶段完成计算,报表只负责呈现及少量的直观计算,可以有效地保留状态式计算的优势。把复杂运算到集算器完成,过程虽然多了一步,但结构更为清晰。
数据准备还能解决动态数据源和数据集的问题。报表使用的数据源一般是在报表工具中配置的,不能根据参数动态选择,而使用集算器数据源时就可以用脚本控制连接不同的数据源。通用查询报表要求数据集取数SQL不能简单地用参数控制,而要整体替换,支持宏的报表工具能够一定程度地解决这个问题,但面对要将宏计算后才能拼进SQL的复杂场景也会感觉困难,而采用集算器数据集则无论是否支持宏、需要多复杂的宏计算都可轻松应对。
数据准备不仅能解决报表中的计算,还能协助处理格式。比如许多报表工具都支持纵向分栏,但很少有报表工具支持横向分栏,对这种需求无法处理。而采用集算器可以方便地将原数据集变换成横向拼接过的数据集,报表工作只要用普通的模板呈现一个列数更多的数据集即可。再比如许多报表工具不支持末页补足空行,也可以用集算器在返回数据集时补。
一致的多样性数据源支持
报表的数据源并不只是关系数据库,还可能是TXT或json等文件,而文件没有计算能力,所以常常要有一个过程将这些数据导进数据库,增加开发工作量。
如果采用集算器准备数据,则可以直接用这些文件作为数据源去生成报表,不需要导入数据库的过程。
数据库包括NoSQL数据库、文件包括HDFS文件,对于集算器来讲都是数据源。集算器自有的计算能力可以使这些计算能力不一的多样性数据获得通用一致的计算能力。比如文件几乎没有计算能力,MongoDB对JOIN和GROUP运算支持不足,各家SQL对窗口函数的支持程度不同、日期与字串处理能力也普遍不足且风格迥异。这些数据源都能基于集算器采用一致通用的方案来计算,而这将意味着更低的移植成本以及学习难度。
接下来的文章,还将继续为大家介绍大数据计算引擎-润乾集算器。