CN114816420A - 一种数据处理方法和装置 - Google Patents

一种数据处理方法和装置 Download PDF

Info

Publication number
CN114816420A
CN114816420A CN202210438846.8A CN202210438846A CN114816420A CN 114816420 A CN114816420 A CN 114816420A CN 202210438846 A CN202210438846 A CN 202210438846A CN 114816420 A CN114816420 A CN 114816420A
Authority
CN
China
Prior art keywords
index
data
calculation expression
grammar
syntax
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202210438846.8A
Other languages
English (en)
Inventor
胡小锋
易晓磊
冯永昌
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Jingdong Technology Information Technology Co Ltd
Original Assignee
Jingdong Technology Information Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Jingdong Technology Information Technology Co Ltd filed Critical Jingdong Technology Information Technology Co Ltd
Priority to CN202210438846.8A priority Critical patent/CN114816420A/zh
Publication of CN114816420A publication Critical patent/CN114816420A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/42Syntactic analysis
    • G06F8/427Parsing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/37Compiler construction; Parser generation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/38Creation or generation of source code for implementing user interfaces
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/42Syntactic analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/42Syntactic analysis
    • G06F8/425Lexical analysis

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

本发明公开了一种数据处理方法和装置,涉及计算机技术领域。该方法的一具体实施方式包括:接收对指标计算表达式的语法规则和语法标签的定义操作,使用语法规则,对指标计算表达式进行词法分析和语法分析,得到语法解析树;创建访问器以遍历语法解析树,通过解析语法解析树中的节点,以将节点中的语法标签替换为相应语法规则的实现逻辑代码;确定指标计算表达式中的指标标识,获取与指标标识对应的指标数据,按照实现逻辑代码所处节点在语法解析树中的位置,按序处理指标数据,得到处理结果数据并返回。该实施方式,且对于能给出数据表达式的指标定义者,无需编写冗余代码,即可实现对新指标的高效定义和高效执行,学习成本和操作成本较低。

Description

