一种存储数据的方法及装置

文档序号:1087056 发布日期:2020-10-20 浏览:3次 >En<

阅读说明:本技术 一种存储数据的方法及装置 (Data storage method and device ) 是由 冯智超 于 2020-07-17 设计创作,主要内容包括:本发明提供了一种存储数据的方法及装置,其中,该存储数据的方法包括:针对待存储半结构化数据集中的每条半结构化数据,依据该半结构化数据包含的字段,对该字段包含的内容进行编码,得到编码字段内容;分别以各字段为列构建数据库表,将半结构化数据对应的各编码字段内容存储至数据库表中该半结构化数据对应的行列,每条半结构化数据对应数据库表中的一行;将构建的数据库表存储至关系型数据库。可以提高数据的挖掘价值。(The invention provides a method and a device for storing data, wherein the method for storing data comprises the following steps: for each piece of semi-structured data in a semi-structured data set to be stored, coding the content contained in the field according to the field contained in the semi-structured data to obtain the content of the coded field; respectively constructing a database table by taking each field as a column, storing each coded field content corresponding to the semi-structured data to a row and a column corresponding to the semi-structured data in the database table, wherein each piece of semi-structured data corresponds to one row in the database table; and storing the constructed database table to a relational database. The mining value of the data can be improved.)

一种存储数据的方法及装置

技术领域

本发明涉及数据存储技术领域,具体而言,涉及一种存储数据的方法及装置。

背景技术

随着通信技术以及互联网络的迅猛发展,各行业的数据量均呈现出几何级数的增长。数据已经成为企业或公司重要的资产,由于关系型数据库具有可用二维表结构来实现数据的逻辑表达,并能够利用结构化查询语言(SQL,Structured Query Language)语法进行数据,非常高效和方便。因而,通过大数据技术采集原始数据,从中提取出结构化数据,将提取出的结构化数据存储在关系型的分析数据库中,基于该分析数据库进行数据挖掘,从而引导企业或公司的发展、布局,或为企业或公司的发展提供参考。但是,由于结构化数据在海量数据(采集的原始数据)中占比较小,使得可用于分析和挖掘的分析数据库中存储的数据量较少,降低了数据挖掘价值。

发明内容

有鉴于此,本发明的目的在于提供存储数据的方法及装置,以提高数据的挖掘价值。

第一方面,本发明实施例提供了存储数据的方法,包括:

针对待存储半结构化数据集中的每条半结构化数据,依据该半结构化数据包含的字段,对该字段包含的内容进行编码,得到编码字段内容;

分别以各字段为列构建数据库表,将半结构化数据对应的各编码字段内容存储至数据库表中该半结构化数据对应的行列,每条半结构化数据对应数据库表中的一行;

将构建的数据库表存储至关系型数据库。

结合第一方面,本发明实施例提供了第一方面的第一种可能的实施方式,其中,所述将半结构化数据对应的各编码字段内容存储至数据库表中该半结构化数据对应的行列,包括:

在所述数据库表中新增半结构化数据对应的行;

在新增行中,定位所述半结构化数据的编码字段内容对应的字段所在的列,将该编码字段内容填充至所述新增行中定位的列中。

结合第一方面或第一方面的第一种可能的实施方式,本发明实施例提供了第一方面的第二种可能的实施方式,其中,所述方法还包括:

接收统计分析请求,依据所述统计分析请求中包含的统计关键词,从关系型数据库中,获取与所述统计关键词相匹配的目标列,所述关系型数据库为clickhouse数据库;

调用数组连接指令,针对所述目标列中的每一行,依据该行中的编码字段内容中包含的分隔符,将该编码字段内容展开为多个列,其中,每一分隔符对应的内容为一列;

调用应用程序接口统计指令,对展开的列中的内容进行统计。

结合第一方面或第一方面的第一种可能的实施方式,本发明实施例提供了第一方面的第三种可能的实施方式,其中,所述方法还包括:

设置一递增表,将结构化查询语句统计分析请求与所述递增表进行左关联,依据所述结构化查询语句统计分析请求中包含的统计关键词,从关系型数据库中,获取与所述统计关键词相匹配的目标列,所述关系型数据库为AnalyticDB数据库;

调用API split_part函数,针对所述目标列中的每一行,依据该行中的编码字段内容中包含的分隔符,将该编码字段内容展开为多个列,其中,每一分隔符对应的内容为一列;

基于关联的递增表,对展开的列中的内容进行统计。

第二方面,本发明实施例还提供了一种存储数据的装置,包括:

编码模块,用于针对待存储半结构化数据集中的每条半结构化数据,依据该半结构化数据包含的字段,对该字段包含的内容进行编码,得到编码字段内容;

写入模块,用于分别以各字段为列构建数据库表,将半结构化数据对应的各编码字段内容存储至数据库表中该半结构化数据对应的行列,每条半结构化数据对应数据库表中的一行;

存储模块,用于将构建的数据库表存储至关系型数据库。

结合第二方面,本发明实施例提供了第二方面的第一种可能的实施方式,其中,所述写入模块包括:

行处理单元,用于分别以各字段为列构建数据库表,在所述数据库表中新增半结构化数据对应的行;

定位写入单元,用于在新增行中,定位所述半结构化数据的编码字段内容对应的字段所在的列,将该编码字段内容填充至所述新增行中定位的列中。

结合第二方面或第二方面的第一种可能的实施方式,本发明实施例提供了第二方面的第二种可能的实施方式,其中,还包括:

第一统计分析模块,用于接收统计分析请求,依据所述统计分析请求中包含的统计关键词,从关系型数据库中,获取与所述统计关键词相匹配的目标列,所述关系型数据库为clickhouse数据库;调用数组连接指令,针对所述目标列中的每一行,依据该行中的编码字段内容中包含的分隔符,将该编码字段内容展开为多个列,其中,每一分隔符对应的内容为一列;调用应用程序接口统计指令,对展开的列中的内容进行统计。

结合第二方面或第二方面的第一种可能的实施方式,本发明实施例提供了第二方面的第三种可能的实施方式,其中,还包括:

第二统计分析模块,用于设置一递增表,将结构化查询语句统计分析请求与所述递增表进行左关联,依据所述结构化查询语句统计分析请求中包含的统计关键词,从关系型数据库中,获取与所述统计关键词相匹配的目标列,所述关系型数据库为AnalyticDB数据库;调用API split_part函数,针对所述目标列中的每一行,依据该行中的编码字段内容中包含的分隔符,将该编码字段内容展开为多个列,其中,每一分隔符对应的内容为一列;基于关联的递增表,对展开的列中的内容进行统计。

第三方面,本申请实施例提供了一种计算机设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述方法的步骤。

第四方面,本申请实施例提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器运行时执行上述的方法的步骤。

本发明实施例提供的存储数据的方法及装置,针对待存储半结构化数据集中的每条半结构化数据,依据该半结构化数据包含的字段,对该字段包含的内容进行编码,得到编码字段内容;分别以各字段为列构建数据库表,将半结构化数据对应的各编码字段内容存储至数据库表中该半结构化数据对应的行列,每条半结构化数据对应数据库表中的一行;将构建的数据库表存储至关系型数据库。这样,通过提取半结构化数据包含的字段,对字段包含的多个内容进行编码,并填充至该字段对应的行列中,实现以数据库二维逻辑表来表现该半结构化数据,能够存储在关系型数据库中,有效扩充了分析数据库存储的数据量,使得分析数据库中可用于分析和挖掘的数据量增大,数据的挖掘价值得到有效提升。

为使本发明的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。

附图说明

为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。

图1示出了本发明实施例所提供的存储数据的方法流程示意图;

图2示出了本发明实施例所提供的存储数据的装置结构示意图;

图3为本申请实施例提供的一种计算机设备300的结构示意图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。

本发明实施例提供了一种存储数据的方法及装置,下面通过实施例进行描述。

相对于存储在关系型数据库等分析数据库中的结构化数据,非结构化数据不能实现以数据库二维逻辑表来表现,例如,办公文档、文本、图片、报表、图像和音视频等。其中,办公文档、文本、报表等为具有可识别模式(例如,标记)的文本数据,称之为半结构化数据,因而,本发明实施例中,通过对该具有可识别模式的半结构化数据进行编码,使之形成数据库二维逻辑表,能够存储至分析数据库,从而有效扩充分析数据库存储的数据量,在进行数据挖掘时能够提供更多的半结构化数据挖掘样本,使更多的半结构化数据参与到数据挖掘中,从而提高数据的挖掘价值。

图1示出了本发明实施例所提供的存储数据的方法流程示意图。如图1所示,该方法包括:

步骤101,针对待存储半结构化数据集中的每条半结构化数据,依据该半结构化数据包含的字段,对该字段包含的内容进行编码,得到编码字段内容;

本发明实施例中,半结构化数据包括但不限于:办公文档、文本、报表。作为一可选实施例,以半结构化数据为一条项目年度收益信息数据为例,假设该项目年度收益信息数据包括数组字段和基本哈希(Hash)字段,数组字段包含的内容为参与项目的员工姓名列表,基本哈希字段包含的内容为不同城市的营业额,单位为万。其中,员工姓名列表示例如下:

[‘小马’,‘小美’,‘小天’]

不同城市的营业额示例如下:

{‘北京’:14,‘上海’:24,‘西安’:33}

本发明实施例中,对员工姓名列表进行编码得到的编码字段内容为:

“小马;小美;小天”

对不同城市的营业额进行编码得到的编码字段内容为:

“北京:14,上海:24,西安:33’

步骤102,分别以各字段为列构建数据库表,将半结构化数据对应的各编码字段内容存储至数据库表中该半结构化数据对应的行列,每条半结构化数据对应数据库表中的一行;

本发明实施例中,再以项目年度收益信息数据为例,该数据包括数组字段和基本哈希字段,构建的数据库表包括2列,列名以字段进行标识。本发明实施例中,以field_1表示数组字段,以field_2表示基本哈希字段。

本发明实施例中,作为一可选实施例,将半结构化数据对应的各编码字段内容存储至数据库表中该半结构化数据对应的行列,包括:

A11,在所述数据库表中新增半结构化数据对应的行;

A12,在新增行中,定位所述半结构化数据的编码字段内容对应的字段所在的列,将该编码字段内容填充至所述新增行中定位的列中。

本发明实施例中,对于每一半结构化数据,将数组字段对应的编码字段内容填充至数据库表中该半结构化数据对应的行中的数组字段列,将基本哈希字段对应的编码字段内容填充至数据库表中该半结构化数据对应的行中的基本哈希字段列。这样,通过对字段对应的多个内容进行编码,使之成为一个整体的编码字段内容,整体的编码字段内容具有结构化数据的特点,从而实现在关系型数据库中存储的目的。

本发明实施例中,在将半结构化数据对应的各编码字段内容存储至数据库表中该半结构化数据对应的行列后,得到的数据库表如表1所示。

表1

field_1 field_2
“小马;小美;小天” “北京:14,上海:24,西安:33’

本发明实施例中,假设待存储半结构化数据集包含两条半结构化数据,另一条项目年度收益信息数据也包括数组字段和基本哈希字段,数组字段包含的内容为员工姓名列表,示例如下:

[‘小马’,‘小天’,‘小李’]

对员工姓名列表进行编码得到的编码字段内容为:

“小马;小天;小李”

基本哈希字段包含的内容为不同城市的营业额,单位为万,示例如下:

{‘北京’:14,‘深圳’:21,‘西安’:13}

对不同城市的营业额进行编码得到的编码字段内容为:

“北京:14,深圳:21,西安:13’

则得到的数据库表如表2所示。

表2

field_1 field_2
“小马;小美;小天” “北京:14,上海:24,西安:33’
“小马;小天;小李” “北京:14,深圳:21,西安:13’

本发明实施例中,作为一可选实施例,待存储半结构化数据集包含的各半结构化数据可以包含不同的字段。若半结构化数据包含数据库表中的一字段,将该字段对应的编码字段内容填充至该半结构化数据所在行的该字段对应的列中。

步骤103,将构建的数据库表存储至关系型数据库。

