发明内容
有鉴于此,本发明的目的在于提供一种通用统计方法和装置,能够避免占用复杂的数据库资源,并且通用性更高。
为实现上述目的,本发明提供一种通用统计方法,包括:
读取配置文件,所述配置文件中指定了存储待统计分析的文本数据源的路径与文件名匹配字符串;
解析统计任务的脚本,并将其转换成执行计划;
根据所述形成的执行计划,对配置文件中指定的待统计分析的数据源进行统计处理,形成统计结果。
优选地,所述解析统计任务的脚本包括:
在解析的过程中,根据统计任务的脚本中的节点类型生成不同的节点类,由此生成统计任务的脚本的分析树。
优选地,所述将解析后的任务的脚本转换成执行计划包括:
根据节点类型的不同,将分析树中的标识符节点转换为变量节点、常量节点、数据源节点或静态表字段节点;
将分析树中的聚集函数进行转换;
确定分析树中的各字段的偏移和操作类型;
确定执行操作函数。
优选地,所述方法还包括:将所述形成的统计结果根据数据库静态数据或者文本文件中包含的静态数据进行级联统计。
优选地,所述将形成的统计结果根据数据库静态数据或者文本文件中包含的静态数据进行级联统计包括:根据由数据库静态数据或者文本文件中包含的静态数据而设定的过滤门限,对所述统计结果进行过滤再进行统计。
优选地,所述配置文件中还指定存储统计结果的文件名;
所述方法还包括:将最终的统计结果存储入配置文件中指定的存储统计结果的文件名标识的文件中。
优选地,所述将最终的统计结果存储入配置文件中指定的存储统计结果的文件名标识的文件中包括:
当以天为统计周期时,所述存储单元暂存每小时的统计结果,当全天统计结束时,将全天最终的统计结果存储到配置文件指定的目录下,文件名包含配置文件中配置的表名、表ID、数据库类型、数据库名称、数据的日期时间、进程号、机器名信息。
另一方面,本发明还提供一种通用统计工具,包括:
配置文件读取单元,用于读取配置文件,所述配置文件中指定了存储待统计分析的文本数据源的路径与文件名匹配字符串;
脚本解析单元,用于解析统计任务的脚本;
执行计划形成单元,用于将经过脚本解析单元解析后的脚本转换成执行计划;
统计处理单元,用于根据所述形成的执行计划,对配置文件中指定的待统计分析的数据源进行统计处理,形成统计结果。
优选地,所述执行计划形成单元包括:
标识符节点转换单元,用于根据节点类型的不同,将分析树中的标识符节点转换为变量节点、常量节点、数据源节点或静态表字段节点;
聚集函数转换单元,用于将分析树中的聚集函数进行转换;
偏移和操作类型确定单元,用于确定所述分析树中的各字段的偏移和操作类型;
操作函数确定单元,用于确定执行操作函数。
优选地,还包括级联统计单元,所述级联统计单元用于将所述形成的统计结果根据数据库静态数据或者文本文件中包含的静态数据进行级联统计。
优选地,所述配置文件中还指定存储统计结果的文件名;所述通用统计工具还包括存储单元,用于将最终的统计结果存储入配置文件中指定的存储统计结果的文件名标识的文件中。
优选地,当以天为统计周期时,所述存储单元暂存每小时的统计结果,当全天统计结束时,将全天最终的统计结果存储到配置文件指定的目录下,文件名包含配置文件中配置的表名、表ID、数据库类型、数据库名称、数据的日期时间、进程号、机器名信息。
由于本发明实施例提供的通用统计方法和装置的数据源来源于文本文件,不需要占用繁忙的数据库资源,而且整个统计过程可以对脚本进行自动分析,不需要复杂的编程,通用性高。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图1示出了本发明提供的通用统计方法的示意图,该方法包括:
步骤S101:读取配置文件,该配置文件中指定了存储待统计分析的文本数据源与文件名匹配字符串。
在本实施例中,数据源存储入文本文件中,该文本文件中的数据可以采用逗号等分隔符隔开,从而方便从文本文件中导入数据进行统计分析。另外,配置文件用来指定数据库配置、静态数据来源、源数据来源,还可以指定统计结果存储的文件名或表ID。
步骤S102:解析统计任务的脚本。
在对统计任务的脚本进行解析时,根据统计任务的脚本中的节点类型生成不同的节点类,由此生成统计任务的脚本的分析树。
以下以对脚本语句“select time/300*300,caller,sum(call_duration),count(*)into test from bdr where call_duration>0”的解析为例详细说明。图2示出了对该脚本语句进行解析形成分析树的过程。在实际中可以使用UNIX操作系统中的词法解析工具LEX与语法解析工具YACC完成对统计脚本的解析。
在解析过程中,根据节点类型生成不同的节点类,例如查询语句节点类表示整个查询语句,常量节点类包括整型常量节点类、字符串常量节点类、浮点常量节点类和空指针常量节点类等,源数据或关联表类表示源数据或其他关联表的字段。另外还可以包含数据或逻辑表达式节点类、函数节点类、聚集函数节点类等。
步骤S103:将经过步骤S102解析后的脚本转换成执行计划。
由步骤S102解析后的脚本只是一个原始和粗略的脚本语句的分析树,不能够被机器直接执行,需要经过一些转换形成执行计划后才可以被执行。
转换成执行计划可以分成以下几个步骤实现。
步骤a:根据节点类型的不同,将分析树中的标识符节点转换为变量节点、常量节点、数据源节点或静态表字段节点。
步骤b:将分析树中的聚集函数进行转换。
以图2中的分析树为例,图3示出了对其进行转换的过程。图2中的分析树中的脚本select语句可以分成3个部分,第一部分是用于分组的键值(Key),第二部分是计算统计值的聚集函数,第三部分是按照脚本语句中各个变量、常量或函数等出现的次序形成的投影。转换聚集函数的目的是将上述三部分分离出来。
上述的键值Key是不需要进行汇总的部分,而且该键值也不是常数。以上述脚本语句Select caller,“const”,count(*)from bdr为例,caller就是键值,count(*)是聚集函数,而caller,count(*)在各自的位置上都有一个值,该值表示了在内存中存储位置的偏移量,将该偏移量称为他们的投影。
步骤c:确定字段的偏移和操作类型。
通过该步骤,确定数据源或关联表节点,统计键值节点,统计聚集节点的类型、在内存中所占空间的偏移量和长度等,详见图4中的虚线框内的部分。
步骤d:确定操作执行函数。
通过该步骤,确定表达式和函数的执行函数,例如一个“+”的表达式,需要它的两个参数确定其具体的操作函数,如果两个参数是整数那么使用整型相加函数。
步骤S104:根据步骤S103中形成的执行计划,对配置文件中指定的待统计分析的数据源进行统计分析,形成统计结果。
根据源数据形成统计维度的键值,从统计的键值形成分组的值,然后根据该键值寻址到统计记录,之后对统计字段进行统计,形成统计结果。
在统计过程中,经常会碰到需要按照上一次的统计结果,指定一个门限过滤后再做统计的情况,比如通话超频统计、TOPN统计等。基于这样的考虑,本实施例中的通用统计方法优选地还包括:将步骤S104中形成的统计结果,根据数据库中的静态数据或者文本文件中包含的静态数据进行级联统计。具体地,可以由数据库中的静态数据或者文本文件中包含的静态数据设定过滤门限,并对步骤S104中的统计结果进行过滤再进行统计。可以根据需要选择对统计结果进行级联统计的次数。
图4示出了本发明中的级联统计的过程。如图4所示,文本数据源是用于统计分析的数据来源,在进行统计处理后得到文本类型的统计结果,可以将该统计结果直接存入数据库中,也可以由数据库静态数据以及文本静态数据对之前形成的文本统计结果进行第一次级联统计,得到第一次级联统计后的文本统计结果。第一次级联统计后的文本统计结果可以存储入数据库中,也可以参照前次过程进行第二次级联统计,得到第二次级联统计后的文本统计结果。
在得到统计结果后,可以将该最终的统计结果进行存储,在配置文件中可以指定存储统计结果的文件名,这样可以将最终的统计结果存储入配置文件中指定的存储统计结果的文件名标识的文件中。另外,当以天为统计周期时,可以暂存每小时的统计结果,当全天统计结束时,再将全天最终的统计结果存储入配置文件中指定的存储统计结果的文件名标识的文件中。
满足上述实施例要求的配置文件可以采用如下形式:
[COMMON]
DB_TYPE=SYBIQ
STATIC_DB_SVR=数据库服务名
STATIC_DB_NAME=数据库名
STATIC_DB_USER=数据库用户名
STATIC_DB_PASSWD=数据库密码
catalog_path=/CDR/ipnm/StaticRef
[STAT_FILE_PATH]
default_path=/CDR/ipnm/StatData
[RELATION1]
name=ipnm_detail
type=data
source=file
path=/CDR/ipnm
[RELATION1_ATTRS]
f_date int
f_hour int
l_uuid string
l_name string
l_bw float
avg_in float
avg_out float
[RELATION2]
name=limit
type=join
source=database
cfile=osedb_limit.dat
[RELATION2_ATTRS]
LIMIT_ID int
LIMIT_VALUE int
[STAT_RELATION1]
name=f_ipnm_linkstat_hour_YYMM
id=1401
[STAT_RELATION2]
name=f_ipnm_linkstat_day_YYMM
id=1402
在上述配置文件中,主要分成以下四个部分:
COMMON段:用于配置数据库信息、统计中间文件目录;
STAT_FILE_PATH段:用于配置统计结果存放目录;
源数据配置段(RELATION):用于配置源数据的来源与字段类型;
统计结果段(STAT_RELATION):用于配置统计结果的名称与对应的表ID。
通过上述配置文件中可以指定存放源数据的文本文件的目录,由于通过配置文件可以使得统计识别出指定目录下的哪个文本文件为要统计的数据源,因此系统可以在同一个目录下存放多种数据源,可以根据文件名区分不同的数据源,不需要针对每个数据源要分别设置各自专用的存储目录,使得系统接口和部署更简单。另外,由于本发明中的统计方法的数据源来源于文本文件,因此不需要占用繁忙的数据库资源,而且整个统计过程可以对脚本进行自动分析,不需要复杂的编程,并且通用性高。
另外,由于使用文本文件作为数据源,支持从数据库或文本文件中读取静态数据,并且生成的统计结果数据也可以采用同样的格式,这样可以方便地实现基于统计结果进行二次或更多次的级联统计。
另外本发明还相应提供一种通用统计装置,如图5所示,该装置包括:配置文件读取单元501、脚本解析单元502、执行计划形成单元503和统计处理单元504。
其中,配置文件读取单元501用于读取配置文件,该配置文件中指定了存储待统计分析的文本数据源的路径与文件名匹配字符串。
脚本解析单元502用于解析统计任务的脚本;执行计划形成单元503用于将经过脚本解析单元501解析后的脚本转换成执行计划;统计处理单元504用于根据形成的执行计划,对配置文件中指定的待统计分析的数据源进行统计处理,形成统计结果。
其中,执行计划形成单元503具体可以包括:
标识符节点转换单元5031、聚集函数转换单元5032、偏移和操作类型确定单元5033和操作函数确定单元5034。
其中,标识符节点转换单元5031用于根据节点类型的不同,将分析树中的标识符节点转换为变量节点、常量节点、数据源节点或静态表字段节点;聚集函数转换单元5032用于将分析树中的聚集函数进行转换;偏移和操作类型确定单元5033用于确定分析树中的各字段的偏移和操作类型;操作函数确定单元5034用于确定执行操作函数。
另外,在统计过程中,经常会碰到需要按照上一次的统计结果,指定一个门限过滤后再做统计的情况,比如通话超频统计、TOPN统计等。基于这样的考虑,本实施例中的通用统计工具还优选地包括:级联统计单元,该级联统计单元用于将形成的统计结果根据数据库静态数据或者文本文件中包含的静态数据进行级联统计。由于使用文本文件作为数据源,支持从数据库或文本文件中读取静态数据,并且生成的统计结果数据也可以采用同样的格式,这样可以方便地实现基于统计结果进行二次或更多次的级联统计。
配置文件中还可以指定存储统计结果的文件名;此时通用统计工具还包括存储单元,用于将最终的统计结果存储入配置文件中指定的存储统计结果的文件名标识的文件中。当以天为统计周期时,所述存储单元暂存每小时的统计结果,当全天统计结束时,将全天最终的统计结果存储到配置文件指定的目录下,文件名包含配置文件中配置的表名、表ID、数据库类型、数据库名称以及数据的日期时间等信息。
由于本实施例中的通用统计工具的数据源来源于文本文件,因此不需要占用繁忙的数据库资源,而且整个统计过程可以对脚本进行自动分析,不需要复杂的编程,并且通用性高。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。