CN111190896A - 数据处理方法、装置、存储介质和计算机设备 - Google Patents
数据处理方法、装置、存储介质和计算机设备 Download PDFInfo
- Publication number
- CN111190896A CN111190896A CN201910759842.8A CN201910759842A CN111190896A CN 111190896 A CN111190896 A CN 111190896A CN 201910759842 A CN201910759842 A CN 201910759842A CN 111190896 A CN111190896 A CN 111190896A
- Authority
- CN
- China
- Prior art keywords
- node
- value
- information
- mark
- set corresponding
- 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.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/221—Column-oriented storage; Management thereof
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/21—Design, administration or maintenance of databases
- G06F16/215—Improving data quality; Data cleansing, e.g. de-duplication, removing invalid entries or correcting typographical errors
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Quality & Reliability (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
本申请涉及一种数据处理方法、装置、存储介质和计算机设备,所述方法包括:获取待处理数据中各个节点及所述各个节点对应的节点数据,其中,所述节点数据包括位置信息和节点值;对所述各个节点和所述各个节点对应的节点数据进行编码,得到编码结果;若所述编码结果中存在节点的节点值为空,从所述编码结果中丢弃所述节点的位置信息,并标记所述节点为空列。本申请提高了嵌套数据的列式存储的编解码效率,降低了编码过程占用的内存资源。
Description
技术领域
本申请涉及计算机技术领域,特别是涉及一种数据处理方法、装置、存储介质和计算机设备。
背景技术
随着大数据的不断发展,以及云计算等新兴技术的不断融合,越来越多的数据流向Hadoop生态圈,同时对于能够快速的从TB级别甚至PB级别的数据中获取有价值的数据对于一个产品来说愈加重要。在Hadoop生态圈的快速发展过程中,涌现了一批开源的数据分析引擎,例如Hive、Spark SQL、Impala、Presto等,同时也产生了多个高性能的列式存储格式,例如RCFile、ORC、Parquet等。
Parquet是一种支持嵌套结构的列式存储格式,采用Dremel编码方式。然而,这种编码方式带有较多的冗余信息,造成编解码效率低等问题。
发明内容
基于此,有必要针对传统的数据处理方式编解码效率低的问题,提供一种数据处理方法、装置、计算机可读存储介质和计算机设备。
一种数据处理方法,所述方法包括:
获取待处理数据中各个节点及所述各个节点对应的节点数据,其中,所述节点数据包括位置信息和节点值;
对所述各个节点和所述各个节点对应的节点数据进行编码,得到编码结果;
若所述编码结果中存在节点的节点值为空,从所述编码结果中丢弃所述节点的位置信息,并标记所述节点为空列。
一种数据处理装置,所述装置包括:
获取模块,用于获取待处理数据中各个节点及所述各个节点对应的节点数据,其中,所述节点数据包括位置信息和节点值;
编码模块,用于对所述各个节点和所述各个节点对应的节点数据进行编码,得到编码结果;
标记模块,用于若所述编码结果中存在节点的节点值为空,从所述编码结果中丢弃所述节点的位置信息,并标记所述节点为空列。
一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机可执行指令,所述计算机可执行指令被处理器执行时,使得所述处理器执行数据处理方法的步骤。
一种计算机设备,包括存储器和处理器,所述存储器中存储有计算机可读指令,所述计算机可读指令被所述处理器执行时,使得所述处理器执行数据处理方法的步骤。
上述数据处理方法、装置、计算机可读存储介质和计算机设备,获取待处理数据中各个节点及各个节点对应的节点数据,对各个节点和各个节点对应的节点数据进行编码得到编码结果,若编码结果中存在节点的节点值为空,从编码结果中丢弃节点的位置信息,并标记节点为空列。这种数据处理方法,在编码的过程中标记空节点,在解码的过程中检测到节点被标记,则跳过该节点,减少了需要进行编解码的数据,从而提高了嵌套数据的列式存储的编解码效率,降低了编码过程占用的内存资源。
附图说明
图1为一个实施例中用于实现数据处理方法的终端的内部结构图;
图2为一个实施例中数据处理方法的流程示意图;
图3为一个实施例中行式存储和列式存储的示意图;
图4为一个实施例中嵌套数据的树状结构的示意图;
图5为一个实施例中嵌套数据的列式存储的示意图;
图6为一个实施例中编码结果的示意图;
图7为另一个实施例中编码结果的示意图;
图8为又一个实施例中编码结果的示意图;
图9为另一个实施例中数据处理方法的流程示意图;
图10为又一个实施例中数据处理方法的流程示意图;
图11为一个实施例中数据处理装置的结构框图;
图12为另一个实施例中数据处理装置的结构框图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
图1为一个实施例中终端的内部结构示意图。如图1所示,该终端包括通过系统总线连接的处理器、非易失性存储介质、内存储器和网络接口、声音采集装置、扬声器、显示屏、摄像头和输入装置。其中,终端的非易失性存储介质存储有操作系统,还可存储有计算机可读指令,该计算机可读指令被处理器执行时,可使得处理器实现一种数据处理方法。该处理器用于提供计算和控制能力,支撑整个终端的运行。该内存储器中也可储存有计算机可读指令,该计算机可读指令被所述处理器执行时,可使得所述处理器执行一种数据处理方法。网络接口用于与服务器或其他终端进行网络通信。终端的显示屏可以是液晶显示屏或者电子墨水显示屏等。输入装置可以是显示屏上覆盖的触摸层,也可以是终端外壳上设置的按键、轨迹球或触控板,也可以是外接的键盘、触控板或鼠标等。
本领域技术人员可以理解,图1中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的终端的限定,具体的终端可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
如图2所示,在一个实施例中,提供了一种数据处理方法。参照图2,该数据处理方法具体包括如下步骤:
S202,获取待处理数据中各个节点及所述各个节点对应的节点数据,其中,所述节点数据包括位置信息和节点值。
其中,待处理数据是指编码过程中待进行编码的嵌套类型的数据。节点是指嵌套类型的数据中各个层级的数据,根据层级,节点分为根节点、叶子节点和中间节点,根节点代表出现一条新的消息,叶子节点用于存储具体的数据,中间节点本身不存储数据,其通过所包含的叶子节点来存储数据。节点数据用于表征节点的属性,节点数据包括节点值和位置信息。节点值是指节点存储的具体的数据;位置信息用于表征节点之间的层级关系和存储状况,在解码过程中还原节点所在的位置。
本实施例提供的数据处理方法可适用于嵌套类型的数据的列式存储,比如Parquet、Dremel等。其中,Parquet是一种支持嵌套结构的列式存储格式;Dremel是一套用于分析只读嵌套数据的可扩展交互式即时查询系统,通过结合多层执行树和数据的列组织,在秒级完成上万亿行表的聚合查询。
其中,列式存储是指以列相关的存储架构进行数据存储,即一列中的数据在存储介质中以连续存储的形式存在。如图3所示,图3为行式存储和列式存储的示意图,相比于传统的行式存储,列式存储中任何列都能作为索引,可高效查找数据,且查询过程中只读取涉及到的列,可减少无关的输入或者输出操作。
其中,嵌套类型是指:当至少两个数据之间具有装配关系时,将一个数据嵌入至另一个数据中的数据类型。
其中,嵌套类型的数据的列式存储是指:在对嵌套类型的数据进行编码的过程中,将嵌套类型的数据映射为数据列,按照映射的数据列存储嵌套类型的数据。
具体地,在嵌套的数据模型中,每个Schema(数据库的基本组织)包含至少两个节点,每个节点具有三种属性:Repetition(重复数)、Type(类型)和Name(字段名)。Repetition包括Required、Optional和Repeated,其中,Required是指该节点出现1次,Optional是指该节点出现0次或1次,Repeated是指该节点出现0次或多次;Type可分为复杂类型(Group)和基本类型(Int、Boolean和String),节点也可分为根节点、叶子节点和中间节点。
以下面的Schema为例进行说明:
如图4所示,图4为该Schema建立的树状结构,通过该树状结构表示节点之间的层级关系。根节点代表出现一条新的消息,其位于嵌套的数据结构的顶点,比如图中的Pageview;叶子节点(叶子节点为基本类型)用于存储具体的数据,比如图中的pageview_id、info_id和click_id;中间节点(中间节点为复杂类型)本身不存储数据,其通过所包含的叶子节点来存储数据,比如图中的positions、position_info和impressions。
在列式存储中,每个节点除了节点值外,还包括位置信息,节点值和位置信息相结合,用于序列化和反序列化嵌套数据类型。
其中,节点值是指基本类型的节点存储的具体的数据,比如,若click_id下有定义,则定义的数据即为节点值。在Dremel和Parquet中,节点值被称作Value。
其中,位置信息用于表征节点之间的层级关系和存储状况,在解码过程中还原节点所在的位置。所述位置信息包括定义信息和重复信息,其中,定义信息用于表征节点所在路径上节点值为空的层级,重复信息用于表征节点所在路径上重复类型的节点的层级。在Dremel和Parquet中,定义信息被称作Definition level,重复信息被称作Repetitionlevel。
下面对定义信息进行详细解释:
在嵌套的数据模型中,Required的节点的节点值一定是非空的,Optional和Repeated的节点的节点值可能是空的,也可能是非空的。对于Optional和Repeated的节点来说,若一个节点的节点值是非空的,那么该节点所有的父节点均为非空的,若一个节点的节点值是空的,那么该节点的父节点可能是空的,也可能是非空的。因此,为了记录嵌套结构的状况,需要定义信息来表征最先出现节点值为空的节点的深度。
以下面的Schema为例进行说明:
该Schema中三个节点均为Optional,均存在节点值可能为空的情况。下表是各种情况下,a、b、c的定义信息:
Value | Definition-level |
a:null | 0 |
a:{b:null | 1 |
a:{b:{c:null}} | 2 |
a:{b:{c:"foo"}} | 3(actually defined) |
具体地,若节点a的Value为空,那么定义信息为0;若节点a和节点b的Value为空,那么定义信息为1;若节点a、节点b和节点c的Value为空,那么定义信息为2;若节点a、节点b和节点c的Value均有定义,那么定义信息为3,由此可根据定义信息确定最先出现节点值为空的那一层。
下面对重复信息进行详细解释:
在嵌套的数据模型中,Repeated的节点可能出现0次或多次,重复信息用于记录Repeated的节点和前面的节点在哪一层是不共享的。具体地,从路径中上一个Repeated的节点开始遍历,当路径中一个节点开始重复的时候,该节点到根节点之间Repeated的节点的数量即为重复信息。
以下面的Schema为例进行说明:
具体地,Value=a是一条记录的开始,所以重复信息为0;Value=b和前面的节点共享了level1这个节点,但是在level2这个节点上不共享,所以重复信息为2;Value=d和前面的节点共享了跟节点(属于同一条记录),但是在level1这个节点上不共享,所以重复信息为1;Value=h和前面的节点不共享任何节点(不属于同一条记录),所以重复信息为0。该Schema的重复信息如下表所示:
当进行读取时,顺序读取每一个Value,根据其重复信息创建对象,当读取Value=a时,Repetition level=0,表示需要创建一个新的节点,当读取Value=b时,Repetitionlevel=2,表示需要创建一个新的level2节点,当读取Value=d时,Repetition level=1,表示需要创建一个新的level=1节点,当所有的读取完成之后创建一条新的记录,如图5所示。
S204,对所述各个节点和所述各个节点对应的节点数据进行编码,得到编码结果。
具体地,获取嵌套结构的数据中每个基本类型的节点(即叶子节点),为每个基本类型的节点(即叶子节点)建立一个列,按照建立的列存储嵌套类型的数据。
如图6所示,图6为一个Schema的编码结果。该Schema有5个Pageview消息,其中第一个消息和第5个消息在click_id列有定义,其它3个消息在click_id列上无定义,是空列。其中,pv表示pageview,pos表示positions,imp表示impressions,R-level表示重复信息,D-level表示定义信息,Value表示节点值。
第1行:R-level=0,D-level=3,Value=100。R-level=0是因为该节点是在一条新消息里面,它是从根节点开始重复的,根节点的重复信息为0,故R-level=0;D-level=3是因为该节点定义到click_id节点,click_id的路径pageview->positions->impressions->click_id中有3个可能为空的节点(Positions,Impressions,click_id),故D-level=3。
第2行:R-level=0,D-level=1,Value=null。R-level=0是因为该节点是在一条新消息里面,它是在根节点开始重复的,根节点的重复信息为0,故R-level=0;D-level=1是因为该节点只定义到positions节点,而positions的路径pageview->positions中有1个可能为空的节点(positions),故D-level=1;因为click_id在该位置没有定义,故value为null。
第3行:R-level=0,D-level=1,Value=null。R-level=0是因为该节点是在一条新消息里面,它是从根节点开始重复的,根节点的重复信息为0;D-level=1是因为该节点只定义到positions节点,而positions的路径pageview->positions中有1个可能为空的节点(positions),故D-level=1;因为click_id在该位置没有定义,故value为null。
第4行:R-level=1,D-level=2,Value=null。R-level=1是因为该节点是从positions开始产生新的分支,positions的路径是pageview->positions,positions是这个路径上的第1个repeated节点,故R-level=1;D-level=2是因为该节点只定义到impressions节点,而impressions的路径pageview->positions->impressions中有两个可能为空的节点(positions,impressions),故D-level=2;因为click_id在该位置没有定义,故value为null。
第5、6、7行同理,在此不再赘述。
S206,若所述编码结果中存在节点的节点值为空,从所述编码结果中丢弃所述节点的位置信息,并标记所述节点为空列。
在一些列式存储中,对于特定的数据列,不管是否有被定义的叶子节点,都需要存储大量的位置信息。如图6所示,虽然click_id只有两个位置有值,仍然需要存储7对重复信息,其中第2、3、4、5、6行的重复信息只是为了在解码过程中恢复空的根节点,在实际的应用场景中,恢复出来的空的根节点没有实际意义。因此,这种编码方式,降低了编码的效率,同时也增加了编码过程占用的内存资源,尤其在数据比较稀疏的应用场景中,这些空节点对终端的性能和存储空间造成了巨大的浪费。
本实施例中,在编码的过程中,若检测到节点的节点值为空,丢弃该节点的位置信息,并标记节点为空列;在解码的过程中,若检测到节点被标记为空列,则跳过该节点。
具体地,标记所述节点为空列的方式可以是:标记所述节点的重复信息和定义信息中的至少一个,或者,添加标记信息等。
对于标记所述节点的重复信息和定义信息中的至少一个,可分为多种标记类型,包括第一标记类型、第二标记类型、第三标记类型以及第四标记类型。其中,所述第一标记类型是对所述节点的重复信息进行数值标记;所述第二标记类型是对所述节点的重复信息和所述节点的定义信息分别进行数值标记;所述第三标记类型是对所述节点的重复信息进行数值标记,并对所述节点的定义信息进行连续空节点的数量标记;所述第四标记类型是对所述节点的定义信息进行数值标记。
具体地,第一标记类型、第二标记类型以及第四标记类型是通过赋予重复信息和/或定义信息用于标记的数值来实现标记。由于每个节点的重复信息和定义信息都会有一个范围,节点的重复信息的范围包括了所有情况下节点的重复信息可能会出现的数值,节点的定义信息的范围包括了所有情况下节点的定义信息可能会出现的数值,因此可通过赋予重复信息不可能出现的数值,和/或赋予定义信息不可能出现的数值来实现标记,这样,简化对解码没有实际意义的空列的编码。利用第一标记类型、第二标记类型或者第四标记类型后,图6所示的编码结果可改进为图7所示的编码结果,第2、3、4、5、6行的编码被优化掉了(如带划线部分所示)。
具体地,第三标记类型是利用赋予重复信息用于标记的数值来实现标记,同时,利用定义信息统计连续空节点的数量。在进行编码的过程中,对于至少两个连续节点被标记为空列的情况,采用行程编码,利用定义信息来表征连续空节点的数量,在对所述编码结果进行解码的过程中,根据重复信息检测到节点为空列,根据定义信息跳过连续空节点的数量,这样,提高编解码的效率。利用第三标记类型后,图6所示的编码结果可改进为图8所示的编码结果,其中,第2行的R-Level=4是用于标记重复信息的数值,第2行的D-Level=3代表需要连续跳过3个空节点(即第2、3、5行的3个空节点),第3、4、5、6行的编码被优化掉了(如带划线部分所示)。
本实施例提供的编码方法,在解码后,对于空节点,只恢复出根节点,由于被丢弃的节点并不包含在该列(如图6中的click_id)上被定义的叶子节点,因此,在大部分应用场景下,这些节点被丢弃不影响数据的有效性。对比图6和图7的编码结果,本实施例提供的编码方法所需存储的R-level和D-level从7对降低为2对,极大降低了R-level和D-level的空间占用。
在实际测试中(对13G的数据进行编码),利用本实施例提供的编码方法,R-level和D-level占用的存储空间从原来的760兆降低为384兆,编码的速度提升了20%以上,编码过程中的内存占用从原来的13G降低到5G。
本申请提供的数据处理方法,获取待处理数据中各个节点及各个节点对应的节点数据,对各个节点和各个节点对应的节点数据进行编码,得到编码结果,若编码结果中存在节点的节点值为空,从所述编码结果中丢弃节点的位置信息,并标记节点为空列,提高了嵌套数据的列式存储的编解码效率,降低了编码过程占用的内存资源。
在一个实施例中,所述标记所述节点为空列,包括:获取所述节点的重复信息对应的数据集合;根据所述重复信息对应的数据集合确定所述节点的重复信息的第一标记值,其中,所述第一标记值不等于所述重复信息对应的数据集合中的任意值;根据所述第一标记值在所述编码结果中更新所述节点的节点数据。
其中,节点的重复信息对应的数据集合包括了所有情况下节点的重复信息可能会出现的值;第一标记值是指,用于替换该节点的原本的重复信息的值,且第一标记值不等于该节点的重复信息对应的数据集合中的任意值。
具体地,根据所述重复信息对应的数据集合确定所述节点的重复信息的第一标记值的方式可以是:赋予一数值作为第一标记值,该数值不等于重复信息对应的数据集合中的任意值。
具体地,在进行编码的过程中,利用第一标记值对节点的重复信息进行标记(此种标记类型为第一标记类型),在对编码结果进行解码的过程中,获取到标记类型为第一标记类型,若检测到节点的重复信息被标记(比如检测到节点的重复信息不等于节点的重复信息对应的数据集合中的任意值),则判定该节点被标记为空列。
本申请提供的数据处理方法,利用节点的重复信息进行标记,简化了对解码没有实际意义的空列的编码。
在一个实施例中,在根据所述重复信息对应的数据集合确定所述节点的重复信息的第一标记值之后,还包括:获取所述节点的定义信息对应的数据集合;根据所述定义信息对应的数据集合确定所述节点的定义信息的第二标记值,其中,所述第二标记值不等于所述定义信息对应的数据集合中的任意值;
所述根据所述第一标记值在所述编码结果中更新所述节点的节点数据,包括:根据所述第一标记值和所述第二标记值在所述编码结果中更新所述节点的节点数据。
其中,节点的定义信息对应的数据集合包括了所有情况下节点的定义信息可能会出现的值;第二标记值是指,用于替换该节点的原本的定义信息的值,且第二标记值不等于该节点的定义信息对应的数据集合中的任意值。
具体地,根据所述定义信息对应的数据集合确定所述节点的定义信息的第二标记值的方式可以是:赋予一数值作为第二标记值,该数值不等于定义信息对应的数据集合中的任意值。
具体地,在进行编码的过程中,利用第一标记值对节点的重复信息进行标记,并利用第二标记值对节点的定义信息进行标记(此种标记类型为第二标记类型),在对编码结果进行解码的过程中,获取到标记类型为第二标记类型,若检测到节点的重复信息和定义信息被标记(比如检测到节点的重复信息不等于节点的重复信息对应的数据集合中的任意值,且节点的定义信息不等于节点的定义信息对应的数据集合中的任意值),则判定该节点被标记为空列。
本申请提供的数据处理方法,利用节点的重复信息和定义信息进行标记,简化了对解码没有实际意义的空列的编码。
在一个实施例中,在根据所述重复信息对应的数据集合确定所述节点的重复信息的第一标记值之后,还包括:确定所述节点所在路径上以所述节点为起点,节点值为空的节点连续的第一数量;将所述第一数量作为所述节点的定义信息的第三标记值;
所述根据所述第一标记值在所述编码结果中更新所述节点的节点数据,包括:根据所述第一标记值和所述第三标记值在所述编码结果中更新所述节点的节点数据。
其中,第一数量是指,在该空节点所在的路径上,以该空节点为起点,连续的空节点的数量。比如,如图6所示,第2行至第6行的Value均为空,第2、3、5行为连续空节点,第一数量为3。
其中,第三标记值是指,用于替换该节点的原本的定义信息的值,第三标记值取值为第一数量。
具体地,在进行编码的过程中,利用第一标记值对节点的重复信息进行标记,同时,利用定义信息统计连续空节点的数量(此种标记类型为第三标记类型),在对编码结果进行解码的过程中,获取到标记类型为第三标记类型,若检测到节点的重复信息被标记(比如检测到节点的重复信息不等于节点的重复信息对应的数据集合中的任意值),则根据定义信息确定跳过的空节点的数量,并跳过该数量的空节点。
本申请提供的数据处理方法,利用节点的重复信息进行标记,同时,利用定义信息统计连续空节点的数量,提高了编解码的效率。
在一个实施例中,所述根据所述重复信息对应的数据集合确定所述节点的重复信息的第一标记值,包括:获取所述重复信息对应的数据集合中的最大值或者最小值;对所述重复信息对应的数据集合中的最大值或者最小值进行处理,得到所述节点的重复信息的第一标记值。
具体地,对重复信息对应的数据集合中的最大值或者最小值进行处理的方式可以是:在最大值或者最小值的基础上增加或者减少特定数值;在最大值或者最小值的基础上乘以或者除以特定数值,以使第一标记值不等于重复信息对应的数据集合中的任意值,其中,特定数值为预先设定的数值,且特定数值的大小、正负不做具体限定。
本申请提供的数据处理方法,对重复信息对应的数据集合中的最大值或者最小值进行处理,得到第一标记值,使得第一标记值不等于重复信息对应的数据集合中的任意值。
在一个实施例中,所述对所述重复信息对应的数据集合中的最大值或者最小值进行处理,得到所述节点的重复信息的第一标记值,包括:在所述重复信息对应的数据集合中的最大值或者最小值的基础上增加预设数值,得到所述第一标记值,其中,所述预设数值为正值;或者,获取所述重复信息对应的数据集合中的最大值或者最小值与预定数值之间的乘积,得到所述第一标记值,其中,所述预定数值大于1。
其中,预设数值为预先设定的数值,且预设数值为正值;预定数值为预先设定的数值,且预定数值大于1。
可以理解,预设数值和预定数值可设置为较小的数值,这样,避免第一标记值过大,给系统造成读取负担。如图8所示,图8中的R-Level为4,是通过在图8中的R-Level对应的数据集合中的最大值3的基础上增加数值“1”得到的。
本申请提供的数据处理方法,在重复信息对应的数据集合中的最大值或者最小值的基础上增加预设数值,得到第一标记值,或者获取重复信息对应的数据集合中的最大值或者最小值与预定数值之间的乘积,得到第一标记值,使得第一标记值不等于重复信息对应的数据集合中的任意值。
在一个实施例中,所述标记所述节点为空列,包括:获取所述节点的定义信息对应的数据集合;根据所述定义信息对应的数据集合确定所述节点的定义信息的第二标记值,其中,所述第二标记值不等于所述定义信息对应的数据集合中的任意值;根据所述第二标记值在所述编码结果中更新所述节点的节点数据。
其中,节点的定义信息对应的数据集合包括了所有情况下节点的定义信息可能会出现的值;第二标记值是指,用于替换该节点的原本的定义信息的值,且第二标记值不等于该节点的定义信息对应的数据集合中的任意值。
具体地,根据所述定义信息对应的数据集合确定所述节点的定义信息的第二标记值的方式可以是:赋予一数值作为第二标记值,该数值不等于定义信息对应的数据集合中的任意值。
具体地,在进行编码的过程中,利用第二标记值对节点的定义信息进行标记(此种标记类型为第四标记类型),在对编码结果进行解码的过程中,获取到标记类型为第四标记类型,若检测到节点的定义信息被标记(比如检测到节点的定义信息不等于节点的定义信息对应的数据集合中的任意值),则判定该节点被标记为空列。
本申请提供的数据处理方法,利用节点的定义信息进行标记,简化了对解码没有实际意义的空列的编码。
在一个实施例中,所述根据所述定义信息对应的数据集合确定所述节点的定义信息的第二标记值,包括:获取所述定义信息对应的数据集合中的最大值或者最小值;对所述定义信息对应的数据集合中的最大值或者最小值进行处理,得到所述节点的定义信息的第二标记值。
具体地,对定义信息对应的数据集合中的最大值或者最小值进行处理的方式可以是:在最大值或者最小值的基础上增加或者减少特定数值;在最大值或者最小值的基础上乘以或者除以特定数值,以使第二标记值不等于定义信息对应的数据集合中的任意值,其中,特定数值为预先设定的数值,且特定数值的大小、正负不做具体限定。
本申请提供的数据处理方法,对定义信息对应的数据集合中的最大值或者最小值进行处理,得到第二标记值,使得第二标记值不等于定义信息对应的数据集合中的任意值。
在一个实施例中,所述对所述定义信息对应的数据集合中的最大值或者最小值进行处理,得到所述节点的定义信息的第二标记值,包括:在所述定义信息对应的数据集合中的最大值或者最小值的基础上增加预设数值,得到所述第二标记值,其中,所述预设数值为正值;或者,获取所述定义信息对应的数据集合中的最大值或者最小值与预定数值之间的乘积,得到所述第二标记值,其中,所述预定数值大于1。、
其中,预设数值为预先设定的数值,且预设数值为正值;预定数值为预先设定的数值,且预定数值大于1。
可以理解,预设数值和预定数值可设置为较小的数值,这样,避免第二标记值过大,给系统造成读取负担。
本申请提供的数据处理方法,在定义信息对应的数据集合中的最大值或者最小值的基础上增加预设数值,得到第二标记值,或者获取定义信息对应的数据集合中的最大值或者最小值与预定数值之间的乘积,得到第二标记值,使得第二标记值不等于定义信息对应的数据集合中的任意值。
在一个实施例中,所述若所述编码结果中存在节点的节点值为空,从所述编码结果中丢弃所述节点的位置信息,并标记所述节点为空列之后,还包括:在对所述编码结果进行解码的过程中,获取所述编码结果中各个节点是否被标记为空列;响应于所述节点被标记为空列,跳过所述节点。
具体地,获取所述编码结果中各个节点是否被标记为空列的方式是:获取编码结果的标记类型,根据标记类型获取编码结果中各个节点是否被标记为空列。
具体地,在对编码结果进行解码的过程中,若检测到节点被标记为空列,则跳过该节点。
其中,第一标记类型、第二标记类型以及第四标记类型是通过赋予重复信息和/或定义信息用于标记的数值来实现标记。由于每个节点的重复信息和定义信息都会有一个范围,节点的重复信息的范围包括了所有情况下节点的重复信息可能会出现的数值,节点的定义信息的范围包括了所有情况下节点的定义信息可能会出现的数值,因此可通过赋予重复信息不可能出现的数值,和/或赋予定义信息不可能出现的数值来实现标记,这样,简化对解码没有实际意义的空列的编码。利用第一标记类型、第二标记类型或者第四标记类型后,图6所示的编码结果可改进为图7所示的编码结果,第2、3、4、5、6行的编码被优化掉了(如带划线部分所示)。
其中,第三标记类型是利用赋予重复信息用于标记的数值来实现标记,同时,利用定义信息统计连续空节点的数量。在进行编码的过程中,对于至少两个连续节点被标记为空列的情况,采用行程编码,利用定义信息来表征连续空节点的数量,在对所述编码结果进行解码的过程中,根据重复信息检测到节点为空列,根据定义信息跳过连续空节点的数量,这样,提高编解码的效率。利用第三标记类型后,图6所示的编码结果可改进为图8所示的编码结果,其中,第2行的R-Level=4是用于标记重复信息的数值,第2行的D-Level=3代表需要连续跳过3个空节点(即第2、3、5行的3个空节点),第3、4、5、6行的编码被优化掉了(如带划线部分所示)。
本实施例提供的编码方法,在解码后,对于空节点,只恢复出根节点,由于被丢弃的节点并不包含在该列(如图6中的click_id)上被定义的子节点,因此,在大部分应用场景下,这些节点被丢弃不影响数据的有效性。对比图6和图7的编码结果,本实施例提供的编码方法所需存储的R-level和D-level从7对降低为2对,极大降低了R-level和D-level的空间占用。
本申请提供的数据处理方法,提高了嵌套数据的列式存储的编解码效率,降低了编码过程占用的内存资源。
在一个实施例中,所述在对所述编码结果进行解码的过程中,获取所述编码结果中各个节点是否被标记为空列,包括:在对所述编码结果进行解码的过程中,获取所述编码结果的标记类型;根据所述标记类型获取所述编码结果中各个节点是否被标记为空列。
其中,标记类型包括多种,若标记方式为标记节点的重复信息和定义信息中的至少一个,标记类型可包括第一标记类型、第二标记类型、第三标记类型以及第四标记类型;若标记方式为添加标记信息,标记类型可根据添加的标记信息不同或者添加标记信息的方式不同进行划分。
具体地,针对不同的标记类型,检测编码结果中各个节点是否被标记为空列:若标记类型为第一标记类型,当节点的重复信息不属于节点的重复信息对应的数据集合时,判定节点被标记为空列;若标记类型为第二标记类型,当节点的重复信息不属于节点的重复信息对应的数据集合,且节点的定义信息不属于节点的定义信息对应的数据集合时,判定节点被标记为空列;若标记类型为第三标记类型,当节点的重复信息不属于节点的重复信息对应的数据集合时,判定节点被标记为空列;若标记类型为第四标记类型,当节点的定义信息不属于节点定义信息对应的数据集合时,判定节点被标记为空列。
本申请提供的数据处理方法,针对不同的标记类型检测编码结果中各个节点是否被标记为空列,提高了标记的多样性和检测的准确性。
在一个实施例中,所述标记类型包括第一标记类型、第二标记类型、第三标记类型以及第四标记类型,其中,所述第一标记类型是对所述节点的重复信息进行数值标记;所述第二标记类型是对所述节点的重复信息和所述节点的定义信息分别进行数值标记;所述第三标记类型是对所述节点的重复信息进行数值标记,并对所述节点的定义信息进行连续空节点的数量标记;所述第四标记类型是对所述节点的定义信息进行数值标记;
所述根据所述标记类型获取所述编码结果中各个节点是否被标记为空列,包括:若所述标记类型为所述第一标记类型,当节点的重复信息不属于所述节点的重复信息对应的数据集合时,判定所述节点被标记为空列;若所述标记类型为所述第二标记类型,当节点的重复信息不属于所述节点的重复信息对应的数据集合且所述节点的定义信息不属于所述节点的定义信息对应的数据集合时,判定所述节点被标记为空列;若所述标记类型为所述第三标记类型,当节点的重复信息不属于所述节点的重复信息对应的数据集合时,判定所述节点被标记为空列;若所述标记类型为所述第四标记类型,当所述节点的定义信息不属于所述节点定义信息对应的数据集合时,判定所述节点被标记为空列。
其中,第一标记类型是指利用第一标记值对节点的重复信息进行标记,被标记的节点为空列。具体地,当节点的重复信息不属于所述节点的重复信息对应的数据集合时,判定该节点被标记为空列。
其中,第二标记类型是指利用第一标记值对节点的重复信息进行标记,并利用第二标记值对节点的定义信息进行标记。具体地,当节点的重复信息不属于节点的重复信息对应的数据集合,且节点的定义信息不属于节点的定义信息对应的数据集合时,判定该节点被标记为空列。
其中,第三标记类型是指利用第一标记值对节点的重复信息进行标记,同时,利用定义信息统计连续空节点的数量。具体地,当节点的重复信息不属于节点的重复信息对应的数据集合时,判定节点被标记为空列,根据定义信息确定跳过的空节点的数量,并跳过该数量的空节点。
其中,第四标记类型是指利用第二标记值对节点的定义信息进行标记,被标记的节点为空列。具体地,当节点的定义信息不属于所述节点的定义信息对应的数据集合时,判定该节点被标记为空列。
本申请提供的数据处理方法,针对不同的标记类型检测编码结果中各个节点是否被标记为空列,提高了标记的多样性和检测的准确性。
在一个实施例中,所述响应于所述节点被标记为空列,跳过所述节点,包括:响应于所述节点被标记为空列,且所述标记类型为所述第三标记类型,根据所述节点的定义信息确定第二数量;跳过包括所述节点在内的连续的所述第二数量的节点。
其中,第二数量是指,在该空节点所在的路径上,以该空节点为起点,连续的空节点的数量。比如,如图6所示,第2行至第6行的Value均为空,第2、3、5行为连续空节点,第二数量为3。
具体地,在进行编码的过程中,利用第一标记值对节点的重复信息进行标记,同时,利用定义信息统计连续空节点的数量(此种标记类型为第三标记类型),在对编码结果进行解码的过程中,获取到标记类型为第三标记类型,若检测到节点的重复信息被标记(比如检测到节点的重复信息不等于节点的重复信息对应的数据集合中的任意值),则根据定义信息确定连续跳过的空节点的数量(即第二数量),并跳过包括该节点在内的第二数量的空节点。
本申请提供的数据处理方法,利用节点的重复信息进行标记,同时,利用定义信息统计连续空节点的数量,提高了编解码的效率。
如图9所示,在一个具体的实施例中,所述数据处理方法应用于Dremel、Parquet等支持嵌套类型数据的列式存储,包括以下步骤:
S902,获取待处理数据中各个节点及所述各个节点对应的节点数据,其中,所述节点数据包括位置信息和节点值;
S904,对所述各个节点和所述各个节点对应的节点数据进行编码,得到编码结果;
S906,若所述编码结果中存在节点的节点值为空,从所述编码结果中丢弃所述节点的位置信息;
S908,获取所述节点的重复信息对应的数据集合,根据所述重复信息对应的数据集合确定所述节点的重复信息的第一标记值,其中,所述第一标记值不等于所述重复信息对应的数据集合中的任意值;
S910,获取所述节点的定义信息对应的数据集合,根据所述定义信息对应的数据集合确定所述节点的定义信息的第二标记值,其中,所述第二标记值不等于所述定义信息对应的数据集合中的任意值;
S912,根据所述第一标记值和所述第二标记值在所述编码结果中更新所述节点的节点数据;
S914,在对所述编码结果进行解码的过程中,获取所述编码结果的标记类型;
S916,若所述标记类型为第二标记类型,当节点的重复信息不属于所述节点的重复信息对应的数据集合且所述节点的定义信息不属于所述节点的定义信息对应的数据集合时,判定所述节点被标记为空列;
S918,响应于所述节点被标记为空列,跳过所述节点。
本申请提供的数据处理方法,提高了嵌套数据的列式存储的编解码效率,降低了编码过程占用的内存资源。
如图10所示,在一个具体的实施例中,所述数据处理方法应用于Dremel、Parquet等支持嵌套类型数据的列式存储,包括以下步骤:
S1002,获取待处理数据中各个节点及所述各个节点对应的节点数据,其中,所述节点数据包括位置信息和节点值;
S1004,对所述各个节点和所述各个节点对应的节点数据进行编码,得到编码结果;
S1006,若所述编码结果中存在节点的节点值为空,从所述编码结果中丢弃所述节点的位置信息;
S1008,获取所述节点的重复信息对应的数据集合,根据所述重复信息对应的数据集合确定所述节点的重复信息的第一标记值,其中,所述第一标记值不等于所述重复信息对应的数据集合中的任意值;
S1010,确定所述节点所在路径上以所述节点为起点,节点值为空的节点连续的第一数量,将所述第一数量作为所述节点的定义信息的第二标记值;
S1012,根据所述第一标记值和所述第二标记值在所述编码结果中更新所述节点的节点数据;
S1014,在对所述编码结果进行解码的过程中,获取所述编码结果的标记类型;
S1016,若所述标记类型为第三标记类型,当节点的重复信息不属于所述节点的重复信息对应的数据集合时,判定所述节点被标记为空列;
S1018,响应于所述节点被标记为空列,且所述标记类型为所述第三标记类型,根据所述节点的定义信息确定第二数量;跳过包括所述节点在内的连续的所述第二数量的节点。
本申请提供的数据处理方法,提高了嵌套数据的列式存储的编解码效率,降低了编码过程占用的内存资源。
如图11所示,在一个实施例中,提供了一种数据处理装置1100,包括:获取模块1102、编码模块1104和标记模块1106。
获取模块1102,用于获取待处理数据中各个节点及所述各个节点对应的节点数据,其中,所述节点数据包括位置信息和节点值。
编码模块1104,用于对所述各个节点和所述各个节点对应的节点数据进行编码,得到编码结果。
标记模块1106,用于若所述编码结果中存在节点的节点值为空,从所述编码结果中丢弃所述节点的位置信息,并标记所述节点为空列。
上述数据处理装置1100,获取待处理数据中各个节点及各个节点对应的节点数据,对各个节点和各个节点对应的节点数据进行编码,得到编码结果,响应于编码结果中节点的节点值为空,从所述编码结果中丢弃节点的位置信息,并标记节点为空列,提高了嵌套数据的列式存储的编解码效率,降低了编码过程占用的内存资源。
在一个实施例中,所述标记模块1106还用于获取所述节点的重复信息对应的数据集合;根据所述重复信息对应的数据集合确定所述节点的重复信息的第一标记值,其中,所述第一标记值不等于所述重复信息对应的数据集合中的任意值;根据所述第一标记值在所述编码结果中更新所述节点的节点数据。
本实施例中,利用节点的重复信息进行标记,简化了对解码没有实际意义的空列的编码。
在一个实施例中,所述标记模块1106还用于获取所述节点的定义信息对应的数据集合;根据所述定义信息对应的数据集合确定所述节点的定义信息的第二标记值,其中,所述第二标记值不等于所述定义信息对应的数据集合中的任意值;根据所述第一标记值和所述第二标记值在所述编码结果中更新所述节点的节点数据。
本实施例中,利用节点的重复信息和定义信息进行标记,简化了对解码没有实际意义的空列的编码。
在一个实施例中,所述标记模块1106还用于确定所述节点所在路径上以所述节点为起点,节点值为空的节点连续的第一数量;将所述第一数量作为所述节点的定义信息的第二标记值;根据所述第一标记值和所述第二标记值在所述编码结果中更新所述节点的节点数据。
本实施例中,利用节点的重复信息进行标记,同时,利用定义信息统计连续空节点的数量,提高了编解码的效率。
在一个实施例中,所述标记模块1106还用于获取所述重复信息对应的数据集合中的最大值或者最小值;对所述重复信息对应的数据集合中的最大值或者最小值进行处理,得到所述节点的重复信息的第一标记值。
本实施例中,对重复信息对应的数据集合中的最大值或者最小值进行处理,得到第一标记值,使得第一标记值不等于重复信息对应的数据集合中的任意值。
在一个实施例中,所述标记模块1106还用于在所述重复信息对应的数据集合中的最大值或者最小值的基础上增加预设数值,得到所述第一标记值,其中,所述预设数值为正值;或者,获取所述重复信息对应的数据集合中的最大值或者最小值与预定数值之间的乘积,得到所述第一标记值,其中,所述预定数值大于1。
本实施例中,在重复信息对应的数据集合中的最大值或者最小值的基础上增加预设数值,得到第一标记值,或者获取重复信息对应的数据集合中的最大值或者最小值与预定数值之间的乘积,得到第一标记值,使得第一标记值不等于重复信息对应的数据集合中的任意值。
在一个实施例中,所述标记模块1106还用于获取所述节点的定义信息对应的数据集合;根据所述定义信息对应的数据集合确定所述节点的定义信息的第二标记值,其中,所述第二标记值不等于所述定义信息对应的数据集合中的任意值;根据所述第二标记值在所述编码结果中更新所述节点的节点数据。
本实施例中,利用节点的定义信息进行标记,简化了对解码没有实际意义的空列的编码。
在一个实施例中,所述标记模块1106还用于获取所述定义信息对应的数据集合中的最大值或者最小值;对所述定义信息对应的数据集合中的最大值或者最小值进行处理,得到所述节点的定义信息的第二标记值。
本实施例中,对定义信息对应的数据集合中的最大值或者最小值进行处理,得到第二标记值,使得第二标记值不等于定义信息对应的数据集合中的任意值。
在一个实施例中,所述标记模块1106还用于在所述定义信息对应的数据集合中的最大值或者最小值的基础上增加预设数值,得到所述第二标记值,其中,所述预设数值为正值;或者,获取所述定义信息对应的数据集合中的最大值或者最小值与预定数值之间的乘积,得到所述第二标记值,其中,所述预定数值大于1。
本实施例中,在定义信息对应的数据集合中的最大值或者最小值的基础上增加预设数值,得到第二标记值,或者获取定义信息对应的数据集合中的最大值或者最小值与预定数值之间的乘积,得到第二标记值,使得第二标记值不等于定义信息对应的数据集合中的任意值。
在一个实施例中,所述数据处理装置1100还包括跳过模块1108,所述获取模块1102还用于在对所述编码结果进行解码的过程中,获取所述编码结果中各个节点是否被标记为空列;所述跳过模块1108用于响应于所述节点被标记为空列,跳过所述节点。
本实施例中,提高了嵌套数据的列式存储的编解码效率,降低了编码过程占用的内存资源。
在一个实施例中,所述获取模块1102还用于在对所述编码结果进行解码的过程中,获取所述编码结果的标记类型;根据所述标记类型获取所述编码结果中各个节点是否被标记为空列。
本实施例中,针对不同的标记类型检测编码结果中各个节点是否被标记为空列,提高了标记的多样性和检测的准确性。
在一个实施例中,所述获取模块1102还用于若所述标记类型为所述第一标记类型,当节点的重复信息不属于所述节点的重复信息对应的数据集合时,判定所述节点被标记为空列;若所述标记类型为所述第二标记类型,当节点的重复信息不属于所述节点的重复信息对应的数据集合且所述节点的定义信息不属于所述节点的定义信息对应的数据集合时,判定所述节点被标记为空列;若所述标记类型为所述第三标记类型,当节点的重复信息不属于所述节点的重复信息对应的数据集合时,判定所述节点被标记为空列;若所述标记类型为所述第四标记类型,当所述节点的定义信息不属于所述节点定义信息对应的数据集合时,判定所述节点被标记为空列。
本实施例中,针对不同的标记类型检测编码结果中各个节点是否被标记为空列,提高了标记的多样性和检测的准确性。
在一个实施例中,所述跳过模块1108还用于响应于所述节点被标记为空列,且所述标记类型为所述第三标记类型,根据所述节点的定义信息确定第二数量;跳过包括所述节点在内的连续的所述第二数量的节点。
本实施例中,利用节点的重复信息进行标记,同时,利用定义信息统计连续空节点的数量,提高了编解码的效率。
在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机可读指令,该计算机可读指令被处理器执行时实现以下步骤:获取待处理数据中各个节点及所述各个节点对应的节点数据,其中,所述节点数据包括位置信息和节点值;对所述各个节点和所述各个节点对应的节点数据进行编码,得到编码结果;若所述编码结果中存在节点的节点值为空,从所述编码结果中丢弃所述节点的位置信息,并标记所述节点为空列。
上述计算机可读存储介质上存储的计算机可读指令在被执行时,获取待处理数据中各个节点及各个节点对应的节点数据,对各个节点和各个节点对应的节点数据进行编码,得到编码结果,响应于编码结果中节点的节点值为空,从所述编码结果中丢弃节点的位置信息,并标记节点为空列,提高了嵌套数据的列式存储的编解码效率,降低了编码过程占用的内存资源。
在一个实施例中,所述位置信息包括定义信息和重复信息,其中,所述定义信息用于表征节点所在路径上节点值为空的层级,所述重复信息用于表征节点所在路径上重复类型的节点的层级。
在一个实施例中,所述标记所述节点为空列,包括:获取所述节点的重复信息对应的数据集合;根据所述重复信息对应的数据集合确定所述节点的重复信息的第一标记值,其中,所述第一标记值不等于所述重复信息对应的数据集合中的任意值;根据所述第一标记值在所述编码结果中更新所述节点的节点数据。
在一个实施例中,在根据所述重复信息对应的数据集合确定所述节点的重复信息的第一标记值之后,还包括:获取所述节点的定义信息对应的数据集合;根据所述定义信息对应的数据集合确定所述节点的定义信息的第二标记值,其中,所述第二标记值不等于所述定义信息对应的数据集合中的任意值;所述根据所述第一标记值在所述编码结果中更新所述节点的节点数据,包括:根据所述第一标记值和所述第二标记值在所述编码结果中更新所述节点的节点数据。
在一个实施例中,在根据所述重复信息对应的数据集合确定所述节点的重复信息的第一标记值之后,还包括:确定所述节点所在路径上以所述节点为起点,节点值为空的节点连续的第一数量;将所述第一数量作为所述节点的定义信息的第二标记值;所述根据所述第一标记值在所述编码结果中更新所述节点的节点数据,包括:根据所述第一标记值和所述第二标记值在所述编码结果中更新所述节点的节点数据。
在一个实施例中,所述根据所述重复信息对应的数据集合确定所述节点的重复信息的第一标记值,包括:获取所述重复信息对应的数据集合中的最大值或者最小值;对所述重复信息对应的数据集合中的最大值或者最小值进行处理,得到所述节点的重复信息的第一标记值。
在一个实施例中,所述对所述重复信息对应的数据集合中的最大值或者最小值进行处理,得到所述节点的重复信息的第一标记值,包括:在所述重复信息对应的数据集合中的最大值或者最小值的基础上增加预设数值,得到所述第一标记值,其中,所述预设数值为正值;或者,获取所述重复信息对应的数据集合中的最大值或者最小值与预定数值之间的乘积,得到所述第一标记值,其中,所述预定数值大于1。
在一个实施例中,所述标记所述节点为空列,包括:获取所述节点的定义信息对应的数据集合;根据所述定义信息对应的数据集合确定所述节点的定义信息的第二标记值,其中,所述第二标记值不等于所述定义信息对应的数据集合中的任意值;根据所述第二标记值在所述编码结果中更新所述节点的节点数据。
在一个实施例中,所述根据所述定义信息对应的数据集合确定所述节点的定义信息的第二标记值,包括:获取所述定义信息对应的数据集合中的最大值或者最小值;对所述定义信息对应的数据集合中的最大值或者最小值进行处理,得到所述节点的定义信息的第二标记值。
在一个实施例中,所述对所述定义信息对应的数据集合中的最大值或者最小值进行处理,得到所述节点的定义信息的第二标记值,包括:在所述定义信息对应的数据集合中的最大值或者最小值的基础上增加预设数值,得到所述第二标记值,其中,所述预设数值为正值;或者,获取所述定义信息对应的数据集合中的最大值或者最小值与预定数值之间的乘积,得到所述第二标记值,其中,所述预定数值大于1。
在一个实施例中,所述若所述编码结果中存在节点的节点值为空,从所述编码结果中丢弃所述节点的位置信息,并标记所述节点为空列之后,还包括:在对所述编码结果进行解码的过程中,获取所述编码结果中各个节点是否被标记为空列;响应于所述节点被标记为空列,跳过所述节点。
在一个实施例中,所述在对所述编码结果进行解码的过程中,获取所述编码结果中各个节点是否被标记为空列,包括:在对所述编码结果进行解码的过程中,获取所述编码结果的标记类型;根据所述标记类型获取所述编码结果中各个节点是否被标记为空列。
在一个实施例中,所述标记类型包括第一标记类型、第二标记类型、第三标记类型以及第四标记类型,其中,所述第一标记类型是对所述节点的重复信息进行数值标记;所述第二标记类型是对所述节点的重复信息和所述节点的定义信息分别进行数值标记;所述第三标记类型是对所述节点的重复信息进行数值标记,并对所述节点的定义信息进行连续空节点的数量标记;所述第四标记类型是对所述节点的定义信息进行数值标记;
所述根据所述标记类型获取所述编码结果中各个节点是否被标记为空列,包括:若所述标记类型为所述第一标记类型,当节点的重复信息不属于所述节点的重复信息对应的数据集合时,判定所述节点被标记为空列;若所述标记类型为所述第二标记类型,当节点的重复信息不属于所述节点的重复信息对应的数据集合且所述节点的定义信息不属于所述节点的定义信息对应的数据集合时,判定所述节点被标记为空列;若所述标记类型为所述第三标记类型,当节点的重复信息不属于所述节点的重复信息对应的数据集合时,判定所述节点被标记为空列;若所述标记类型为所述第四标记类型,当所述节点的定义信息不属于所述节点定义信息对应的数据集合时,判定所述节点被标记为空列。
在一个实施例中,所述响应于所述节点被标记为空列,跳过所述节点,包括:响应于所述节点被标记为空列,且所述标记类型为所述第三标记类型,根据所述节点的定义信息确定第二数量;跳过包括所述节点在内的连续的所述第二数量的节点。
在一个实施例中,提供了一种计算机设备,包括存储器和处理器,存储器中储存有计算机可读指令,计算机可读指令被处理器执行时,使得处理器执行以下步骤:获取待处理数据中各个节点及所述各个节点对应的节点数据,其中,所述节点数据包括位置信息和节点值;对所述各个节点和所述各个节点对应的节点数据进行编码,得到编码结果;若所述编码结果中存在节点的节点值为空,从所述编码结果中丢弃所述节点的位置信息,并标记所述节点为空列。
上述计算机设备,获取待处理数据中各个节点及各个节点对应的节点数据,对各个节点和各个节点对应的节点数据进行编码,得到编码结果,响应于编码结果中节点的节点值为空,从所述编码结果中丢弃节点的位置信息,并标记节点为空列,提高了嵌套数据的列式存储的编解码效率,降低了编码过程占用的内存资源。
在一个实施例中,所述位置信息包括定义信息和重复信息,其中,所述定义信息用于表征节点所在路径上节点值为空的层级,所述重复信息用于表征节点所在路径上重复类型的节点的层级。
在一个实施例中,所述标记所述节点为空列,包括:获取所述节点的重复信息对应的数据集合;根据所述重复信息对应的数据集合确定所述节点的重复信息的第一标记值,其中,所述第一标记值不等于所述重复信息对应的数据集合中的任意值;根据所述第一标记值在所述编码结果中更新所述节点的节点数据。
在一个实施例中,在根据所述重复信息对应的数据集合确定所述节点的重复信息的第一标记值之后,还包括:获取所述节点的定义信息对应的数据集合;根据所述定义信息对应的数据集合确定所述节点的定义信息的第二标记值,其中,所述第二标记值不等于所述定义信息对应的数据集合中的任意值;所述根据所述第一标记值在所述编码结果中更新所述节点的节点数据,包括:根据所述第一标记值和所述第二标记值在所述编码结果中更新所述节点的节点数据。
在一个实施例中,在根据所述重复信息对应的数据集合确定所述节点的重复信息的第一标记值之后,还包括:确定所述节点所在路径上以所述节点为起点,节点值为空的节点连续的第一数量;将所述第一数量作为所述节点的定义信息的第二标记值;所述根据所述第一标记值在所述编码结果中更新所述节点的节点数据,包括:根据所述第一标记值和所述第二标记值在所述编码结果中更新所述节点的节点数据。
在一个实施例中,所述根据所述重复信息对应的数据集合确定所述节点的重复信息的第一标记值,包括:获取所述重复信息对应的数据集合中的最大值或者最小值;对所述重复信息对应的数据集合中的最大值或者最小值进行处理,得到所述节点的重复信息的第一标记值。
在一个实施例中,所述对所述重复信息对应的数据集合中的最大值或者最小值进行处理,得到所述节点的重复信息的第一标记值,包括:在所述重复信息对应的数据集合中的最大值或者最小值的基础上增加预设数值,得到所述第一标记值,其中,所述预设数值为正值;或者,获取所述重复信息对应的数据集合中的最大值或者最小值与预定数值之间的乘积,得到所述第一标记值,其中,所述预定数值大于1。
在一个实施例中,所述标记所述节点为空列,包括:获取所述节点的定义信息对应的数据集合;根据所述定义信息对应的数据集合确定所述节点的定义信息的第二标记值,其中,所述第二标记值不等于所述定义信息对应的数据集合中的任意值;根据所述第二标记值在所述编码结果中更新所述节点的节点数据。
在一个实施例中,所述根据所述定义信息对应的数据集合确定所述节点的定义信息的第二标记值,包括:获取所述定义信息对应的数据集合中的最大值或者最小值;对所述定义信息对应的数据集合中的最大值或者最小值进行处理,得到所述节点的定义信息的第二标记值。
在一个实施例中,所述对所述定义信息对应的数据集合中的最大值或者最小值进行处理,得到所述节点的定义信息的第二标记值,包括:在所述定义信息对应的数据集合中的最大值或者最小值的基础上增加预设数值,得到所述第二标记值,其中,所述预设数值为正值;或者,获取所述定义信息对应的数据集合中的最大值或者最小值与预定数值之间的乘积,得到所述第二标记值,其中,所述预定数值大于1。
在一个实施例中,所述若所述编码结果中存在节点的节点值为空,从所述编码结果中丢弃所述节点的位置信息,并标记所述节点为空列之后,还包括:在对所述编码结果进行解码的过程中,获取所述编码结果中各个节点是否被标记为空列;响应于所述节点被标记为空列,跳过所述节点。
在一个实施例中,所述在对所述编码结果进行解码的过程中,获取所述编码结果中各个节点是否被标记为空列,包括:在对所述编码结果进行解码的过程中,获取所述编码结果的标记类型;根据所述标记类型获取所述编码结果中各个节点是否被标记为空列。
在一个实施例中,所述标记类型包括第一标记类型、第二标记类型、第三标记类型以及第四标记类型,其中,所述第一标记类型是对所述节点的重复信息进行数值标记;所述第二标记类型是对所述节点的重复信息和所述节点的定义信息分别进行数值标记;所述第三标记类型是对所述节点的重复信息进行数值标记,并对所述节点的定义信息进行连续空节点的数量标记;所述第四标记类型是对所述节点的定义信息进行数值标记;
所述根据所述标记类型获取所述编码结果中各个节点是否被标记为空列,包括:若所述标记类型为所述第一标记类型,当节点的重复信息不属于所述节点的重复信息对应的数据集合时,判定所述节点被标记为空列;若所述标记类型为所述第二标记类型,当节点的重复信息不属于所述节点的重复信息对应的数据集合且所述节点的定义信息不属于所述节点的定义信息对应的数据集合时,判定所述节点被标记为空列;若所述标记类型为所述第三标记类型,当节点的重复信息不属于所述节点的重复信息对应的数据集合时,判定所述节点被标记为空列;若所述标记类型为所述第四标记类型,当所述节点的定义信息不属于所述节点定义信息对应的数据集合时,判定所述节点被标记为空列。
在一个实施例中,所述响应于所述节点被标记为空列,跳过所述节点,包括:响应于所述节点被标记为空列,且所述标记类型为所述第三标记类型,根据所述节点的定义信息确定第二数量;跳过包括所述节点在内的连续的所述第二数量的节点。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一非易失性计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)等。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。
Claims (15)
1.一种数据处理方法,所述方法包括:
获取待处理数据中各个节点及所述各个节点对应的节点数据,其中,所述节点数据包括位置信息和节点值;
对所述各个节点和所述各个节点对应的节点数据进行编码,得到编码结果;
若所述编码结果中存在节点的节点值为空,从所述编码结果中丢弃所述节点的位置信息,并标记所述节点为空列。
2.根据权利要求1所述的方法,其特征在于,所述位置信息包括定义信息和重复信息,其中,所述定义信息用于表征节点所在路径上节点值为空的层级,所述重复信息用于表征节点所在路径上重复类型的节点的层级;
所述标记所述节点为空列,包括:
获取所述节点的重复信息对应的数据集合;
根据所述重复信息对应的数据集合确定所述节点的重复信息的第一标记值,其中,所述第一标记值不等于所述重复信息对应的数据集合中的任意值;
根据所述第一标记值在所述编码结果中更新所述节点的节点数据。
3.根据权利要求2所述的方法,其特征在于,在根据所述重复信息对应的数据集合确定所述节点的重复信息的第一标记值之后,还包括:
获取所述节点的定义信息对应的数据集合;
根据所述定义信息对应的数据集合确定所述节点的定义信息的第二标记值,其中,所述第二标记值不等于所述定义信息对应的数据集合中的任意值;
所述根据所述第一标记值在所述编码结果中更新所述节点的节点数据,包括:
根据所述第一标记值和所述第二标记值在所述编码结果中更新所述节点的节点数据。
4.根据权利要求2所述的方法,其特征在于,在根据所述重复信息对应的数据集合确定所述节点的重复信息的第一标记值之后,还包括:
确定所述节点所在路径上以所述节点为起点,节点值为空的节点连续的第一数量;
将所述第一数量作为所述节点的定义信息的第二标记值;
所述根据所述第一标记值在所述编码结果中更新所述节点的节点数据,包括:
根据所述第一标记值和所述第二标记值在所述编码结果中更新所述节点的节点数据。
5.根据权利要求2所述的方法,其特征在于,所述根据所述重复信息对应的数据集合确定所述节点的重复信息的第一标记值,包括:
获取所述重复信息对应的数据集合中的最大值或者最小值;
对所述重复信息对应的数据集合中的最大值或者最小值进行处理,得到所述节点的重复信息的第一标记值。
6.根据权利要求5所述的方法,其特征在于,所述对所述重复信息对应的数据集合中的最大值或者最小值进行处理,得到所述节点的重复信息的第一标记值,包括:
在所述重复信息对应的数据集合中的最大值或者最小值的基础上增加预设数值,得到所述第一标记值,其中,所述预设数值为正值;
或者,获取所述重复信息对应的数据集合中的最大值或者最小值与预定数值之间的乘积,得到所述第一标记值,其中,所述预定数值大于1。
7.根据权利要求2所述的方法,其特征在于,所述标记所述节点为空列,包括:
获取所述节点的定义信息对应的数据集合;
根据所述定义信息对应的数据集合确定所述节点的定义信息的第二标记值,其中,所述第二标记值不等于所述定义信息对应的数据集合中的任意值;
根据所述第二标记值在所述编码结果中更新所述节点的节点数据。
8.根据权利要求3或7所述的方法,其特征在于,所述根据所述定义信息对应的数据集合确定所述节点的定义信息的第二标记值,包括:
获取所述定义信息对应的数据集合中的最大值或者最小值;
对所述定义信息对应的数据集合中的最大值或者最小值进行处理,得到所述节点的定义信息的第二标记值。
9.根据权利要求8所述的方法,其特征在于,所述对所述定义信息对应的数据集合中的最大值或者最小值进行处理,得到所述节点的定义信息的第二标记值,包括:
在所述定义信息对应的数据集合中的最大值或者最小值的基础上增加预设数值,得到所述第二标记值,其中,所述预设数值为正值;
或者,获取所述定义信息对应的数据集合中的最大值或者最小值与预定数值之间的乘积,得到所述第二标记值,其中,所述预定数值大于1。
10.根据权利要求2所述的方法,其特征在于,所述若所述编码结果中存在节点的节点值为空,从所述编码结果中丢弃所述节点的位置信息,并标记所述节点为空列之后,还包括:
在对所述编码结果进行解码的过程中,获取所述编码结果中各个节点是否被标记为空列;
响应于所述节点被标记为空列,跳过所述节点。
11.根据权利要求10所述的方法,其特征在于,所述在对所述编码结果进行解码的过程中,获取所述编码结果中各个节点是否被标记为空列,包括:
在对所述编码结果进行解码的过程中,获取所述编码结果的标记类型;
根据所述标记类型获取所述编码结果中各个节点是否被标记为空列。
12.根据权利要求11所述的方法,其特征在于,所述标记类型包括第一标记类型、第二标记类型、第三标记类型以及第四标记类型,其中,所述第一标记类型是对所述节点的重复信息进行数值标记;所述第二标记类型是对所述节点的重复信息和所述节点的定义信息分别进行数值标记;所述第三标记类型是对所述节点的重复信息进行数值标记,并对所述节点的定义信息进行连续空节点的数量标记;所述第四标记类型是对所述节点的定义信息进行数值标记;
所述根据所述标记类型获取所述编码结果中各个节点是否被标记为空列,包括:
若所述标记类型为所述第一标记类型,当节点的重复信息不属于所述节点的重复信息对应的数据集合时,判定所述节点被标记为空列;
若所述标记类型为所述第二标记类型,当节点的重复信息不属于所述节点的重复信息对应的数据集合且所述节点的定义信息不属于所述节点的定义信息对应的数据集合时,判定所述节点被标记为空列;
若所述标记类型为所述第三标记类型,当节点的重复信息不属于所述节点的重复信息对应的数据集合时,判定所述节点被标记为空列;
若所述标记类型为所述第四标记类型,当所述节点的定义信息不属于所述节点定义信息对应的数据集合时,判定所述节点被标记为空列。
13.根据权利要求12所述的方法,其特征在于,所述响应于所述节点被标记为空列,跳过所述节点,包括:
响应于所述节点被标记为空列,且所述标记类型为所述第三标记类型,根据所述节点的定义信息确定第二数量;
跳过包括所述节点在内的连续的所述第二数量的节点。
14.一种数据处理装置,所述装置包括:
获取模块,用于获取待处理数据中各个节点及所述各个节点对应的节点数据,其中,所述节点数据包括位置信息和节点值;
编码模块,用于对所述各个节点和所述各个节点对应的节点数据进行编码,得到编码结果;
标记模块,用于若所述编码结果中存在节点的节点值为空,从所述编码结果中丢弃所述节点的位置信息,并标记所述节点为空列。
15.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机可执行指令,所述计算机可执行指令被处理器执行时,使得所述处理器执行权利要求1至13中任一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910759842.8A CN111190896B (zh) | 2019-08-16 | 2019-08-16 | 数据处理方法、装置、存储介质和计算机设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910759842.8A CN111190896B (zh) | 2019-08-16 | 2019-08-16 | 数据处理方法、装置、存储介质和计算机设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111190896A true CN111190896A (zh) | 2020-05-22 |
CN111190896B CN111190896B (zh) | 2023-10-17 |
Family
ID=70705717
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910759842.8A Active CN111190896B (zh) | 2019-08-16 | 2019-08-16 | 数据处理方法、装置、存储介质和计算机设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111190896B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112464045A (zh) * | 2020-12-10 | 2021-03-09 | 浙江诺诺网络科技有限公司 | 一种数据处理方法、装置、设备及存储介质 |
CN113312344A (zh) * | 2021-07-28 | 2021-08-27 | 阿里云计算有限公司 | 数据序列化、反序列化方法、设备、系统、介质及产品 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102396222A (zh) * | 2009-06-09 | 2012-03-28 | 索尼公司 | 用通用多级树中的集合分裂针对图像和视频自适应熵编码 |
CN107066551A (zh) * | 2017-03-23 | 2017-08-18 | 中国科学院计算技术研究所 | 一种树状数据的行式和列式存储方法及系统 |
-
2019
- 2019-08-16 CN CN201910759842.8A patent/CN111190896B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102396222A (zh) * | 2009-06-09 | 2012-03-28 | 索尼公司 | 用通用多级树中的集合分裂针对图像和视频自适应熵编码 |
CN107066551A (zh) * | 2017-03-23 | 2017-08-18 | 中国科学院计算技术研究所 | 一种树状数据的行式和列式存储方法及系统 |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112464045A (zh) * | 2020-12-10 | 2021-03-09 | 浙江诺诺网络科技有限公司 | 一种数据处理方法、装置、设备及存储介质 |
CN112464045B (zh) * | 2020-12-10 | 2023-03-14 | 浙江诺诺网络科技有限公司 | 一种数据处理方法、装置、设备及存储介质 |
CN113312344A (zh) * | 2021-07-28 | 2021-08-27 | 阿里云计算有限公司 | 数据序列化、反序列化方法、设备、系统、介质及产品 |
Also Published As
Publication number | Publication date |
---|---|
CN111190896B (zh) | 2023-10-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR102178295B1 (ko) | 결정 모델 구성 방법 및 장치, 컴퓨터 장치 및 저장 매체 | |
CN111274454B (zh) | 时空数据的处理方法、装置、电子设备和存储介质 | |
CN111026978A (zh) | 位置查询方法、装置、计算机设备及存储介质 | |
CN112434024A (zh) | 面向关系型数据库的数据字典生成方法、装置、设备及介质 | |
CN111190896B (zh) | 数据处理方法、装置、存储介质和计算机设备 | |
CN111506761B (zh) | 一种相似图片查询方法、装置、系统及存储介质 | |
CN117807091A (zh) | 数据的关联方法及装置 | |
CN112000707B (zh) | 可变长序列匹配方法、数据库访问方法及装置 | |
CN117971821A (zh) | 数据存储方法、数据读取方法、设备、存储介质 | |
CN116775599A (zh) | 数据迁移方法、装置、电子设备、存储介质 | |
CN112639786A (zh) | 智能地标 | |
CN115809304A (zh) | 字段级血缘解析方法、装置、计算机设备、存储介质 | |
CN111538730B (zh) | 一种基于哈希桶算法的数据统计的方法及其系统 | |
CN115129981A (zh) | 信息推荐方法、装置、设备及存储介质 | |
CN110781182B (zh) | 校验逻辑的自动编码方法、装置以及计算机设备 | |
CN112131016A (zh) | 应用程序内部数据处理方法、装置及设备 | |
CN111324434B (zh) | 计算任务的配置方法、装置及执行系统 | |
US11928134B1 (en) | Medoid-based data compression | |
CN117389954B (zh) | 在线多版本文献内容定位方法、装置、设备及介质 | |
CN115495469B (zh) | 海图文件的更新方法、装置及电子设备 | |
CN114428789B (zh) | 数据的处理方法及装置 | |
CN107958011B (zh) | 一种基于Discuz社区的快速统计方法 | |
CN118069044A (zh) | 芯片数据存储方法、装置、设备、介质和产品 | |
CN113934690A (zh) | 日志存储方法、系统、存储介质及电子设备 | |
CN118484570A (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |