CN114328525A - 数据处理方法及设备 - Google Patents

数据处理方法及设备 Download PDF

Info

Publication number
CN114328525A
CN114328525A CN202111620847.6A CN202111620847A CN114328525A CN 114328525 A CN114328525 A CN 114328525A CN 202111620847 A CN202111620847 A CN 202111620847A CN 114328525 A CN114328525 A CN 114328525A
Authority
CN
China
Prior art keywords
node
instruction
branch
data table
data
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
CN202111620847.6A
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.)
WeBank Co Ltd
Original Assignee
WeBank 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 WeBank Co Ltd filed Critical WeBank Co Ltd
Priority to CN202111620847.6A priority Critical patent/CN114328525A/zh
Publication of CN114328525A publication Critical patent/CN114328525A/zh
Pending legal-status Critical Current

Links

Images

Landscapes

  • Executing Machine-Instructions (AREA)

Abstract

本申请提供一种数据处理方法及设备,方法包括获取第一指令和第一数据表;其中,第一指令用于对第一数据表和第二数据表进行处理,使用抽象语法树对第一指令进行分析获得指令结构树;在确定指令结构树中各个节点分支满足数据安全处理条件,且指令结构树中不存在数值为分组标记的节点时,从指令结构树中选择单列操作的节点分支作为备选分支,以获得多个备选分支;从多个备选分支中选择至少一个目标分支,并统计指令结构树中数值为列标记的节点的数值,根据至少一个目标分支和指令结构树数值为列标记的节点的数值对明文状态下的第一数据表和第一指令进行处理,获得第三数据表和第二指令,减少在密文状态下的数据处理量,提高数据处理效率。

Description