本发明实施例的存储数据的方法,针对待存储半结构化数据集中的每条半结构化数据,依据该半结构化数据包含的字段,对该字段包含的内容进行编码,得到编码字段内容;分别以各字段为列构建数据库表,将半结构化数据对应的各编码字段内容存储至数据库表中该半结构化数据对应的行列,每条半结构化数据对应数据库表中的一行;将构建的数据库表存储至关系型数据库。这样,通过提取半结构化数据包含的字段,对字段包含的多个内容进行编码,并填充至该字段对应的行列中,实现以数据库二维逻辑表来表现该半结构化数据,使之转化为结构化数据,能够存储在性能非常高的关系型数据库中,有效扩充了分析数据库存储的数据量,使得分析数据库中可用于分析和挖掘的数据量增大,数据的挖掘价值得到有效提升,提升实时在线分析方面的性能;同时,由于半结构化数据存储在性能非常高的关系型数据库中,也能实现半结构化数据查询性能的提升。

本发明实施例中,作为一可选实施例,该方法还包括:

A21,接收统计分析请求,依据所述统计分析请求中包含的统计关键词,从关系型数据库中,获取与所述统计关键词相匹配的目标列,所述关系型数据库为clickhouse数据库;

A22,调用数组连接指令,针对所述目标列中的每一行,依据该行中的编码字段内容中包含的分隔符,将该编码字段内容展开为多个列,其中,每一分隔符对应的内容为一列;

A23,调用应用程序接口统计指令,对展开的列中的内容进行统计。

本发明实施例中,对半结构化数据进行编码存储至关系型数据库后,利用SQL语法和关系型数据库提供的API完成对数据的分析。

本发明实施例中,以统计个人参与的项目个数为例,统计分析请求中的统计关键词可以是数组字段名,通过查询匹配,可以得到表2中的field_1列为与统计关键词相匹配的目标列。以目标列中的行“小马;小美;小天”为例,将编码字段内容“小马;小美;小天”展开为3列。

本发明实施例中,实现上述统计分析的程序代码段如下:

select choice as name,count(*)from entries ARRAY JOIN splitByChar(';',field_1)as choice

本发明实施例中,对于按照城市统计营业额进行统计分析的情形,对应的程序代码段如下:

select city,sum(num)as turnover form(select substring(choice,1,position(choice,':'))as city,toUInt32(substring(choice,position(choice,':')))as num from entries ARRAY JOIN splitByChar(',',field_1)as choice)group bycity

本发明实施例中,作为另一可选实施例,该方法还包括:

A31,设置一递增表,将结构化查询语句统计分析请求与所述递增表进行左关联,依据所述结构化查询语句统计分析请求中包含的统计关键词,从关系型数据库中,获取与所述统计关键词相匹配的目标列,所述关系型数据库为AnalyticDB数据库;

本发明实施例中,设置的递增表(incre_table)如表3所示。

表3

Figure BDA0002589972190000101

Figure BDA0002589972190000111

A32,调用API split_part函数,针对所述目标列中的每一行,依据该行中的编码字段内容中包含的分隔符,将该编码字段内容展开为多个列,其中,每一分隔符对应的内容为一列;

A33,基于关联的递增表,对展开的列中的内容进行统计。

本发明实施例中,使用递增表进行关联,完成一列数据(编码字段内容)到多列数据(内容)的扩展,再使用API split_part函数进行数据分解,再使用sum函数完成统计。

本发明实施例中,实现上述统计分析的程序代码段如下:

with T2 as(select split_part(a.field_1,';',b.subindex)as choice,1ascount from entries as a join incre_table as b on b.subindex<(length(a.field_1)-length(replace(a.field_1,';',”))+1))select choice,COUNT(*)FROM T2 GROUP BYchoice;

本发明实施例中,对于按照城市统计营业额进行统计分析的情形,对应的程序代码段如下:

with T2 as(select split_part(a.field_1,',',b.subindex)as choice,1ascount from entries as a join incre_table as b on b.subindex<(length(a.field_1)-length(replace(a.field_1,',',”))+1))select split_part(a.field_1,':',1)ascity,sum(split_part(a.field_1,':',2))as turnover FROM T2 GROUP BY split_part(a.field_1,',',1)as name

