大数据时代,作为数据呈现的主要环节,报表工具应当怎样适应大数据?
我们经常看到用户希望报表工具能支持大数据,也经常看到某些报表工具宣称支持大数据,那么,这在技术上到底意味着什么?
事实上,报表的呈现部分和大数据并没有直接关系。报表是给人看的,人类的视觉能力不可能一次看太多的数据,上万个数据同时呈现已经超过了人的极限。报表本身没有呈现大数据的必要,从这个意义上讲,报表工具的呈现部分没必要在容量上支持大数据。
那么大数据和报表工具就没有关系了吗?
当然也不是,虽然报表最后呈现的数据可能很少,但涉及到的源数据很可能是巨大的,只是这些巨大数据的计算处理不应当由报表工具的呈现部分来完成,呈现部分的任务应当是灵活的显示复杂格式的报表,而且修改起来很方便。而报表工具应该与大数据计算方案很容易的集成,或者具备相对独立的大数据计算引擎,才能称之为支持大数据。
那么,现有的报表工具计算大数据的方式存在什么问题呢?
数据库是最常见的能处理大数据的计算方案,而所有的报表工具都能够利用数据库来完成数据计算。但是,有些报表的计算较为复杂,使用SQL实现会非常困难,这时,程序员就会采用报表工具呈现部分的直观计算方式来完成数据的计算,从而导致报表工具的呈现部分要直接处理大数据。而报表工具的呈现部分大都采用内存计算方式,并在计算过程中带有呈现属性,这样不仅性能低下,而且很容易造成内存溢出。
由此看来,仅仅依靠数据库来支持大数据计算是不够的,很可能由于SQL的编写困难导致大数据处理被转移到报表工具呈现部分。我们需要比SQL更方便的计算方案,使得报表工具可以完全专注于要呈现的那部分小数据上。
现在流行的大数据方案Hadoop可以吗?
因为HADOOP的对外接口大都是自定义风格的API,很少有报表工具能够直接访问HDFS中的数据,当然更不用说能基于这些数据做报表了。所以,对于大多数报表工具而言,Hadoop可用的接口只有类数据库的JDBC 的SQL接口,如Hive,这和普通关系数据库没有区别(甚至能力会更弱一些)。
润乾公司推出的集算报表可以很好地解决这些问题。集算报表内置了开发语言集算器esProc专门用于数据计算。esProc的服务器是集算报表的可选组件,支持并行数据计算,是大数据计算的利器。esProc能提供比SQL更敏捷的编程能力,同时也提供外存及并行计算能力。集算报表的呈现部分可以从esProc获取大数据处理的结果,而不需要直接处理大数据。集算报表还可以通过esProc来访问和计算HDFS中的数据。
集算报表对大数据的支持具体介绍如下:
一:集算报表的esProc提供比SQL更方便的计算能力,特别是有外存及并行计算能力,可以相对独立的处理大数据计算任务。
1、集算报表的esProc提供比SQL更敏捷、方便的计算能力。
经过对比发现,同样的数据计算目标,esProc可以用更少的代码实现,而且脚本更接近自然思维,可以降低开发难度,减少维护成本。例如:计算股票连续上涨的最大天数,SQL和esProc代码的对比很明显:
SQL语句(以Oracle为例):
select max(continuousDays)
from (select count(*) continuousDays
from (select sum(changeSign) over (order by tradeDate) unRiseDays
from (select tradeDate,
case when closePrice>lag(closePrice) over(order by tradeDate)
then 0 else 1 end changeSign
fromstock) )
group by unRiseDays)
esProc脚本:
esProc之所以比SQL更敏捷、高效,是因为esProc除了提供完备的结构化、半结构化计算类库之外,还提供了SQL不具备的能力。包括:分步计算,更彻底集合化,有序计算,对象引用等。
2、集算报表的esProc具备外存计算和并行计算能力。
集算报表的可选组件esProc服务器支持多机并行,并行计算架构非常简洁,开发难度要远远低于Mapreduce。并行结构如下图:
上图可以看到,子程序从各种异构数据源中取得巨量数据,并行计算后汇总给主程序。在这个过程中,少量数据可以直接存放在内存中。如果数据量大,可以使用集算器提供的外存计算类库,方便有效的解决报表内存溢出的问题。
二、集算报表可以通过esProc访问和计算HDFS中的数据
大多数报表工具是无法直接访问HDFS中的数据文件的,但是集算报表可以通过内置的esProc编程语言来实现这个需求。esProc支持包括HDFS在内的多种异构数据源,可以很方便的取数、存数。具体的代码如下图:
从上图可以看出,esProc的hdfsfile函数可以访问hdfs文件。外存计算的游标函数cursor,可以分段从hdfs的数据文件读取数据。读入之后,就可以通过group、sort、max、count等数据计算函数来统一计算了。
三、集算报表调用esProc的方式直观简洁
在集算报表中,复杂的大数据计算完全由esProc来独立完成了,报表呈现部分可以调用和接收计算结果,直接呈现。调用的方法如下图:
上图中的ds1、ds2、ds3是从esProc的程序中,返回三个结果集。dfx文件的名字,就是esProc程序文件的名字。