数据处理方法及设备
技术领域
本申请涉及属于金融科技(Fintech)领域,尤其涉及一种数据处理方法及设备。
背景技术
随着计算机技术的发展,越来越多的技术应用在金融领域,传统金融业正在逐步向金融科技(Fintech)转变,隐私计算也不例外,但由于金融行业的安全性、实时性要求,也对隐私计算提出的更高的要求。
在进行隐私计算之前会进行数据预处理,然而,通常对隐私计算的预处理,主要是对数据表进行数据清洗、格式合法性检测或者数据质量校验等,还是需要对大量在密文状态的数据进行处理,造成数据处理效率低。
发明内容
本申请提供一种数据处理方法及设备,旨在提前对在明文状态下的数据和指令进行处理,减少在密文状态下的数据处理数量,从而提高数据处理效率。
本申请一实施例提供一种数据处理方法,该方法应用于第一节点,方法包括如下步骤:
获取第一指令和第一数据表;其中,第一指令用于对第一数据表和第二数据表进行处理,第一数据表存储在第一节点,第二数据表存储在第二节点;
使用抽象语法树对第一指令进行分析获得指令结构树;在确定指令结构树中各个节点分支满足数据安全处理条件,且指令结构树中不存在数值为分组标记的节点时,从指令结构树中选择单列操作的节点分支作为备选分支,以获得多个备选分支;
从多个备选分支中选择至少一个目标分支,并统计指令结构树中数值为列标记的节点的数值,根据至少一个目标分支和指令结构树数值为列标记的节点的数值对明文状态下的第一数据表和第一指令进行处理,获得第三数据表和第二指令。
在一实施例中,在根据至少一个目标分支对明文状态下的第一数据表和第一指令进行处理获得第三数据表和第二指令之后,方法还包括:
根据第二指令和加密后的第三数据表生成第一处理请求,并向第三节点发送第一处理请求;
其中,第三节点还用于接收第二节点发送的第二处理请求,以及根据第一处理请求和第二处理请求进行数据处理,并将处理结果发送至第一节点和第二节点;第二处理请求是第二节点根据第三指令和加密后的第四数据表生成的,第三指令和第四数据表是对第二数据表和第一指令进行处理获得的。
在一实施例中,确定指令结构树中各个节点分支是否满足数据安全处理条件,具体包括以下任意一项:
指令结构树中不存在表示全表查询的节点分支;
指令结构树中不存在表示全列查询的节点分支;
指令结构树中包含表示单列查询的第一节点分支和其他属于结果分支的第二节点分支;其中,第二节点分支不是表示命名的节点分支。
在一实施例中,从指令结构树中选择单列操作的节点分支作为备选分支,以获得多个备选分支,具体包括:
遍历指令结构树中各个节点分支,当节点分支所对应的表达式为过滤语句、运算语句或者聚合语句,且节点分支中仅包含一个数值为列标记的节点时,将节点分支作为备选分支。
在一实施例中,从多个备选分支中选择至少一个目标分支;具体包括:
当备选分支所对应的表达式为过滤语句时,则将备选分支作为目标分支;
当备选分支所对应的表达式为运算语句或者聚合语句时,且备选分支所包含的数值为列标记的节点与指令结构树中剩余的属于结果分支的节点分支中的数值为列标记的节点均不同时,则将备选分支作为目标分支。
在一实施例中,根据至少一个目标分支和指令结构树数值为列标记的节点的数值对明文状态下的第一数据表和第一指令进行处理,获得第三数据表和第二指令,具体包括:
重复执行根据其中一个目标分支对应的表达式对明文状态下的第一数据表中对应列数据进行处理获得第一中间数据表,并根据目标分支对第一指令更新,并将第一中间数据表作为第一数据表,直到遍历所有目标分支为止,并将最后一次循环获得的第一中间数据表作为第二中间数据表,并将最后一次循环获得的更新后的第一指令作为中间指令;
根据指令结构树中数值为列标记的节点的数值从第二中间数据表中选择中间指令所操作的列数据,获得第三数据表;并更新中间指令中的列标识获得第二指令。
在一实施例中,目标分支的遍历顺序为表达式为过滤语句的目标分支、表达式为运算语句的目标分支以及表达式为聚合语句的目标分支。
在一实施例中,方法还包括:
在确定指令结构树中各个节点无法满足数据安全处理条件,且指令结构树中存在数值为分组标记的节点时,对明文状态下的第一数据表进行分组处理获得第三数据表,并根据数值为分组标记的节点对第一指令进行处理,获得第二指令。
本申请另一实施例提供一种电子设备,包括:处理器,以及与所述处理器通信连接的存储器;
所述存储器存储计算机执行指令;
所述处理器执行所述存储器存储的计算机执行指令,以实现上述任意实施例所涉及的数据处理方法。
本申请另一实施例提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机执行指令,所述计算机执行指令被处理器执行时用于实现上述任意实施例所涉及的数据处理方法。
本申请另一实施例提供一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现上述任意实施例所涉及的数据处理方法。
本申请实施例提供一种数据处理方法及设备,将第一数据表以明文存储在第一节点中,将第二数据表以明文存储在第二节点,第一节点获取用于对第一数据表和第二数据表进行处理的第一指令,使用抽象语法树对第一指令进行分析,以基于指令结构对第一指令和第一数据表在明文下进行处理,相较于对第一数据表在密文下进行处理,在第一节点中对处于明文状态下的第一数据表进行处理,处理效率更高,在将通过简化第一数据表得到的第三数据表以密文状态传输到第三节点进行处理,第三节点所处理的数据量显著降低,提高第三节点的数据处理效率。此外,在对第一数据表进行处理时,先进行安全处理检验,避免数据泄露,增加数据处理的安全性。并根据第一指令中所操作的数据列选择单列操作指令对第一数据表进行处理,可以降低第一节点的数据处理复杂度。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本申请的实施例,并与说明书一起用于解释本申请的原理。
图1为本申请一实施例提供的数据处理系统的结构图;
图2为本申请另一实施例提供的数据处理方法的流程图;
图3为本申请一实施例提供的指令结构树的示意图;
图4为本申请又一实施例提供的数据处理方法的流程图;
图5为本申请又一实施例提供的数据处理装置的结构图;
图6为本申请再一实施例提供的电子设备的结构图。
通过上述附图,已示出本申请明确的实施例,后文中将有更详细的描述。这些附图和文字描述并不是为了通过任何方式限制本申请构思的范围,而是通过参考特定实施例为本领域技术人员说明本申请的概念。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。
隐私计算是指多方在不暴露各方数据的前提下,完成多方数据的计算和分析,以打破数据孤岛,再进行隐私计算时需要具备加强隐私保护、强化数据安全合规性的能力。常用的技术手段包括可信执行环境(Trusted Execution Environment,简称:TEE)、联邦学习、安全多方计算等。
其中,面向SQL的隐私计算是最常见的应用场景之一,用户端输入标准SQL指令,通过隐私计算平台实现多方数据表的联合安全查询。隐私计算平台包括双方各自持有的私有隐私计算平台和公共隐私计算平台。通常执行流程是各方利用各自客户端将SQL指令和待查询数据表输入各自私有隐私计算平台,然后各自私有的隐私计算平台将SQL指令转换为公共隐私计算平台内的算法并输入到公共隐私计算平台,公共隐私计算平台还接收私有隐私计算平台输入的加密后的数据表,然后公共隐私计算平台基于安全多方计算框架针对加密后的数据表执行算法,实现多方联合隐私计算。
在将SQL转化为公共隐私平台算法之前,可以预先对SQL和输入的数据表化简,尽可能预先执行不依赖其它机构数据的操作,降低SQL的复杂度以及数据表的大小。然而,通常对隐私计算的预处理,主要是对数据表进行数据清洗、格式合法性检测或者数据质量校验等,还是需要对大量在密文状态的数据进行处理,造成数据处理效率低。
基于此,本申请实施例提供一种数据处理方法及设备,旨在对隐私计算过程进行优化。影响公共隐私计算平台进行隐私计算效率的因素主要包括四个方面:数据表的大小,也就是数据表的行数和列数,数据表中存储数据的格式,例如:浮点数开销远远大于整数开销,原子密文计算次数,也就是加法、乘法、比较运算的次数,底层密码协议的类型。本申请在数据表的大小、原子密文计算次数两个方面对数据表在明文状态进行预处理,优化隐私计算过程,提高隐私计算效率。
例如:A方和B方分别有10万条数据,需要计算两方的最大数值,如果不做任何处理,直接进行20万条数据的密文比较,开销是非常巨大的,通常需要花费几百秒。如果两方先各自在明文状态下计算各方数据的最大数值,然后通过公共隐私计算平台在密文下做两个最大数值的对比,得到最终的结果,可将计算时间缩短到毫秒级。
如图1所示,本申请一实施例提供一种数据处理系统,该数据处理系统包括第一节点、第二节点以及第三节点。第一节点和第三节点之间通信连接,第二节点和第三节点之间通信连接。第一节点在对在明文状态下的第一数据表和第一指令进行处理,获得第三数据和第二指令,第三数据的数据大小更小,第二指令中计算过程更少,第一节点还向第三节点发送第一处理请求,第二节点在对在明文状态下的第二数据表和第一指令进行处理,获得第四数据和第三指令,第四数据的数据大小更小,第三指令中计算过程更少,第二节点还向第三节点发送第二处理请求。第三节点在接收到第一处理请求和第二处理请求后,从第一处理请求中解析出加密后的第三数据表和第二指令,从第二处理请求中解析出加密后的第四数据表和第三指令,并第二指令和第三指令进行融合获得第四指令,再基于第四指令对加密后的第三数据表和加密后的第四数据表在密文状态下进行运算获得处理结果。数据处理系统的数据处理的具体过程可以参考如下方法实施例,此处不再赘述。
如图2所示,本申请一实施例提供一种数据处理方法,方法应用于第一节点,方法具体包括如下步骤:
S201、获取第一指令和第一数据表。
在该步骤,第一指令用于对第一数据表和第二数据表进行处理,第一数据表以存储在第一节点,第二数据表以存储在第二节点。也就是第一指令用于对第一节点中存储的第一数据表和第二节点中存储的第二数据表进行联合处理。
S202、使用抽象语法树对第一指令进行分析获得指令结构树。
在该步骤中,对第一指令使用抽象语法树(Abstract Syntax Tree,简称:AST)方法进行词法分析和语法分析得到指令结构树。
AST是以树状的形式表现编程语言的语法结构,一般用于目标代码生成或源代码的解析。在本实施例中使用抽象语法树方法将第一指令转换为指令结构树,以实现对第一指令进行解析。
指令结构树树中的每一个节点表示一个标记(token),每个节点包括类型和数值。类型包括关键字、标识符、操作符等,每个节点的数值可以为select、sum、max、>、<等。通常AST用JSON或多维数组等数据结构保存。
指令结构树可划分为多个节点分支,按照分类可以将节点分支分为结果分支和条件分支。结果分支主要是对数据进行处理,例如:求和、求最大数值、筛选等。条件分支用于限定进行处理的数据。当条件分支有分组指令时,优先进行分组处理,也就是分组指令的优先级最高。
相应地,所获得的指令结构树也包含结果分支和条件分支,当某一节点的数值为from、join、group by或者where,类型为关键字时,则该节点和其下的子节点均为条件分支。其他与条件分支相同层次的节点及其子节点则为结果分支。
例如:以第一指令为SQL指令为例说明指令结构树:
create table powerfl as
select sum(t1.push_count)as sum from t2 join t1 on t2.biz=t1.bizgroup by t2.name.
t0为一个数据表,t1为另一个数据表,上述SQL指令的指令结构树,如图3所示。数值为From的节点以其子节点均属于条件分支,数值为Group的节点以其子节点也属于条件分支,数值为Select的节点及其子节点组成的多个节点分支为结果分支。
S203、判断指令结构树中各个节点分支是否满足数据安全处理条件,若是,则进入S204,否则结束流程。
其中,数据安全处理条件用于判断第一指令是否有泄露第一数据表的危险,全表查询和全列查询均有数据泄露的风险。通过遍历指令结构树中各个节点分支,确定各个节点分支是否满足数据安全处理条件。在对指令结构树中各个节点分支进行遍历时,采用递归的方式进行深度优先或广度优先遍历。
在一实施例中,满足数据安全处理条件是指在指令结构树中不存在表示全表查询的节点分支。不满足数据安全处理条件是指在指令结构树中存在表示全表查询的节点分支。
在一实施例中,满足数据安全处理条件是指在指令结构树中不存在表示全列查询的节点分支。满足数据安全处理条件还可以指在指令结构树中包含表示单列查询的第一节点分支和其他属于结果分支的第二节点分支。其中,第二节点分支不是表示命名的节点分支。不满足数据安全处理条件是指在指令结构树中属于结果分支的节点分支中仅包括表示单列查询的节点分支和表示命名的节点分支。不满足数据安全处理条件还可以是指在指令结构树中属于结果分支的节点分支中仅包括表示单列查询的节点分支。
S204、判断指令结构树中是否存在数值为分组标记的节点,若否,进入S205,若是,进入S208。
在该步骤中,当指令结构树中存在数值为分组标记的节点时,优先进行分组处理,也就是分组指令的优先级最高。
S205、从指令结构树中选择单列操作的节点分支作为备选分支,以获得多个备选分支。
在该步骤中,单列操作的节点处理比较简单,可以预先对第一数据表进行相应的处理。基于此,在确定指令结构树中各个节点分支是否满足数据安全处理条件,且指令结构树中不存在数值为分组标记的节点时,从指令结构树中选择单列操作的节点分支作为备选分支,以获得多个备选分支。
在一实施例中,为从指令结构树中确定备选分支,遍历指令结构树中各个节点分支,当节点分支所对应的表达式为过滤语句、运算语句或者聚合语句,且节点分支中仅包含一个数值为列标记的节点时,将节点分支作为备选分支。
遍历指令结构树中各个父节点的子节点,当父节点包含第一子节点、第二子节点以及第三子节点,且第一子节点的类型为列标记,第二子节点的类型为运算标识,第三子节点的类型为常量标识时,将父节点作为备选分支。或者
在一实施例中,为从指令结构树中确定备选分支,遍历指令结构树中各个父节点的子节点,当父节点的数值为max或min,父节点包含第四子节点,第四子节点的类型为列标记时,将父节点作为备选分支。
在上述技术方案中,通过对父节点下面的子节点进行识别,从而确定该父节点是否是单列操作节点。
S206、从多个备选分支中选择至少一个目标分支,并统计指令结构树中数值为列标记的节点的数值。
在该步骤中,当备选分支所对应的表达式为过滤语句时,则将备选分支作为目标分支。当备选分支所对应的表达式为运算语句或者聚合语句时,且备选分支所包含的数值为列标记的节点与指令结构树中剩余的属于结果分支的节点分支中的数值为列标记的节点均不同时,则将备选分支作为目标分支,也就是目标分支为结果分支时,所操作的列数据仅进行操作一次,并没有在其他属于结果分支的节点分支中再次进行操作,通过如此设置,在第一节点中的数据处理过程不太复杂,可以降低对第一节点的硬件资源要求。
通过统计指令结构树中类型为列标记的节点的数值,可以对第一数据表中没有进行运算的列数据进行删除,以减少数据量。
S207、根据至少一个目标分支和指令结构树数值为列标记的节点的数值对明文状态下的第一数据表和第一指令进行处理,获得第三数据表和第二指令。
在该步骤中,先根据至少一个目标分支对明文状态下的第一数据表和第一指令进行处理,再根据指令结构树数值为列标记的节点的数值对处理后的第一数据表和处理后的第一指令进行处理获得第三数据表和第二指令。
先根据至少一个目标分支对明文状态下的第一数据表和第一指令进行处理具体包括如下子步骤:
S01、根据其中一个目标分支对应的表达式对明文状态下的第一数据表中对应列数据进行处理获得第一中间数据表。
其中,从第一数据表中选择目标分支所操作的列数据,根据目标分支对应的表达式对列数据进行处理获得第一中间数据表。
S02、根据目标分支对中间指令更新。
其中,将目标分支在中间指令中对应的指令替换为目标分支所操作的列数据的列标识,以实现对中间指令的更新。
S03、将第一中间数据表作为第一数据表。
其中,通过将第一中间数据表作为第一数据表,以使后续的目标节点继续在第一中间数据表上进行处理。
S04、判断是否遍历所有目标分支,若是,则进入S05,否则进入S01。
其中,若已经遍历所有目标分支,则直接输出最后一次循环结果,若没有遍历所有目标分支,则继续进入下一次循环。
目标分支的遍历顺序为表达式为过滤语句的目标分支、表达式为运算语句的目标分支以及表达式为聚合语句的目标分支。由于表达式为过滤语句的目标分支可以减少数据处理量,优先根据表达式为过滤语句的目标分支进行数据处理,可以减少后续数据处理的数据量,提高数据处理效率。表达式为运算语句的目标分支以及表达式为聚合语句的目标分支可以减少第三节点在原子计算次数。
S05、将最后一次循环获得的第一中间数据表作为第二中间数据表,并将最后一次循环获得的更新后的中间指令作为中间指令。
在通过多次循环获得中间指令和第二中间数据表后,根据指令结构树中数值为列标记的节点的数值从第二中间数据表中选择中间指令所操作的列数据,获得第三数据表。并更新中间指令中的列标识获得第二指令。也就是从第二中间数据表中删除不需要处理的列数据,获得第三数据表。由于列数据的删除,保留的列数据的列标识更新,则需要更新中间指令中的列标识获得第二指令。通过删除列数据,在第一节点生成第一处理请求时,可以减少数据处理量,提高数据处理效率。
S208、对明文状态下的第一数据表进行分组处理获得第三数据表,并去除第一指令中分组指令获得第二指令。
在该步骤中,当第一指令中包含分组指令时,则根据第一指令中的分组指令对第一数据表进行分组处理获得第三数据表,并去除第一指令中的分组指令获得第二指令。
在上述技术方案中,将第一数据表以明文存储在第一节点中,将第二数据表以明文存储在第二节点,第一节点获取用于对第一数据表和第二数据表进行处理的第一指令,使用抽象语法树对第一指令进行分析,以基于指令结构对第一指令和第一数据表在明文下进行处理,相较于对第一数据表在密文下进行处理,数据处理过程处理,提高数据处理效率。此外,在进行处理时,先进行安全处理检验,避免数据泄露,增加数据处理的安全性。并根据指令中所操作的数据列和选择单列操作指令对第一数据表进行处理,可以降低第一节点的数据处理复杂度。
如图4所示,本申请另一实施例提供一种数据处理方法,该方法应用于数据处理系统,该数据处理方法具体包括如下步骤:
S301、第一节点根据第二指令和加密后的第三数据表生成第一处理请求。
其中,第一节点根据图2所示的实施例对第一指令和第一数据表进行处理后获得第二指令和第三数据表。并对第三数据表进行加密处理后,再基于第二指令和加密后的第三数据表生成第一处理请求。
S302、第一节点向第三节点发送第一处理请求。
S303、第二节点根据第三指令和加密后的第四数据表生成第二处理请求。
其中,第二节点对第一指令和第二数据表进行处理后获得第三指令和第四数据表,对第一指令和第二数据表的处理过程同图2所示的实施例相同,此处不再赘述。
并对第四数据表进行加密处理后,再基于第三指令和加密后的第四数据表生成第二处理请求。
S304、第二节点向第三节点发送第二处理请求。
S305、第三节点根据第一处理请求和第二处理请求进行数据处理获得处理结果。
在该步骤中,从第一处理请求中解析出加密后的第三数据表和第二指令,从第二处理请求中解析出加密后的第四数据表和第三指令,并第二指令和第三指令进行融合获得第四指令,再基于第四指令对加密后的第三数据表和加密后的第四数据表在密文状态下进行运算获得处理结果。
S305a、第三节点向第一节点发送处理结果。
S305b、第三节点向第二节点发送处理结果。
在上述技术方案中,第一节点已经在明文的状态下对第一数据表进行处理,获得数据量更少的第三数据,第二节点已经在明文的状态下对第二数据表进行处理,获得数据量更少的第四数据,第三节点在密文状态下处理的第三数据表和第四数据表的数据量更少,可以减少第三节点的数据处理量,降低对第三节点的资源损耗。
本申请另一实施例提供一种数据处理方法,方法应用于第一节点,方法具体包括如下步骤:
S401、获取第一指令和第一数据表。
在该步骤,第一指令用于对第一数据表和第二数据表进行联合处理。
S402、使用抽象语法树对第一指令进行分析获得指令结构树。
该步骤已经在上述实施例中详细说明,此处不再赘述。
S403、判断指令结构树中各个节点分支是否满足数据安全处理条件,若是,则进入S404,否则结束流程。
在该步骤中,遍历指令结构树,找到数值为select,类型为关键字的节点,然后以该节点为父节点遍历其下所有分支,并忽略以数值为from、join、group by或者where,类型为关键字的父节点及其子节点,则剩下的节点都是结果分支。然后遍历结果分支中的每个节点,如果出现数值为*,类型为标识符的节点,则确定第一指令中出现全表查询,则判定指令结构树中各个节点表示的指令不满足数据安全处理条件。
若在结果分支中除了数值为as,类型为关键字的节点,及其子节点外,只有一个数值为Xn.Ym,类型为标识符的节点,则确定第一指令中出现单列查询,这些查询操作会直接暴露数据原文,则判定指令结构树中各个节点表示的指令不满足数据安全处理条件。
实例1:第一指令为SQL指令,第一指令具体为select t0.column1,t0.column1>t1.column1 from t0,t1 where t0.id=t1.id。
其中,属于结果分支的节点分支包括节点分支select t0.column1和节点分支t0.column1>t1.column1。节点分支t0.column1>t1.column1为节点分支selectt0.column1的子分支,节点分支select t0.column1表示全列查询,节点分支t0.column1>t1.column1表示对两列数据进行比较运算,也就是中属于结果分支的节点分支包括全列查询的节点分支和比较运算的节点分支,因此,故该条指令的指令结构树满足数据安全处理条件。
实例2:第一指令为SQL指令,第一指令具体为select t0.column1 from t0,t1where t0.id=t1.id。属于结果分支的节点分支包括节点分支select t0.column1,也就是属于结果分支的节点分支仅仅包括全列查询的节点分支,因此,故该条指令的指令结构树不满足数据安全处理条件。
S404、判断指令结构树中是否存在数值为分组标记的节点,若否,进入S405,若是,进入S408。
在该步骤中,判断指令结构树中是否有数值为group by,类型为关键字的节点,若是,则确定第一指令中包含分组指令。
S405、从指令结构树中选择单列操作的节点分支作为备选分支,以获得多个备选分支。
在该步骤中,遍历指令结构树,去掉数值为as、类型为关键字的节点及其子节点,将剩余节点的数值拼成一个表达式,然后将该表达式分隔成多个可并发执行的子表达式。更具体地,获取所有节点类型为关键字的节点,使用类型为关键字的节点对表达式进行拆分,获得多个可并发执行的子表达式。每个子表达式中仅包含一个关键字类型的节点。子表达式中如果只涉及一个列标记,则将该子表达式对应的各个节点的共同父节点作为备选分支。
在一实施例中,遍历指令结构树,找到数值为where、类型为关键字的节点,然后遍历该分支下的所有子节点,解析每个子节点的所有节点,获得类型为操作符的节点的数值,类型为标识符且数值为列标记的节点,以及类型为常量的节点的数值,这三个节点组成一条对列数据进行过滤的指令,则可以将三个节点作为备选分支。
S406、从多个备选分支中选择至少一个目标分支,并统计指令结构树中数值为列标记的节点的数值。
在该步骤中,当备选分支所对应的表达式为过滤语句时,则将备选分支作为目标分支。当备选分支所对应的表达式为运算语句或者聚合语句时,且备选分支所包含的数值为列标记的节点与指令结构树中剩余的属于结果分支的节点分支中的数值为列标记的节点均不同时,则将备选分支作为目标分支。
S407、根据至少一个目标分支和指令结构树中各个节点所操作数据的列标记对第一数据表和第一指令进行处理,获得第三数据表和第二指令。
在该步骤中,先根据至少一个目标分支对明文状态下的第一数据表和第一指令进行处理,再根据指令结构树数值为列标记的节点的数值对处理后的第一数据表和处理后的第一指令进行处理获得第三数据表和第二指令。
更具体地,重复执行根据其中一个目标分支对应的表达式对第一中间数据表中对应列数据进行处理获得第二中间数据表,并根据目标分支对中间指令更新,并将第二中间数据表作为第一中间数据表,直到遍历所有目标分支为止,并将最后一次循环获得的第二中间数据表作为第三数据表,并将最后一次循环获得的中间指令作为第二指令。
当子表达式表示过滤语句时,优先执行该节点和子节点所对应的指令则可以对第一数据表进行过滤,可以大幅减少第一数据表的行数,在编译隐私计算算法时,数据表的大小会作为参数,数据表的数据量大幅变小,编译过程变快,隐私计算过程耗时更短。并且,如果原始表数据条数非常多,而实际过滤后的数据条数很少,不仅能提供算法编译速度,更能够大大减少ID对齐(也就是隐私求交)的计算开销。
当子表达式为运算语句时,根据该子表达式对所涉及的列数据进行计算,用计算的结果替换原来的列数据。第一指令中关于第一数据表中列数据都可视为是常量,如果子表达式中仅涉及于第一数据表中单列数据计算,且该单列数据仅进行一次运算,则可以根据运算符优先级完成计算。
如果存在类型为关键字数值为一个聚合函数的节点,获取该节点的子节点的数值,即参与聚合的列名。然后遍历指令结构树中所有节点,如果该列只出现在了该聚合函数的结果分支中。那么对该列的数据提前完成聚合运算,并将结果写回该列。
在完成上述循环操作后获得第二中间数据表和中间指令后,根据指令结构树中数值为列标记的节点的数值从第二中间数据表中选择中间指令所操作的列数据,获得第三数据表。并更新中间指令中的列标识获得第二指令。
为获得第三数据表和第二指令,遍历指令结构树,将指令结构树中所有数值为列标记、类型为标识符的节点记录下来,也就是数据形如Xm.Yn、类型为标识符的节点记录下来,这些节点则代表第一数据表和第二数据表所涉及的列数据。
通过统计属于第一数据表中的数值为列标记、类型为标识符的节点,并将节点放到集合中,然后遍历第一数据表所有列,如果该列数据的列标记不在集合中,则在第二中间数据表中删除该列。然后将第二中间数据表剩余的列标记和中间指令中的列标记按照原始顺序改为从0开始依次递增,得到第三数据表和第二指令。如果原始表数据量非常大,而第一指令中计算需要的列数据很少,通过删除多余列可以大幅减少数据表的列数,数据处理的效率提升是很明显的。
在上述技术方案中,删除多余的列数据和在目标分支所对应的子表达式为过滤语句时进行数据过滤都可以明显减少第一数据表的数据量,在目标分支所对应的子表达式为运算语句或者聚合语句时进行数据运算或者聚合运算可以减少原子密文计算次数。
S408、对第一数据表进行分组处理获得第三数据表,并去除第一指令中分组指令获得第二指令。
在该步骤中,遍历指令结构树,找到数值为分组标记group by、类型为关键字的节点,并获得该节点的子节点的数值,即用于分组的列名。如果该列数据在第一数据表中,则进行分组。然后将分组的元素和每个元素的个数作为两列新元素添加到数据表中。这样就避免了在密文形态下通过两次遍历求分组,而引入大量计算开销。
完成上述数据处理步骤后,第三节点就可以基于最终的指令和数据表开始隐私计算。
下面举例说明对第一指令和第一数据表的处理过程:
实例3:第一指令为:select sum(t0.column2)+sum(t1.column1)+3,min(selectt0.column1)-min(t1.column3)from t0,t1 where t0.id=t1.id and t0.Column3>2。第一数据表t0如表1所示,第二数据表t1如表2所示。
表1 第一数据表t0
ID column0 column1 column2 column3
0 0 1 2 1
1 0 1 2 1
2 0 1 2 3
3 0 1 2 3
表2 第二数据表t1
ID column0 column1 column2 column3
0 0.1 1.1 2.1 3.1
1 0.1 1.1 2.1 3.1
2 0.1 1.1 2.1 3.1
3 0.1 1.1 2.1 3.1
通过遍历指令结构树,确定节点分支t0.Column3>2中第三子节点的数值为2,表示常量标记,第一子节点的数值为t0.Column3,表示第一数据表中列标识,第二子节点的数值为>,表示运算符号,则可以将该节点分支作为备选分支,又节点分支t0.Column3>2的表达式为过滤语句,则可以将节点分支t0.Column3>2作为目标分支,根据目标分支所对应的表达式对第一数据表进行处理,获得第一中间数据表,如表3所示。
表3 第一中间数据表
ID column0 column1 column2 column3
2 0 1 2 3
3 0 1 2 3
相应地,第一指令更新为:select sum(t0.column2)+sum(t1.column1)+3,min(select t0.column1)-min(t1.column3)from t0,t1 where t0.id=t1.id
统计更新后的第一指令中所涉及的列数据为t0.column1、t0.column0,则删除第一数据表中的t0.column0和t0.column3两列数据,并重命名剩下的列数据,获得第三数据表,如表4所示。
表4 第三数据表
ID column1 column2
2 1 2
3 1 2
所获得的第二指令为:select sum(t0.column1)+sum(t1.column1)+3,min(select t0.column0)-min(t1.Column3)from t0,t1 where t0.id=t1.id。
实例4:第一指令为select(t0.column0+5)*(t1.column0-6)*2+20 from t0,t1where t0.id=t1.id。第一数据表t0如表5所示,第二数据表t1如表6所示。
表5 第一数据表t0
ID column0
0 5
1 5
2 5
3 5
表6 第二数据表t1
ID column0
0 11
1 11
2 11
3 11
在第一节点中,第一节点通过遍历指令结构树,确定分支节点t0.column0+5的第三子节点的数值为5,是常量标记,第一子节点的数值为t0.Column0,表示第一数据表中列标识,可以将该分支节点作为备选分支,分支节点t0.column0+5的表达示是运算语句,指令结构树中还包括分支节点t1.column0-6,所操作的列数据不同,则可以将分支节点t0.column0+5作为目标节点,并根据分支节点t0.column0+5所对应的表达式进行运算,又第一数据表仅包含一列数据,则可以将通过运算后获得的第二中间数据表作为第三数据表,如表7所示。所获得的第二指令为select t0.column0*(t1.column0-6)*2+20 from t0,t1 where t0.id=t1.id。
表7 第三数据表
ID column0
0 10
1 10
2 10
3 10
在第二节点中,第二节点通过遍历指令结构树,确定分支节点t1.column0-6的第三子节点的数值为6,是常量标记,第二子节点的数值为-,是运算符号,第一子节点的数值为t1.column0,表示第一数据表中列标识,可以将该分支节点作为备选分支,分支节点t1.column0-6的表达示是运算语句,指令结构树中还包括分支节点t0.column0+5,所操作的列数据不同,则可以将分支节点t1.column0-6作为目标节点,并根据分支节点t1.column0-6所对应的表达式进行运算,又第二数据表仅包含一列数据,则可以将通过运算后获得的中间数据表作为第四数据表,如表8所示。所获得第三指令为select(t0.column0+5)*t1.column0+20 from t0,t1 where t0.id=t1.id。
表8 第四数据表
ID column0
0 10
1 10
2 10
3 10
在第三节点中,第三节点在接收到第一节点发送的第一处理请求,以及第二节点发送的第二处理请求后,解析获得第二指令和第三指令,并将第二指令和第三指令进行融合获得第四指令,并根据第四指令在密文形式下对第三数据表和第四数据表进行处理。其中,第四指令为:select t0.column0*t1.column0+20 from t0,t1 where t0.id=t1.id。
实例5:第一指令为select max(t0.column0)-min(t1.column0)from t0,t1,第一数据表t0如表9所示,第二数据表t1如表10所示。
表9 第一数据表
ID column0
0 5
1 6
2 7
3 8
表10 第二数据表
ID column0
0 1
1 1
2 2
3 3
在第一节点中,通过遍历指令结构树,确定节点分支max(t0.column0)中子节点的数值为t0.Column0,表示第一数据表中列标识,则可以将该节点分支作为备选分支,又节点分支max(t0.column0)的表达式为聚合语句,指令结构树中还包括分支节点min(t1.column0),所操作的列数据不同,则可以将节点分支max(t0.column0)作为目标分支,根据目标分支所对应的表达式对第一数据表进行处理,获得第二中间数据表,又第一数据表仅包含一列数据,则可以将通过运算后获得的第二中间数据表作为第三数据表,如表11所示。
表11 第三数据表
ID column0
0 8
在第二节点中,通过遍历指令结构树,确定节点分支min(t1.column0)中子节点的数值为t1.column0,表示第二数据表中列标识,则可以将该节点分支作为备选分支,又节点分支的表达式为聚合语句min(t1.column0),指令结构树中还包括分支节点max(t0.column0),所操作的列数据不同,则可以将节点分支min(t1.column0)作为目标分支,根据目标分支所对应的表达式对第二数据表进行处理,获得中间数据表,又第二数据表仅包含一列数据,则可以将通过运算后获得中间数据表作为第四数据表,如表12所示。
表12 第四数据表
ID column0
0 1
第三节点通过融合处理后获得的第四指令为:select t0.column0-t1.column0from t0,t1。
实例6:第一指令为:select max(t0.column0)from t0 join t1 on t0.id=t1.id group by t1.column0。
在完成ID对齐后,第一节点基于t1.column0计算分组情况,得到后续隐私计算的辅助信息,并添加到第一数据表中,如表13所示。
表13 第一数据表
Figure BDA0003437441550000191
Figure BDA0003437441550000201
如图5所示,本申请一实施例提供一种数据处理装置,该装置包括:
获取模块501,用于获取第一指令和第一数据表;其中,第一指令用于对第一数据表和第二数据表进行处理,第一数据表存储在第一节点,第二数据表存储在第二节点;
处理模块502,用于使用抽象语法树对第一指令进行分析获得指令结构树;在确定指令结构树中各个节点分支满足数据安全处理条件,且指令结构树中不存在数值为分组标记的节点时,从指令结构树中选择单列操作的节点分支作为备选分支,以获得多个备选分支;
处理模块502用于从多个备选分支中选择至少一个目标分支,并统计指令结构树中数值为列标记的节点的数值,根据至少一个目标分支和指令结构树数值为列标记的节点的数值对明文状态下的第一数据表和第一指令进行处理,获得第三数据表和第二指令。
在一实施例中,处理模块502还用于:
根据第二指令和加密后的第三数据表生成第一处理请求,并向第三节点发送第一处理请求;
其中,第三节点还用于接收第二节点发送的第二处理请求,以及根据第一处理请求和第二处理请求进行数据处理,并将处理结果发送至第一节点和第二节点;第二处理请求是第二节点根据第三指令和加密后的第四数据表生成的,第三指令和第四数据表是对第二数据表和第一指令进行处理获得的。
在一实施例中,确定指令结构树中各个节点分支是否满足数据安全处理条件,具体包括以下任意一项:
指令结构树中不存在表示全表查询的节点分支;
指令结构树中不存在表示全列查询的节点分支;
指令结构树中包含表示单列查询的第一节点分支和其他属于结果分支的第二节点分支;其中,第二节点分支不是表示命名的节点分支。
在一实施例中,处理模块502具体用于:
遍历指令结构树中各个节点分支,当节点分支所对应的表达式为过滤语句、运算语句或者聚合语句,且节点分支中仅包含一个数值为列标记的节点时,将节点分支作为备选分支。
在一实施例中,处理模块502具体用于:
当备选分支所对应的表达式为过滤语句时,则将备选分支作为目标分支;
当备选分支所对应的表达式为运算语句或者聚合语句时,且备选分支所包含的数值为列标记的节点与指令结构树中剩余的属于结果分支的节点分支中的数值为列标记的节点均不同时,则将备选分支作为目标分支。
在一实施例中,处理模块502具体用于:
重复执行根据其中一个目标分支对应的表达式对明文状态下的第一数据表中对应列数据进行处理获得第一中间数据表,并根据目标分支对第一指令更新,并将第一中间数据表作为第一数据表,直到遍历所有目标分支为止,并将最后一次循环获得的第一中间数据表作为第二中间数据表,并将最后一次循环获得的更新后的第一指令作为中间指令;
根据指令结构树中数值为列标记的节点的数值从第二中间数据表中选择中间指令所操作的列数据,获得第三数据表;并更新中间指令中的列标识获得第二指令。
在一实施例中,目标分支的遍历顺序为表达式为过滤语句的目标分支、表达式为运算语句的目标分支以及表达式为聚合语句的目标分支。
在一实施例中,处理模块502还用于:
在确定指令结构树中各个节点无法满足数据安全处理条件,且指令结构树中存在数值为分组标记的节点时,对明文状态下的第一数据表进行分组处理获得第三数据表,并根据数值为分组标记的节点对第一指令进行处理,获得第二指令。
如图6所示,本申请一实施例提供一种电子设备600,电子设备600包括存储器601和处理器602。
其中,存储器601用于存储处理器可执行的计算机指令;
处理器602在执行计算机指令时实现上述实施例中方法中的各个步骤。具体可以参见前述方法实施例中的相关描述。
可选地,上述存储器601既可以是独立的,也可以跟处理器602集成在一起。当存储器601独立设置时,该电子设备还包括总线,用于连接存储器601和处理器602。
本申请实施例还提供一种计算机可读存储介质,计算机可读存储介质中存储有计算机指令,当处理器执行计算机指令时,实现上述实施例中方法中的各个步骤。
本申请实施例还提供一种计算机程序产品,包括计算机指令,该计算机指令被处理器执行时实现上述实施例中方法中的各个步骤。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本申请的其它实施方案。本申请旨在涵盖本申请的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本申请的一般性原理并包括本申请未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本申请的真正范围和精神由下面的权利要求书指出。
应当理解的是,本申请并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本申请的范围仅由所附的权利要求书来限制。