本发明实施例中,对于统计个人参与的项目个数,统计分析结果如表4所示。

表4

name count(*)
小马 2
小美 1
小天 2
小李 1

本发明实施例中,对于按照城市统计营业额进行统计分析,统计分析结果如表5所示。

表5

city turnover(万)
北京 28
上海 24
深圳 21
西安 46

图2示出了本发明实施例所提供的存储数据的装置结构示意图。如图2所示,该装置包括:

编码模块201,用于针对待存储半结构化数据集中的每条半结构化数据,依据该半结构化数据包含的字段,对该字段包含的内容进行编码,得到编码字段内容;

本发明实施例中,半结构化数据包括但不限于:办公文档、文本、报表。

写入模块202,用于分别以各字段为列构建数据库表,将半结构化数据对应的各编码字段内容存储至数据库表中该半结构化数据对应的行列,每条半结构化数据对应数据库表中的一行;

本发明实施例中,作为一可选实施例,写入模块202包括:

行处理单元(图中未示出),用于分别以各字段为列构建数据库表,在所述数据库表中新增半结构化数据对应的行;

定位写入单元,用于在新增行中,定位所述半结构化数据的编码字段内容对应的字段所在的列,将该编码字段内容填充至所述新增行中定位的列中。

本发明实施例中,对于每一半结构化数据,将数组字段对应的编码字段内容填充至数据库表中该半结构化数据对应的行中的数组字段列,将基本哈希字段对应的编码字段内容填充至数据库表中该半结构化数据对应的行中的基本哈希字段列。

存储模块203,用于将构建的数据库表存储至关系型数据库。

本发明实施例中,作为一可选实施例,该装置还包括:

第一统计分析模块(图中未示出),用于接收统计分析请求,依据所述统计分析请求中包含的统计关键词,从关系型数据库中,获取与所述统计关键词相匹配的目标列,所述关系型数据库为clickhouse数据库;调用数组连接指令,针对所述目标列中的每一行,依据该行中的编码字段内容中包含的分隔符,将该编码字段内容展开为多个列,其中,每一分隔符对应的内容为一列;调用应用程序接口统计指令,对展开的列中的内容进行统计。

本发明实施例中,作为另一可选实施例,该装置还包括:

第二统计分析模块(图中未示出),用于设置一递增表,将结构化查询语句统计分析请求与所述递增表进行左关联,依据所述结构化查询语句统计分析请求中包含的统计关键词,从关系型数据库中,获取与所述统计关键词相匹配的目标列,所述关系型数据库为AnalyticDB数据库;调用API split_part函数,针对所述目标列中的每一行,依据该行中的编码字段内容中包含的分隔符,将该编码字段内容展开为多个列,其中,每一分隔符对应的内容为一列;基于关联的递增表,对展开的列中的内容进行统计。

如图3所示,本申请一实施例提供了一种计算机设备300,用于执行图1中的存储数据的方法,该设备包括存储器301、处理器302及存储在该存储器301上并可在该处理器302上运行的计算机程序,其中,上述处理器302执行上述计算机程序时实现上述存储数据的方法的步骤。

具体地,上述存储器301和处理器302能够为通用的存储器和处理器,这里不做具体限定,当处理器302运行存储器301存储的计算机程序时,能够执行上述存储数据的方法。

对应于图1中的存储数据的方法,本申请实施例还提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述存储数据的方法的步骤。

具体地,该存储介质能够为通用的存储介质,如移动磁盘、硬盘等,该存储介质上的计算机程序被运行时,能够执行上述存储数据的方法。

在本申请所提供的实施例中,应该理解到,所揭露系统和方法,可以通过其它的方式实现。以上所描述的系统实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,系统或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本申请提供的实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。

所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。

应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释,此外,术语“第一”、“第二”、“第三”等仅用于区分描述,而不能理解为指示或暗示相对重要性。

最后应说明的是:以上所述实施例,仅为本申请的具体实施方式,用以说明本申请的技术方案,而非对其限制,本申请的保护范围并不局限于此,尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本申请实施例技术方案的精神和范围。都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应所述以权利要求的保护范围为准。

14页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:一种基于大数据的信息收集分析系统

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!