一种数据处理方法和装置
技术领域
本发明涉及计算机技术领域,尤其涉及一种数据处理方法和装置。
背景技术
数据统计处理中存在需要基于基础指标计算衍生指标的场景,例如根据某地区的GDP(Gross Domestic Product,国内生产总值)和人口数据,计算该地区的人均GDP。目前主要通过离线作业预计算和配置脚本方式实现,但这两种方式存在部署成本较高或者学习成本较高、编写代码冗余费时的问题。
发明内容
有鉴于此,本发明实施例提供一种数据处理方法和装置,至少能够解决现有基于基础指标计算衍生指标的技术中,存在部署成本较高、或者学习成本较高、编写代码冗余费时的现象。
为实现上述目的,根据本发明实施例的一个方面,提供了一种数据处理方法,包括:
接收对指标计算表达式的语法规则和语法标签的定义操作,使用所述语法规则,对所述指标计算表达式进行词法分析和语法分析,得到语法解析树;
创建访问器以遍历所述语法解析树,通过解析所述语法解析树中的节点,以将所述节点中的语法标签替换为相应语法规则的实现逻辑代码;
确定所述指标计算表达式中的指标标识,获取与所述指标标识对应的指标数据,按照实现逻辑代码所处节点在所述语法解析树中的位置,按序处理所述指标数据,得到处理结果数据并返回。
可选的,所述使用所述语法规则,对所述指标计算表达式进行词法分析和语法分析,得到语法解析树,包括:
获取所述指标计算表达式中的字符,使用词法分析器对字符组成的序列进行词法分析,以将字符序列转换为令牌符号;
使用语法分析器对令牌符号组成的序列进行语法分析,得到所述指标计算表达式的语法解析树。
可选的,指标标识包括基础指标标识和/或衍生指标标识,所述确定所述指标计算表达式中的指标标识,包括:
基于基础指标标识表,判断每个指标标识是否为基础指标标识;
对于所述指标计算表达式中的每个衍生指标标识,查询与所述每个衍生指标标识对应的衍生指标计算表达式;
将所述每个衍生指标标识替换为所述衍生指标计算表达式,得到目标指标计算表达式。
可选的,所述获取与所述指标标识对应的指标数据,包括:
查询内存中是否存在与所述指标标识对应的指标数据;
若存在,则从内存获取所述指标数据;或
若不存在,则使用远程过程调用协议从数据库获取所述指标数据。
可选的,所述使用远程过程调用协议从数据库获取所述指标数据,包括:
使用远程过程调用协议,查询数据库中与所述指标标识对应的目标数据表;
向所述目标数据表发送数据查询请求,数据查询请求包括所述指标标识,以接收所述目标数据表返回的所述指标数据。
可选的,所述指标数据为键值对形式,键名为日期,键值为数值;
所述按序处理所述指标数据,包括:
确定左操作数、右操作数和操作符;其中,操作符与实现逻辑代码存在对应关系,左操作数位于所述操作符之前且相邻位置、右操作数位于所述操作符之后且相邻位置;
在左操作数和右操作数均为映射对象类型的情况下,将左操作数和右操作数中相同键名的数值进行操作符运算;或
在左操作数为映射对象类型、右操作数为数字类型的情况下,将左操作数中每个键名对应的键值与右操作数进行操作符运算;或
在左操作数为数字类型、右操作数为映射对象类型的情况下,将左操作数与右操作数中每个键名对应的键值进行操作符运算;或
在左操作数和右操作数均为数字类型的情况下,将左操作数和右操作数进行操作符运算。
为实现上述目的,根据本发明实施例的另一方面,提供了一种数据处理装置,包括:
分析模块,用于接收对指标计算表达式的语法规则和语法标签的定义操作,使用所述语法规则,对所述指标计算表达式进行词法分析和语法分析,得到语法解析树;
解析模块,用于创建访问器以遍历所述语法解析树,通过解析所述语法解析树中的节点,以将所述节点中的语法标签替换为相应语法规则的实现逻辑代码;
计算模块,用于确定所述指标计算表达式中的指标标识,获取与所述指标标识对应的指标数据,按照实现逻辑代码所处节点在所述语法解析树中的位置,按序处理所述指标数据,得到处理结果数据并返回。
可选的,所述分析模块,用于:
获取所述指标计算表达式中的字符,使用词法分析器对字符组成的序列进行词法分析,以将字符序列转换为令牌符号;
使用语法分析器对令牌符号组成的序列进行语法分析,得到所述指标计算表达式的语法解析树。
可选的,指标标识包括基础指标标识和/或衍生指标标识,所述计算模块,用于:
基于基础指标标识表,判断每个指标标识是否为基础指标标识;
对于所述指标计算表达式中的每个衍生指标标识,查询与所述每个衍生指标标识对应的衍生指标计算表达式;
将所述每个衍生指标标识替换为所述衍生指标计算表达式,得到目标指标计算表达式。
可选的,所述计算模块,用于:
查询内存中是否存在与所述指标标识对应的指标数据;
若存在,则从内存获取所述指标数据;或
若不存在,则使用远程过程调用协议从数据库获取所述指标数据。
可选的,所述计算模块,用于:
使用远程过程调用协议,查询数据库中与所述指标标识对应的目标数据表;
向所述目标数据表发送数据查询请求,数据查询请求包括所述指标标识,以接收所述目标数据表返回的所述指标数据。
可选的,所述指标数据为键值对形式,键名为日期,键值为数值;
所述计算模块,用于:
确定左操作数、右操作数和操作符;其中,操作符与实现逻辑代码存在对应关系,左操作数位于所述操作符之前且相邻位置、右操作数位于所述操作符之后且相邻位置;
在左操作数和右操作数均为映射对象类型的情况下,将左操作数和右操作数中相同键名的数值进行操作符运算;或
在左操作数为映射对象类型、右操作数为数字类型的情况下,将左操作数中每个键名对应的键值与右操作数进行操作符运算;或
在左操作数为数字类型、右操作数为映射对象类型的情况下,将左操作数与右操作数中每个键名对应的键值进行操作符运算;或
在左操作数和右操作数均为数字类型的情况下,将左操作数和右操作数进行操作符运算。
为实现上述目的,根据本发明实施例的再一方面,提供了一种数据处理电子设备。
本发明实施例的电子设备包括:一个或多个处理器;存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现上述任一所述的数据处理方法。
为实现上述目的,根据本发明实施例的再一方面,提供了一种计算机可读介质,其上存储有计算机程序,所述程序被处理器执行时实现上述任一所述的数据处理方法。
根据本发明所述提供的方案,上述发明中的一个实施例具有如下优点或有益效果:1、用户能够自主、灵活地配置指标计算表达式的语法规则,且在每个语法规则后设置语法标签,IDEA可以将该语法标签替换为用以操作该语法规则的实现逻辑代码,因而后续无需再查找实现逻辑,直接使用即可,提高了语法规则的使用效率;2、及时响应指标计算表达式中指标是否为基础指标,以在内存中不存在衍生指标的数据的情况下,将该衍生指标替换为相应衍生指标计算公式,呈现公式叠加效果,以此提高最终计算准确性,甚者可以将所有衍生指标均替换为相应计算公式,以不受衍生指标数据是否存在的影响;3、实现计算衍生指标的高效定义和高效执行,且对于能给出数据表达式的指标定义者,无需编写冗余代码,即可实现独自开发新指标的目的,学习成本和操作成本较低。
上述的非惯用的可选方式所具有的进一步效果将在下文中结合具体实施方式加以说明。
附图说明
附图用于更好地理解本发明,不构成对本发明的不当限定。其中:
图1是根据本发明实施例的一种数据处理方法的主要流程示意图;
图2是根据本发明实施例的一具体地数据处理方法的流程示意图;
图3是根据本发明实施例的一种数据处理装置的主要模块示意图;
图4是本发明实施例可以应用于其中的示例性系统架构图;
图5是适于用来实现本发明实施例的移动设备或服务器的计算机系统的结构示意图。
具体实施方式
以下结合附图对本发明的示范性实施例做出说明,其中包括本发明实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本发明的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
需要指出的是,在不冲突的情况下,本发明中的实施例以及实施例中的特征可以互相组合。本申请技术方案中对数据的获取、存储、使用、处理等均符合国家法律法规的相关规定。
此处对现有技术进行详细描述,目前基于基础指标计算衍生指标的常用做法有两种:
方式1:离线作业预计算,然后将计算结果推送到业务系统的数据库中。但这种方式每修改一次计算公式,需等待一定时长才能看到结果,部署成本高。虽然每一个衍生指标作业的计算时间较短,但当需计算的衍生指标数量过多时,对机器资源的浪费也是不可忽视的。
方式2:在业务系统中配置脚本代码进行实时计算。脚本代码也是计算机编程语言,有变量、函数、类、API(Application Programming Interface,应用程序编程接口)等概念需要指标定义者熟练,因此学习成本高,编写新指标的代码冗长费时。有些指标定义者给出的新指标的数学表达式,不一定都能编码实现。
对于本方案所涉及的词语,做解释如下:
指标:一组按时间统计的数值,如一个地区的年度GDP。
ANTLR4:ANTLR(ANother Tool for Language Recognition)是一个强大的跨语言语法解析器,可以用来读取、处理、执行或翻译结构化文本或二进制文件,被广泛用来构建语言、工具和框架。ANTLR可以从语法上生成一个可以构建和遍历解析树的解析器。
语法分析器(Parser):通常作为编译器或解释器出现,其作用是进行语法检查,并构建由输入单词/令牌(Token)组成的数据结构。语法分析器通常使用词法分析器(Lexer)从输入字符流中分离出一个个Token,并将Token流作为其输入。实际开发中,语法分析器可以手工编写,也可以使用工具自动生成。
CommonTokenStream:ANTLR4中的核心类,用于处理词法分析后识别的token。
语法解析树/抽象语法树(Abstract Syntax Tree,AST):源代码结构的一种抽象表示,以树的形状表示语言的语法结构,可以用来进行代码语法的检查,代码风格的检查,代码的格式化,代码的高亮,代码的错误提示以及代码的自动补全等。
远程过程调用(Remote Procedure Call,RPC):是一个计算机通信协议。该协议允许运行于一台计算机的程序调用另一个地址空间(通常为一个开放网络的一台计算机)的子程序,像调用本地程序一样,无需额外地为这个交互作用编程。
Map:是一个将键映射到值的对象,映射不能包含重复的键,每个键最多可以映射到一个值。Java语言中三个通用的Map实现是HashMap、TreeMap和LinkedHashMap,本方案为保证key的顺序,优选采用LinedHashMap。
IDEA:一种商业化销售的Java集成开发环境(Integrated DevelopmentEnvironment,IDE)工具软件。
参见图1,示出的是本发明实施例提供的一种数据处理方法的主要流程图,包括如下步骤:
S101:接收对指标计算表达式的语法规则和语法标签的定义操作,使用所述语法规则,对所述指标计算表达式进行词法分析和语法分析,得到语法解析树;
S102:创建访问器以遍历所述语法解析树,通过解析所述语法解析树中的节点,以将所述节点中的语法标签替换为相应语法规则的实现逻辑代码;
S103:确定所述指标计算表达式中的指标标识,获取与所述指标标识对应的指标数据,按照实现逻辑代码所处节点在所述语法解析树中的位置,按序处理所述指标数据,得到处理结果数据并返回。
上述实施方式中,对于步骤S101,IDEA提供输入界面给用户输入指标计算表达式,如($PAYEMS-lag($PAYEMS,1)),其中PAYEMS为【月度地区M就业总人数】的指标ID。需要说明的是,不同场景下所需符号不同,实际经济指标ID的命名中,有些是由纯数字组成,有些则是由数字下划线和字母组成,为了能尽大程度的适配更多的情况,故语法上在经济指标ID前设置$符号。
可以设置配置界面,用户可以自定义指标计算表达式的语法规则和语法标签,示例如下:
Figure BDA0003614192490000081
其中,expr命令是一个手工命令行计数器,用于在UNIX/LINUX下求表达式变量的值,一般用于整数值,也可用于字符串。expr表达式:使用空格隔开每个项;用反斜杠\放在shell(俗称壳(用来区别于核),是指"为使用者提供操作界面"的软件)特定的字符前面;对包含空格和其他特殊字符的字符串要用引号括起来。
以上语法定义支持指标与其他指标、指标与自身、指标和常数的计算,可以输入指标计算表达式使用ANTLR4来解析,以检验语法定义是否有纰漏。需要说明的是,ANTLR4可以在每个语法规则后,加上以井号“#”为开头的标签#label,这将在后续自动生成代码的时候,通过将每一个label替换为实现逻辑代码来达到最终语法逻辑。
对于语法规则,可以提供一个供ANTLR4使用的语法规则文件,语法规则文件中使用ANTLR工具文法定义中的词法定义规则,定义系统中出现的所有关键字、操作符及可识别的数据类型;同时在规则文件中通过ANTLR工具文法定义中的语法定义规则及语法规则的嵌套,来定义表达式语法中操作符的结构及操作符的优先级。其中,在计算机科学中,文法是编译原理的基础,是描述一门程序设计语言和实现其编译器的方法。
虽利用ANTLR4生成语法解析树的步骤为现有,但针对不同的语法规则,具体实现逻辑是不同的。因此,本方案通过使用用户自定义的语法规则,对指标计算表达式进行词法分析和语法分析,以正确的生成指标计算表达式的语法解析树,具体地:
1)获取输入指标计算表达式中的字符;
2)使用词法分析器(Lexer),结合ANTLR4的公共令牌流程类CommonTokenStream,对指标计算表达式进行词法分析;其中,词法分析指在计算机科学中,将字符序列转换为令牌(Token)的过程,词法分析器一般是用来供语法分析器(Parser)调用的;
3)将词法分析器产生的令牌符号放入缓冲区;
4)从缓冲区提取令牌符号以送入语法分析器;
5)使用语法分析器(ExpressionParser),对令牌符号组成的序列进行语法分析,最终得到指标计算表达式的语法解析树。
使用ANTLR4自动生成代码,如在IDEA中右键IndexEngine.g4,选择ConfigureANTLR Recognizer,以生成词法分析器、语法分析器和语法树遍历器、语法树访问器的代码。
对于步骤S102,根据前述描述可知,通过ANTLR4可以生成与指标计算表达式对应的语法解析树。接着遍历该语法解析树,本方案使用Java代码来正确实现指标计算表达式所预期的行为。
通常有两种做法:监听器(Listener)和访问器(Visitor),根据前述描述可知已自定义语法标签label,因此本方案优选访问器(Visitor),以直接访问label。通过创建访问器IndexEngineVisitor,开始遍历该语法解析树,返回访问器Visitor遍历完成的结果(公式计算结果)。
此处讲述访问器IndexEngineVisitor的实现细节,该类继承自ANTLR4自动生成代码中的IndexEngineBaseVisitor(为空,因此需要创建访问器),通过解析语法解析树中的节点,以将节点中的label替换为相应语法规则的实现逻辑代码,用以实现指标计算表达式的语法规则,实际操作中,可能一个节点对应一个label,也可能多个节点对应同一个label。
对于前述代码,访问器所需解析的label主要包含:
visitId:解析指标ID
visitAddSub:解析加减法
visitMulDiv:解析乘除法
visitLiteral:解析数字
visitLagFuncs:解析lag函数;其中,Lag函数可以在同一次查询中取出同一字段的前N行的数据(Lag)作为独立的列
visitParen:解析括弧
对于步骤S103,传统表达式不支持数组作为变量的计算,如[1,2,3],本方案中的指标计算表达式能够支持对数组的运算。指标计算表达式关键在于解析指标ID,通过前述visitId(IndexEngineParser.IdContext ctx)方法来完成。首先需要获取指标数据,具体地:
1)查询内存中是否存在该指标ID的数据;
2)若存在,则直接返回内存中的数据;若不存在,调用getByIndexId方法从数据库获取该指标ID的数据。其中,getByIndexId,根据指标ID调用远端RPC方法获取指标数据,可以像调用本地方法一样来调用远端。
①根据传递来的指标ID,在注册表查询该指标ID的数据存在于哪个目标数据表内;
②发起对目标数据表的数据查询请求,数据查询请求包括该指标ID,最后将查询到的数据,按日期排序返回给ANTLR4以供计算使用。
3)通过上述步骤可以使得指标计算表达式支持对数组的操作。返回类型为Map<String,Double>类型,其中Double为对应的数值,String为数值的日期(日、月、季、年等),如:2020-04-01,2020-10,2020-Q1,2020等。
需要说明的是,本方案中存储于内存中的指标数据,通常为衍生指标数据,而基础指标数据通常存储于数据库中,需通过getByIndexId调取。内存中的衍生指标数据,通常会在监测到指标计算表达式计算出结果后,自行删除。但若被多个指标计算表达式调用,则会在这些指标计算表达式均计算出结果后,自行删除。
以前述指标计算表达式($PAYEMS-lag($PAYEMS,1))为例,获取与指标ID对应的指标数据,按照实现逻辑代码所处节点在语法解析树中的位置,按序处理指标数据的具体操作过程为:
1、查询$PAYEMS的数据并存储到map1中;
2、计算lag($PAYEMS,1)的结果存储到map2中,getLagIndexId为真正的计算lag函数逻辑。为对lag函数的支持,visitLagFuncs函数的处理过程如下:
1)从lag($PAYEMS,1)中,获取指标ID和向后错位数值;
2)查询内存中是否存在该指标ID的数据,没有则查询数据库填充内存;
3)根据指标ID和向后错位的数值来查询错位后的数据。
比如:某月度指标X从2021年07月开始统计数值到2021年12月,那么lag(X,1)的数值就只有5个月,参见表1所示:
表1
错位前 错位后
2021-12 100 2021-12 99
2021-11 99 2021-11 101
2021-10 101 2021-10 102
2021-09 102 2021-09 97
2021-08 97 2021-08 96
2021-07 96
3、接着进行减法操作数的处理(乘除法类似)
1)确定操作符、位于所述操作符之前且相邻位置的左操作数、以及位于操作符之后且相邻位置的右操作数;其中,一个操作符与一个实现逻辑代码对应,本实施例中为减号“-”;
2)如果左操作数是map类型,则判断右操作数是否是为map类型
A、右操作数是map类型,则将两个map中相同key的数值进行减处理,即相同日期的数值进行减处理;
B、如果右操作数是数字类型,则左操作数每一个key对应的数值和该数字进行减处理;
以上A、B两种情形的计算结果依然是map。
3)如果左操作数不是map类型,判断右操作数是否为map类型
A、如果右操作数是map类型,则左操作数与右操作数的每一个key对应的数值进行减处理,此时计算结果类型为Map。
B、如果右操作数也不是map类型,则将左右操作数相减,此时计算结果类型为Double。
本发明实施例所提供的方法,相对于现有技术,至少存在如下有益效果:
1、用户能够自主、灵活地配置指标计算表达式的语法规则,且在每个语法规则后设置语法标签,IDEA可以将该语法标签替换为用以操作该语法规则的实现逻辑代码,因而后续无需再查找实现逻辑,直接使用即可,提高了语法规则的使用效率;
2、及时响应指标计算表达式中指标是否为基础指标,以在内存中不存在衍生指标的数据的情况下,将该衍生指标替换为相应衍生指标计算公式,呈现公式叠加效果,以此提高最终计算准确性,甚者可以将所有衍生指标均替换为相应计算公式,以不受衍生指标数据是否存在的影响;
3、实现计算衍生指标的高效定义和高效执行,且对于能给出数据表达式的指标定义者,无需编写冗余代码,即可实现独自开发新指标的目的,学习成本和操作成本较低。
参见图2,示出了根据本发明实施例的一具体地数据处理方法流程示意图,包括如下步骤:
S201:接收对指标计算表达式的语法规则和语法标签的定义操作,使用所述语法规则,对所述指标计算表达式进行词法分析和语法分析,得到语法解析树;
S202:创建访问器以遍历所述语法解析树,通过解析所述语法解析树中的节点,以将所述节点中的语法标签替换为相应语法规则的实现逻辑代码;
S203:确定所述指标计算表达式中的指标标识,基于基础指标标识表,判断每个指标标识是否为基础指标标识;
S204:对于所述指标计算表达式中的每个衍生指标标识,查询与所述每个衍生指标标识对应的衍生指标计算表达式;
S205:将所述每个衍生指标标识替换为所述衍生指标计算表达式,得到目标指标计算表达式;
S206:获取所述目标指标计算表达式中每个指标标识对应的指标数据,按照实现逻辑代码所处节点在所述语法解析树中的位置,按序处理所述指标数据,得到处理结果数据并返回。
上述实施方式中,对于步骤S201、S202和S206,可参见图1所示步骤S101~S103的描述,在此不再赘述。
上述实施方式中,对于步骤S203~S205,实际操作中,若用户输入的指标计算表达式中包含衍生指标,可以将该衍生指标替换为由基础指标组成的表达式,便于后续数据获取。例如:
指标A+指标B→指标C;
指标C+指标D→指标E,此处的“+”仅表示通过多个指标的数据生成目标指标的数据,区别于运算加法。
表2基础指标标识表
基础指标标识表
指标A
指标B
指标D
表3衍生指标的计算表达式表
衍生指标的计算表达式
指标A+指标B=指标C
指标C-指标D=指标E
指标B*指标D=指标F
若用户输入的指标计算表达式为(指标A+指标D*指标E),包括指标A、指标D和指标E,其中根据表2可知指标A、指标D属于基础指标,而指标E属于衍生指标,因此根据表3,需将指标E替换为表达式(指标C-指标D),由于指标C同为衍生指标,因此需继续将指标C替换为表达式(指标A+指标B),最终将用户输入的指标计算表达式更新为仅由基础指标组成的目标指标计算表达式:
(指标A+指标D*((指标A+指标B)-指标D))
需要说明的是,上述这种情况,可适用于内存中不存在衍生指标数据的情况,如不存在指标C的数据,则需要根据表3将指标C替换为相应表达式。但若内存中存在指标C的数据,则优选不进行替换,以避免目标指标计算表达式过长、以及计算时长过长的问题,但也可以选择进行替换,具体依据工作人员设定。
此处进行具体举例:地区M通常只会公布【月度地区M就业总人数】,原始数据存储在数据库中,结构如下表4所示,其中PAYEMS为的【月度地区M就业总人数】的指标ID
表4
PAYEMS,2021-08,147190,Thousands of Persons
PAYEMS,2021-07,146821,Thousands of Persons
PAYEMS,2021-06,145878,Thousands of Persons
PAYEMS,2021-05,144940,Thousands of Persons
PAYEMS,2021-04,144326,Thousands of Persons
PAYEMS,2021-03,144057,Thousands of Persons
PAYEMS,2021-02,143272,Thousands of Persons
PAYEMS,2021-01,142736,Thousands of Persons
用户设置的计算公式为:新增就业人口(m)=地区M就业总人数(m)-地区M就业总人数(m-1),其中,m为月份,(m-1)为m月的上一个月。但该公式配置多有不便,为此特以$指标ID来引用指标的数据参与到公式计算,更改后的指标计算表达式为:($PAYEMS-lag($PAYEMS,1))。
使用语法分析器ANTLR4对指标计算表达式($PAYEMS-lag($PAYEMS,1))进行词法分析和语法分析,得到语法解析树。后续计算过程如下:
1、查询$PAYEMS的数据并存储到map1中,计算lag($PAYEMS,1)的结果存储到map2中;
2、遍历map1的key,查询该key在map1中的值,减去其在map2中的值,计算结果为map。
以下为更通俗的解释:
新增就业人口(2021-08)=地区M就业总人数(2021-08)-地区M就业总人数(2021-07)
新增就业人口(2021-07)=地区M就业总人数(2021-07)-地区M就业总人数(2021-06)
……
计算结果如下:
"category":"2021-02",
"value":"536.0"
"category":"2021-03",
"value":"785.0"
"category":"2021-04",
"value":"269.0"
"category":"2021-05",
"value":"614.0"
"category":"2021-06",
"value":"938.0"
"category":"2021-06",
"value":"943.0"
"category":"2021-08",
"value":"369.0"
参见图3,示出了本发明实施例提供的一种数据处理装置300的主要模块示意图,包括:
分析模块301,用于接收对指标计算表达式的语法规则和语法标签的定义操作,使用所述语法规则,对所述指标计算表达式进行词法分析和语法分析,得到语法解析树;
解析模块302,用于创建访问器以遍历所述语法解析树,通过解析所述语法解析树中的节点,以将所述节点中的语法标签替换为相应语法规则的实现逻辑代码;
计算模块303,用于确定所述指标计算表达式中的指标标识,获取与所述指标标识对应的指标数据,按照实现逻辑代码所处节点在所述语法解析树中的位置,按序处理所述指标数据,得到处理结果数据并返回。
本发明实施的装置中,所述分析模块301,用于:
获取所述指标计算表达式中的字符,使用词法分析器对字符组成的序列进行词法分析,以将字符序列转换为令牌符号;
使用语法分析器对令牌符号组成的序列进行语法分析,得到所述指标计算表达式的语法解析树。
本发明实施的装置中,指标标识包括基础指标标识和/或衍生指标标识,所述计算模块303,用于:
基于基础指标标识表,判断每个指标标识是否为基础指标标识;
对于所述指标计算表达式中的每个衍生指标标识,查询与所述每个衍生指标标识对应的衍生指标计算表达式;
将所述每个衍生指标标识替换为所述衍生指标计算表达式,得到目标指标计算表达式。
本发明实施的装置中,所述计算模块303,用于:
查询内存中是否存在与所述指标标识对应的指标数据;
若存在,则从内存获取所述指标数据;或
若不存在,则使用远程过程调用协议从数据库获取所述指标数据。
本发明实施的装置中,所述计算模块303,用于:
使用远程过程调用协议,查询数据库中与所述指标标识对应的目标数据表;
向所述目标数据表发送数据查询请求,数据查询请求包括所述指标标识,以接收所述目标数据表返回的所述指标数据。
本发明实施的装置中,所述指标数据为键值对形式,键名为日期,键值为数值;
所述计算模块303,用于:
确定左操作数、右操作数和操作符;其中,操作符与实现逻辑代码存在对应关系,左操作数位于所述操作符之前且相邻位置、右操作数位于所述操作符之后且相邻位置;
在左操作数和右操作数均为映射对象类型的情况下,将左操作数和右操作数中相同键名的数值进行操作符运算;或
在左操作数为映射对象类型、右操作数为数字类型的情况下,将左操作数中每个键名对应的键值与右操作数进行操作符运算;或
在左操作数为数字类型、右操作数为映射对象类型的情况下,将左操作数与右操作数中每个键名对应的键值进行操作符运算;或
在左操作数和右操作数均为数字类型的情况下,将左操作数和右操作数进行操作符运算。
另外,在本发明实施例中所述装置的具体实施内容,在上面所述方法中已经详细说明了,故在此重复内容不再说明。
图4示出了可以应用本发明实施例的示例性系统架构400,包括终端设备401、402、403,网络404和服务器405(仅仅是示例)。
终端设备401、402、403可以是具有显示屏并且支持网页浏览的各种电子设备,安装有各种通讯客户端应用,用户可以使用终端设备401、402、403通过网络404与服务器405交互,以接收或发送消息等。
网络404用以在终端设备401、402、403和服务器405之间提供通信链路的介质。网络404可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。
服务器405可以是提供各种服务的服务器,需要说明的是,本发明实施例所提供的方法一般由服务器405执行,相应地,装置一般设置于服务器405中。
应该理解,图4中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。
下面参考图5,其示出了适于用来实现本发明实施例的终端设备的计算机系统500的结构示意图。图5示出的终端设备仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
如图5所示,计算机系统500包括中央处理单元(CPU)501,其可以根据存储在只读存储器(ROM)502中的程序或者从存储部分508加载到随机访问存储器(RAM)503中的程序而执行各种适当的动作和处理。在RAM 503中,还存储有系统500操作所需的各种程序和数据。CPU 501、ROM 502以及RAM 503通过总线504彼此相连。输入/输出(I/O)接口505也连接至总线504。
以下部件连接至I/O接口505:包括键盘、鼠标等的输入部分506;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分507;包括硬盘等的存储部分508;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分509。通信部分509经由诸如因特网的网络执行通信处理。驱动器510也根据需要连接至I/O接口505。可拆卸介质511,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器510上,以便于从其上读出的计算机程序根据需要被安装入存储部分508。
特别地,根据本发明公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本发明公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分509从网络上被下载和安装,和/或从可拆卸介质511被安装。在该计算机程序被中央处理单元(CPU)501执行时,执行本发明的系统中限定的上述功能。
需要说明的是,本发明所示的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本发明中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本发明中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、RF等等,或者上述的任意合适的组合。
附图中的流程图和框图,图示了按照本发明各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本发明实施例中所涉及到的模块可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的模块也可以设置在处理器中,例如,可以描述为:一种处理器包括分析模块、解析模块、计算模块。其中,这些模块的名称在某种情况下并不构成对该模块本身的限定,例如,计算模块还可以被描述为“计算数据模块”。
作为另一方面,本发明还提供了一种计算机可读介质,该计算机可读介质可以是上述实施例中描述的设备中所包含的;也可以是单独存在,而未装配入该设备中。上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被一个该设备执行时,使得该设备包括:
接收对指标计算表达式的语法规则和语法标签的定义操作,使用所述语法规则,对所述指标计算表达式进行词法分析和语法分析,得到语法解析树;
创建访问器以遍历所述语法解析树,通过解析所述语法解析树中的节点,以将所述节点中的语法标签替换为相应语法规则的实现逻辑代码;
确定所述指标计算表达式中的指标标识,获取与所述指标标识对应的指标数据,按照实现逻辑代码所处节点在所述语法解析树中的位置,按序处理所述指标数据,得到处理结果数据并返回。
上述具体实施方式,并不构成对本发明保护范围的限制。本领域技术人员应该明白的是,取决于设计要求和其他因素,可以发生各种各样的修改、组合、子组合和替代。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明保护范围之内。