Claims (10)

1.一种数据处理方法,其特征在于,所述方法应用于第一节点,所述方法包括:
获取第一指令和第一数据表;其中,所述第一指令用于对所述第一数据表和第二数据表进行处理,所述第一数据表存储在所述第一节点,所述第二数据表存储在第二节点;
使用抽象语法树对第一指令进行分析获得指令结构树;在确定所述指令结构树中各个节点分支满足数据安全处理条件,且所述指令结构树中不存在数值为分组标记的节点时,从所述指令结构树中选择单列操作的节点分支作为备选分支,以获得多个备选分支;
从所述多个备选分支中选择至少一个目标分支,并统计所述指令结构树中数值为列标记的节点的数值,根据所述至少一个目标分支和所述指令结构树数值为列标记的节点的数值对明文状态下的所述第一数据表和所述第一指令进行处理,获得第三数据表和第二指令。
2.根据权利要求1所述的数据处理方法,其特征在于,在根据所述至少一个目标分支对明文状态下的所述第一数据表和所述第一指令进行处理获得第三数据表和所述第二指令之后,所述方法还包括:
根据所述第二指令和加密后的所述第三数据表生成第一处理请求,并向第三节点发送所述第一处理请求;
其中,所述第三节点还用于接收第二节点发送的第二处理请求,以及根据所述第一处理请求和第二处理请求进行数据处理,并将处理结果发送至所述第一节点和所述第二节点;所述第二处理请求是所述第二节点根据第三指令和加密后的第四数据表生成的,所述第三指令和所述第四数据表是对所述第二数据表和所述第一指令进行处理获得的。
3.根据权利要求1或2所述的数据处理方法,其特征在于,确定所述指令结构树中各个节点分支是否满足数据安全处理条件,具体包括以下任意一项:
所述指令结构树中不存在表示全表查询的节点分支;
所述指令结构树中不存在表示全列查询的节点分支;
所述指令结构树中包含表示单列查询的第一节点分支和其他属于结果分支的第二节点分支;其中,所述第二节点分支不是表示命名的节点分支。
4.根据权利要求3所述的数据处理方法,其特征在于,从所述指令结构树中选择单列操作的节点分支作为备选分支,以获得多个备选分支,具体包括:
遍历所述指令结构树中各个节点分支,当所述节点分支所对应的表达式为过滤语句、运算语句或者聚合语句,且所述节点分支中仅包含一个数值为列标记的节点时,将所述节点分支作为所述备选分支。
5.根据权利要求4所述的数据处理方法,其特征在于,从所述多个备选分支中选择至少一个目标分支;具体包括:
当所述备选分支所对应的表达式为过滤语句时,则将所述备选分支作为所述目标分支;
当所述备选分支所对应的表达式为运算语句或者聚合语句时,且所述备选分支所包含的数值为列标记的节点与所述指令结构树中剩余的属于结果分支的节点分支中的数值为列标记的节点均不同时,则将所述备选分支作为所述目标分支。
6.根据权利要求5所述的数据处理方法,其特征在于,根据所述至少一个目标分支和所述指令结构树数值为列标记的节点的数值对明文状态下的所述第一数据表和所述第一指令进行处理,获得第三数据表和所述第二指令,具体包括:
重复执行根据其中一个目标分支对应的表达式对明文状态下的所述第一数据表中对应列数据进行处理获得第一中间数据表,并根据所述目标分支对所述第一指令更新,并将第一中间数据表作为第一数据表,直到遍历所有目标分支为止,并将最后一次循环获得的第一中间数据表作为第二中间数据表,并将最后一次循环获得的更新后的第一指令作为中间指令;
根据所述指令结构树中数值为列标记的节点的数值从所述第二中间数据表中选择所述中间指令所操作的列数据,获得第三数据表;并更新所述中间指令中的列标识获得第二指令。
7.根据权利要求6所述的数据处理方法,其特征在于,所述目标分支的遍历顺序为表达式为过滤语句的目标分支、表达式为运算语句的目标分支以及表达式为聚合语句的目标分支。
8.根据权利要求1所述的数据处理方法,其特征在于,所述方法还包括:
在确定所述指令结构树中各个节点无法满足数据安全处理条件,且所述指令结构树中存在数值为分组标记的节点时,对明文状态下的所述第一数据表进行分组处理获得第三数据表,并根据数值为分组标记的节点对第一指令进行处理,获得所述第二指令。
9.一种电子设备,包括:处理器,以及与所述处理器通信连接的存储器;
所述存储器存储计算机执行指令;
所述处理器执行所述存储器存储的计算机执行指令,以实现如权利要求1至8中任一项所述的数据处理方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机执行指令,所述计算机执行指令被处理器执行时用于实现如权利要求1至8任一项所述的数据处理方法。
CN202111620847.6A 2021-12-27 2021-12-27 数据处理方法及设备 Pending CN114328525A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202111620847.6A CN114328525A (zh) 2021-12-27 2021-12-27 数据处理方法及设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202111620847.6A CN114328525A (zh) 2021-12-27 2021-12-27 数据处理方法及设备

Publications (1)

Publication Number Publication Date
CN114328525A true CN114328525A (zh) 2022-04-12

Family

ID=81015418

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111620847.6A Pending CN114328525A (zh) 2021-12-27 2021-12-27 数据处理方法及设备

Country Status (1)

Country Link
CN (1) CN114328525A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116975032A (zh) * 2023-07-14 2023-10-31 南京领行科技股份有限公司 数据对齐方法、系统和电子设备及存储介质

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116975032A (zh) * 2023-07-14 2023-10-31 南京领行科技股份有限公司 数据对齐方法、系统和电子设备及存储介质
CN116975032B (zh) * 2023-07-14 2024-04-12 南京领行科技股份有限公司 数据对齐方法、系统和电子设备及存储介质

Similar Documents

Publication Publication Date Title
CN110908997B (zh) 数据血缘构建方法、装置、服务器及可读存储介质
US10769147B2 (en) Batch data query method and apparatus
US11487772B2 (en) Multi-party data joint query method, device, server and storage medium
CN104123288B (zh) 一种数据查询方法及装置
US7676453B2 (en) Partial query caching
CN106062751B (zh) 对与数据类型有关的数据剖析操作的管理
KR101617696B1 (ko) 데이터 정규표현식의 마이닝 방법 및 장치
CN110866029B (zh) sql语句构建方法、装置、服务器及可读存储介质
CN110059006B (zh) 代码审计方法及装置
CN109145003B (zh) 一种构建知识图谱的方法及装置
CN110597844A (zh) 异构数据库数据统一访问方法及相关设备
CN115240048A (zh) 面向图像分类的深度学习的算子定位融合方法及装置
CN111309753B (zh) 结构化查询语句的优化方法、装置、设备及存储介质
US9600644B2 (en) Method, a computer program and apparatus for analyzing symbols in a computer
CN114328525A (zh) 数据处理方法及设备
CN108629124B (zh) 一种基于活动图路径的仿真参数数据自动生成方法
CN115130043B (zh) 基于数据库的数据处理方法、装置、设备及存储介质
CN113157904A (zh) 基于dfa算法的敏感词过滤方法及系统
CN106547877B (zh) 基于6w业务逻辑模型的数据元智能标识解析方法
KR101783791B1 (ko) 프로버넌스 관리를 위한 압축 장치 및 방법
CN109857735B (zh) 一种通过excel进行规则描述的数据构造方法及系统
EP4242832A1 (en) Method and apparatus for parsing programming language, and non-volatile storage medium
EP4191438A1 (en) Software information organization method and device, and computer-readable medium
CN115292347A (zh) 一种基于规则的主动式sql算法性能检查装置及方法
CN112287005A (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