Claims (10)

1.一种数据处理方法,其特征在于,包括:
接收对指标计算表达式的语法规则和语法标签的定义操作,使用所述语法规则,对所述指标计算表达式进行词法分析和语法分析,得到语法解析树;
创建访问器以遍历所述语法解析树,通过解析所述语法解析树中的节点,以将所述节点中的语法标签替换为相应语法规则的实现逻辑代码;
确定所述指标计算表达式中的指标标识,获取与所述指标标识对应的指标数据,按照实现逻辑代码所处节点在所述语法解析树中的位置,按序处理所述指标数据,得到处理结果数据并返回。
2.根据权利要求1所述的方法,其特征在于,所述使用所述语法规则,对所述指标计算表达式进行词法分析和语法分析,得到语法解析树,包括:
获取所述指标计算表达式中的字符,使用词法分析器对字符组成的序列进行词法分析,以将字符序列转换为令牌符号;
使用语法分析器对令牌符号组成的序列进行语法分析,得到所述指标计算表达式的语法解析树。
3.根据权利要求1所述的方法,其特征在于,指标标识包括基础指标标识和/或衍生指标标识,所述确定所述指标计算表达式中的指标标识,包括:
基于基础指标标识表,判断每个指标标识是否为基础指标标识;
对于所述指标计算表达式中的每个衍生指标标识,查询与所述每个衍生指标标识对应的衍生指标计算表达式;
将所述每个衍生指标标识替换为所述衍生指标计算表达式,得到目标指标计算表达式。
4.根据权利要求1或3所述的方法,其特征在于,所述获取与所述指标标识对应的指标数据,包括:
查询内存中是否存在与所述指标标识对应的指标数据;
若存在,则从内存获取所述指标数据;或
若不存在,则使用远程过程调用协议从数据库获取所述指标数据。
5.根据权利要求4所述的方法,其特征在于,所述使用远程过程调用协议从数据库获取所述指标数据,包括:
使用远程过程调用协议,查询数据库中与所述指标标识对应的目标数据表;
向所述目标数据表发送数据查询请求,数据查询请求包括所述指标标识,以接收所述目标数据表返回的所述指标数据。
6.根据权利要求1所述的方法,其特征在于,所述指标数据为键值对形式,键名为日期,键值为数值;
所述按序处理所述指标数据,包括:
确定左操作数、右操作数和操作符;其中,操作符与实现逻辑代码存在对应关系,左操作数位于所述操作符之前且相邻位置、右操作数位于所述操作符之后且相邻位置;
在左操作数和右操作数均为映射对象类型的情况下,将左操作数和右操作数中相同键名的数值进行操作符运算;或
在左操作数为映射对象类型、右操作数为数字类型的情况下,将左操作数中每个键名对应的键值与右操作数进行操作符运算;或
在左操作数为数字类型、右操作数为映射对象类型的情况下,将左操作数与右操作数中每个键名对应的键值进行操作符运算;或
在左操作数和右操作数均为数字类型的情况下,将左操作数和右操作数进行操作符运算。
7.一种数据处理装置,其特征在于,包括:
分析模块,用于接收对指标计算表达式的语法规则和语法标签的定义操作,使用所述语法规则,对所述指标计算表达式进行词法分析和语法分析,得到语法解析树;
解析模块,用于创建访问器以遍历所述语法解析树,通过解析所述语法解析树中的节点,以将所述节点中的语法标签替换为相应语法规则的实现逻辑代码;
计算模块,用于确定所述指标计算表达式中的指标标识,获取与所述指标标识对应的指标数据,按照实现逻辑代码所处节点在所述语法解析树中的位置,按序处理所述指标数据,得到处理结果数据并返回。
8.根据权利要求7所述的装置,其特征在于,指标标识包括基础指标标识和/或衍生指标标识,所述计算模块,用于:
基于基础指标标识表,判断每个指标标识是否为基础指标标识;
对于所述指标计算表达式中的每个衍生指标标识,查询与所述每个衍生指标标识对应的衍生指标计算表达式;
将所述每个衍生指标标识替换为所述衍生指标计算表达式,得到目标指标计算表达式。
9.一种电子设备,其特征在于,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-6中任一所述的方法。
10.一种计算机可读介质,其上存储有计算机程序,其特征在于,所述程序被处理器执行时实现如权利要求1-6中任一所述的方法。
CN202210438846.8A 2022-04-25 2022-04-25 一种数据处理方法和装置 Pending CN114816420A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210438846.8A CN114816420A (zh) 2022-04-25 2022-04-25 一种数据处理方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210438846.8A CN114816420A (zh) 2022-04-25 2022-04-25 一种数据处理方法和装置

Publications (1)

Publication Number Publication Date
CN114816420A true CN114816420A (zh) 2022-07-29

Family

ID=82506565

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210438846.8A Pending CN114816420A (zh) 2022-04-25 2022-04-25 一种数据处理方法和装置

Country Status (1)

Country Link
CN (1) CN114816420A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115408595A (zh) * 2022-11-03 2022-11-29 博和利统计大数据(天津)集团有限公司 数据抓取引擎开发方法、执行方法、设备及存储介质

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115408595A (zh) * 2022-11-03 2022-11-29 博和利统计大数据(天津)集团有限公司 数据抓取引擎开发方法、执行方法、设备及存储介质

Similar Documents

Publication Publication Date Title
CN110502227B (zh) 代码补全的方法及装置、存储介质、电子设备
US9710243B2 (en) Parser that uses a reflection technique to build a program semantic tree
CN109495392B (zh) 报文转换处理方法及装置、电子设备、存储介质
CN109408528B (zh) 一种数据库脚本生成方法、装置、计算装置和存储介质
CN110555205B (zh) 否定语义识别方法及装置、电子设备、存储介质
CN110554875B (zh) 代码转换方法及装置、电子设备、存储介质
CN115061721A (zh) 一种报表生成方法、装置、计算机设备及存储介质
CN113901083B (zh) 基于多解析器的异构数据源操作资源解析定位方法和设备
CN115639980A (zh) 一种低代码平台可拖拽的前端逻辑编排方法及装置
CN115016793A (zh) 基于语法树的代码生成方法和装置、电子设备、存储介质
CN111078729A (zh) 医疗数据溯源方法、装置、系统、存储介质以及电子设备
CN114816420A (zh) 一种数据处理方法和装置
CN111475196A (zh) 编译告警溯源方法、装置、电子设备及计算机可读介质
CN116010461A (zh) 数据血缘关系解析方法及装置、存储介质及电子设备
CN115640279A (zh) 一种数据血缘关系的构建方法和装置
CN114064601B (zh) 存储过程转换方法、装置、设备和存储介质
CN113448852A (zh) 一种测试案例的获取方法、装置、电子设备及存储介质
CN112988778A (zh) 一种处理数据库查询脚本的方法和装置
CN112035416A (zh) 数据血缘分析方法、装置、电子设备及存储介质
CN111580799A (zh) 领域特定语言脚本拼装方法及系统
CN110928535A (zh) 衍生变量部署方法、装置、设备及可读存储介质
CN110737431A (zh) 软件开发方法、开发平台、终端设备及存储介质
CN117193781B (zh) 一种面向simscript语言的抽象语法树构建方法和装置
CN112527880B (zh) 大数据集群元数据信息的采集方法、装置、设备及介质
CN113535228B (zh) 监控数据链路的方法、装置及计算机可读存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination