CN112052239B - 数据封装方法、电子设备及存储介质 - Google Patents
数据封装方法、电子设备及存储介质 Download PDFInfo
- Publication number
- CN112052239B CN112052239B CN202010808522.XA CN202010808522A CN112052239B CN 112052239 B CN112052239 B CN 112052239B CN 202010808522 A CN202010808522 A CN 202010808522A CN 112052239 B CN112052239 B CN 112052239B
- Authority
- CN
- China
- Prior art keywords
- data
- metadata
- packaged
- format
- processed
- 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.)
- Active
Links
- 238000005538 encapsulation Methods 0.000 title claims abstract description 81
- 238000000034 method Methods 0.000 title claims abstract description 75
- 238000001914 filtration Methods 0.000 claims abstract description 51
- 238000006243 chemical reaction Methods 0.000 claims abstract description 30
- 238000004806 packaging method and process Methods 0.000 claims abstract description 29
- 235000010627 Phaseolus vulgaris Nutrition 0.000 claims description 42
- 244000046052 Phaseolus vulgaris Species 0.000 claims description 42
- 230000008569 process Effects 0.000 claims description 11
- 238000004590 computer program Methods 0.000 claims description 5
- 238000011161 development Methods 0.000 abstract description 14
- 238000012216 screening Methods 0.000 abstract 1
- 230000006870 function Effects 0.000 description 23
- 238000003491 array Methods 0.000 description 4
- 238000005516 engineering process Methods 0.000 description 4
- 238000012360 testing method Methods 0.000 description 3
- 238000013461 design Methods 0.000 description 2
- 238000013507 mapping Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000002093 peripheral effect Effects 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 1
- 238000007418 data mining Methods 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 238000002474 experimental method Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000010801 machine learning Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000012858 packaging process Methods 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
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/24—Querying
- G06F16/242—Query formulation
- G06F16/2433—Query languages
-
- 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
-
- 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/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/10—Text processing
- G06F40/12—Use of codes for handling textual entities
- G06F40/151—Transformation
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computational Linguistics (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Mathematical Physics (AREA)
- Software Systems (AREA)
- Health & Medical Sciences (AREA)
- Artificial Intelligence (AREA)
- Audiology, Speech & Language Pathology (AREA)
- General Health & Medical Sciences (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种数据封装方法、电子设备及存储介质。通过根据待处理数据的属性确定需要封装成的数据对象的数据格式,在根据预设的元数据名和过滤条件从待处理数据对应的元数据中筛选出待封装元数据后,将元数据中指定的待处理数据以确定的数据格式对应的转换方式进行转换,获得待封装数据,最终将待封装数据和待封装元数据封装为能够使用SQL语句查询的数据对象,使开发人员只需使用SQL语句便可实现Spark的开发,无需对Spark原理与底层深入了解,从而减少了人力成本的投入,通过将不同数据格式的待处理数据进行不同的数据转换,使得到的数据对象能够适应各种作业情况,进而提高作业性能,减少资源的使用,降低硬件成本的投入。
Description
技术领域
本发明实施方式涉及大数据编程技术领域,特别涉及一种数据封装方法、电子设备及存储介质。
背景技术
Apache Spark是专为大规模分布式数据分布式内存计算而设计的快速通用的引擎。是由加州大学伯克利分校的AMP实验室提供的开源的类Hadoop MapReduce的通用并行框架。Spark由于MapReduce Job中间输出结果可以保存在内存中,从而不再需要读写HDFS(Hadoop Distributed File System,分布式文件系统),因此,Spark能更好地适用于数据挖掘与机器学习等需要迭代的MapReduce的算法。
但是,由于Spark开发的复杂性,目前在实现大数据Spark的开发时,开发人员需要深入了解Spark原理和底层技术,比如广播变量(broadcast)、RDD(ResilienntDistributed Datasets,弹性分布式数据集)算子等,这就需要投入大量的人力成本来培养专门的Spark开发人员。
发明内容
本发明实施方式的目的在于提供一种数据封装方法、电子设备及存储介质,旨在减少人力成本的投入,同时简化代码量,提升开发效率。
为解决上述技术问题,本发明的实施方式提供了一种数据封装方法,包括以下步骤:
根据预设的元数据名获取预先定义的待处理数据的元数据;
根据所述元数据和预设的过滤条件,得到待封装元数据;
根据所述待处理数据的属性,确定需要封装成的数据对象的数据格式;
将所述元数据中指定的待处理数据以所述数据格式对应的转换方式进行转换,得到待封装数据;
将所述待封装元数据和所述待封装数据封装在同一个数据对象中,得到所述数据格式的数据对象,所述数据对象供SQL语句查询。
本发明的实施方式还提供了一种电子设备,包括:
至少一个处理器;以及,
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行如上文所述的数据封装方法。
本发明的实施方式还提供了一种计算机可读存储介质,存储有计算机程序,所述计算机程序被处理器执行时实现如上文所述的数据封装方法。
本发明实施方式相对于现有技术而言,通过根据待处理数据的属性确定待处理数据需要封装成的数据对象的数据格式,从而在根据预设的元数据名确定待处理数据对应的元数据,根据预设的过滤条件从确定的元数据中筛选出待封装元数据后,能够将元数据中指定的待处理数据以确定的数据格式对应的转换方式进行转换,获得待封装数据,最终通过将获得的待封装数据和筛选出的待封装元数据封装为适合待处理数据的数据格式,且能够使用SQL语句查询的数据对象,使得开发人员只需使用SQL语句便可以实现大数据Spark的开发,无需对Spark原理与底层技术深入了解,从而有效减少了人力成本的投入。
此外,通过将不同数据格式的待处理数据进行不同的数据转换,从而使得封装获得的数据对象能够能够适应各种作业情况,进而提高作业性能,减少资源的使用,降低硬件成本的投入。
另外,所述根据所述待处理数据的属性,确定需要封装成的数据对象的数据格式,包括:
在所述待处理数据的属性标识所述待处理数据为配置数据时,确定需要封装成的数据对象的数据格式为简单实体对象Bean格式;
在所述待处理数据的属性标识所述待处理数据为源数据时,确定需要封装成的数据对象的数据格式为弹性分布式数据集RDD格式。
另外,在所述待处理数据为配置数据,所述数据格式为Bean格式时,所述将所述元数据中指定的待处理数据以所述数据格式对应的转换方式进行转换,得到待封装数据,包括:
将所述元数据中指定的配置数据以所述待封装元数据为过滤条件转换为结构化数组;
将所述结构化数组,作为所述待封装数据;
其中,所述将所述待封装元数据和所述待封装数据封装在同一个数据对象中,得到所述数据格式的数据对象,包括:
将所述待封装元数据和所述结构化数组封装在同一个数据对象中,得到Bean格式的数据对象。
另外,在所述将所述待封装元数据和所述结构化数组封装在同一个数据对象中,得到Bean格式的数据对象之前,所述方法还包:
生成唯一索引空间和非唯一索引空间,所述唯一索引空间和所述非唯一索引空间用于存储SQL查询过程中生成的索引;
其中,所述将所述待封装元数据和所述结构化数组封装在同一个数据对象中,得到Bean格式的数据对象,包括:
将所述待封装元数据、所述结构化数组、所述唯一索引空间和所述非唯一索引空间封装在同一个数据对象中,得到Bean格式的数据对象。
另外,所述元数据包括:配置数据的路径和配置数据的文件名;
所述将所述元数据中指定的配置数据以所述待封装元数据为过滤条件转换为结构化数组,包括:
根据所述元数据中记录的所述配置数据的路径和所述配置数据的文件名,确定记录所述配置数据的配置数据文件;
以行为单位,读取所述配置数据文件中记录的所述配置数据,并对读取的每行所述配置数据进行分隔,得到字符串数组;
根据所述待封装元数,将所述字符串数组转换为结构化数组。
另外,在所述待处理数据为源数据,所述数据格式为RDD格式时,所述将所述元数据中指定的待处理数据以所述数据格式对应的转换方式进行转换,得到待封装数据,包括:
将所述元数据中指定的源数据标记为弹性分布式数据集字符串类型对象;
将所述弹性分布式数据集字符串类型对象以所述待封装元数据为过滤条件转换为弹性分布式数据集结构化类型对象;
将所述待封装元数据和所述弹性分布式数据集结构化类型对象转换为Dataset<Row>对象;
将所述弹性分布式数据集结构化类型对象和所述Dataset<Row>对象,作为待封装数据;
其中,所述将所述待封装元数据和所述待封装数据封装在同一个数据对象中,得到所述数据格式的数据对象,包括:
将所述待封装元数据、所述弹性分布式数据集结构化类型对象和所述Dataset<Row>对象封装在同一个数据对象中,得到RDD格式的数据对象。
另外,在所述将所述弹性分布式数据集字符串类型对象以所述待封装元数据为过滤条件转换为弹性分布式数据集结构化类型对象之前,所述方法还包括:
将所述待封装元数据转换为schema;
所述将所述弹性分布式数据集字符串类型对象以所述待封装元数据为过滤条件转换为弹性分布式数据集结构化类型对象,包括:
将所述弹性分布式数据集字符串类型对象以所述schema为过滤条件转换为弹性分布式数据集结构化类型对象;
所述将所述待封装元数据、所述弹性分布式数据集结构化类型对象和所述Dataset<Row>对象封装在同一个数据对象中,得到RDD格式的数据对象,包括:
将所述schema、所述弹性分布式数据集结构化类型对象和所述Dataset<Row>对象封装在同一个数据对象中,得到RDD格式的数据对象。
另外,所述元数据包括:源数据的路径和源数据的文件名;
所述将所述元数据中指定的源数据标记为弹性分布式数据集字符串类型对象,包括:
根据所述元数据中记录的所述源数据路径和所述源数据的文件名,确定记录所述源数据的源数据文件;
将所述源数据文件中的所述源数据标记为弹性分布式数据集字符串类型对象。
另外,所述弹性分布式数据集字符串类型对象包括针对Java编程语言的JavaRDD<String>对象;所述弹性分布式数据集结构化类型对象包括针对Java编程语言的JavaRDD<Row>对象。
另外,所述元数据存储在预设的管理数据库中,所述过滤条件为预设的列名;
所述根据所述元数据和预设的过滤条件,得到待封装元数据,包括:
根据预设的列名从所述管理数据库中获取所述待封装元数据。
另外,在所述将所述待封装元数据和所述待封装数据封装在同一个数据对象中,得到所述数据格式的数据对象之后,所述方法还包括:
根据预设的名称,对所述数据对象进行临时表注册。
另外,所述根据预设的名称,对所述数据对象进行临时表注册,包括:
在所述数据对象为RDD格式时,建立所述RDD格式的数据对象与预设的名称之间的第一对应关系;
在所述数据对象为Bean格式时,建立所述Bean格式的数据对象与预设的名称之间的第二对应关系。
另外,在所述建立所述Bean格式的数据对象与预设的名称之间的第二对应关系之后,所述方法还包括:
在接收到SQL语句时,对所述SQL语句进行解析,得到待查询Bean格式的数据对象的名称、索引生成条件和索引类型;
根据所述第二对应关系和所述名称,确定待查询Bean格式的数据对象;
根据所述索引生成条件生成索引;
在所述索引的类型为唯一索引类型时,将所述索引存储到所述唯一索引空间;
在所述索引的类型为非唯一索引类型时,将所述索引存储到所述非唯一索引空间。
另外,所述第一对应关系由Spark提供的接口进行管理,所述第二对应关系由自定义的接口进行管理。
附图说明
一个或多个实施方式通过与之对应的附图中的图片进行示例性说明,这些示例性说明并不构成对实施方式的限定,附图中具有相同参考数字标号的元件表示为类似的元件,除非有特别申明,附图中的图不构成比例限制。
图1是根据本发明第一实施方式的数据封装方法的具体流程图;
图2是根据本发明第二实施方式的数据封装方法的具体流程图;
图3是根据本发明第三实施方式的数据封装方法的具体流程图;
图4是根据本发明第四实施方式的数据封装方法的具体流程图;
图5是根据本发明第五实施方式的数据封装装置的结结构示意图;
图6是根据本发明第六实施方式的数据封装设备的结构示意图。
具体实施方式
为使本发明实施方式的目的、技术方案和优点更加清楚,下面将结合附图对本发明的各实施方式进行详细的阐述。然而,本领域的普通技术人员可以理解,在本发明各实施方式中,为了使读者更好地理解本申请而提出了许多技术细节。但是,即使没有这些技术细节和基于以下各实施方式的种种变化和修改,也可以实现本申请所要求保护的技术方案。以下各个实施方式的划分是为了描述方便,不应对本发明的具体实现方式构成任何限定,各个实施方式在不矛盾的前提下可以相互结合相互引用。
本实施方式涉及一种数据封装方法,应用于电子设备,电子设备例如为个人计算机、平板电脑、智能手机等,此处不再一一列举,本实施方式对此也不做限制。
下面对本实施方式的数据封装方法的实现细节进行说明,以下内容仅为方便理解而提供的实现细节,并非实施本方案的必须。
本实施方式的具体流程如图1所示,具体包括以下步骤:
步骤101,根据预设的元数据名获取预先定义的待处理数据的元数据。
具体的说,本实施方式中所说的元数据是对待处理数据的表述。在实际应用中,元数据主要包括待处理数据的路径、文件名、列名、列类型、列描述信息、列默认值等,此处不再一一列举。
此外,应当理解的是,在实际应用中,为了快速定位,并获取预先定义的待处理数据的元数据,可以为每一个元数据分配一个用于标识其唯一性的名称,从而在获取预先定义的待处理数据的元数据时,直接根据预设的元数据名与从存储的各元数据的名称进行匹配,进而筛选出与用于输入的元数据名匹配的元数据。
为了便于说明,本实施方式以表的形式存储元数据中包含的列名、列类型、列描述信息、列默认值等信息。
相应的,用于标识元数据唯一性的名称即为表名。
相应的,预设的元数据名可以是由路径+时间+表名构成的,比如/var/data/2020-05-22/10:00:00.test。
基于上述描述可知,本实施方式中,表名是截取的元数据名的后缀,因而在元数据名为“/var/data/2020-05-22/10:00:00.test”时,最终基于该元数据名中的路径和截取的后缀,并可以找到存储在/var/data/2020-05-22/10:00:00,表名为“test”的元数据。
此外,关于元数据中包括的列名,在具体实现时,本领域技术人员可以将其按照MySQL中对列名的定义方式进行定义,比如设置列名=ID/NAME/AGE/......,即表示当前描述信息中包括的列有表示记录用户的标识号“ID”的,记录姓名“NAME”的,记录年龄“AGE”的。
此外,需要说明的是,在实际应用中,上述所说的预设的元数据名具体为用户,如开发人员在进行数据封装之前,根据需要预先存储到用于实现本实施方式提供的数据封装方法的电子设备的指定存储区域的,也可以是存储在与所述电子设备能够进行通信的其他电子设备中,还可以是在电子设备实现该数据封装方法的过程中,根据需要实时输入的,本实施方式对此不做限制。
为了便于理解元数据的具体形式,以下结合实例进行说明:
假设待处理数据中记录的内容为:
1,张三,23
2,李四,14
3,王五,89
则基于上述待处理数据,预先定义的元数据如表1所示:
表1待处理数据的元数据
列名 | 类型 | 是否允许空 | 默认值 |
ID | INT | N | 0 |
NAME | STRING | Y | |
AGE | INT | Y |
具体的,表1中的“ID”用于对应待处理数据中每个用户的标识号,如上述待处理数据中的1、2、3,“NAME”用于对应待处理数据中每个用户的姓名,如张三、李四、王五,“AGE”用于对应待处理数据中每一个用户的年龄,如23、14、89。并且规定了每一个列名的类型(即上述所说的列类型),如“ID”和“AGE”的类型均为整型INT,“NAME”的类型为字符串类型STRING,并且设置了哪些列可以为空“Y”,哪些列不能为空“N”(即列描述信息),以及是否需设置默认值(即列默认值)。
如表1所示,在表1中,默认值部分可以根据实际业务需要记录一些扩展内容,如表1中“ID”对应的默认值部分记录的是“0”;也可以不记录任何信息,如“NAME”、“AGE”对应的默认值部分。
应当理解的是,以上仅为举例说明,对本实施方式的技术方案并不构成任何限定,在实际应用中,本领域技术人员可以根据需要进行设置,本实施方式对此不做限制。
步骤102,根据所述元数据和预设的过滤条件,得到待封装元数据。
具体的说,在本实施方式中,所述过滤条件具体为预设的列名,如“ID,NAME”。
根据步骤101给出的元数据的实例(表1)可知,当接收到的预设的过滤条件为“ID,NAME”时,具体是表示将列名为“ID”和列名为“NAME”的两个列对应的信息(列名、类型、列描述信息、列默认值)从所述元数据中筛选出来,即得到的待封装元数据是与列名为“ID”和列名为“NAME”相关的信息。
为了便于理解,此处仍以表1给出的元数据进行举例,当接收到的预设的过滤条件为“ID,NAME”时,根据表1中记录的元数据和预设的过滤条件“ID,NAME”,得到的待处理数据如表2所示。
表2待封装元数据
列名 | 类型 | 是否允许空 | 默认值 |
ID | INT | N | 0 |
NAME | STRING | Y |
应当理解的是,以上仅为举例说明,对本实施方式的具体内容并不构成任何限制。
此外,上述所说的预设的列名与步骤101中所说的预设的元数据名类似,同样可以是预先存储在电子设备中的,也可以是在实现本实施方式中的数据封装方法时,根据业务需要实时输入的。
步骤103,根据所述待处理数据的属性,确定需要封装成的数据对象的数据格式。
具体的说,本实施方式中所说的待处理数据可能是源数据,也可能是配置数据,还可能是源数据+配置数据。
关于上述所说的源数据,即Raw数据,通常是实时产生的数据,例如用户访问网站的信息、用户的订单信息等。
配置数据,即Conf或Config文件中记载的数据,通常是指用户的性别、年龄、电话等时效性不强,更新频率低的属性信息。
也就是说,在所述待处理数据的属性信息中记录的标识信息为Raw数据,或者实时数据,即所述待处理数据的属性标识所述待处理数据为源数据时,确定需要封装成的数据对象的数据格式为简单实体对象Bean格式;在所述待处理数据的属性信息中记录的标识信息为配置数据,或者更新频率低,即所述待处理数据的属性标识所述待处理数据为配置数据时,确定需要封装成的数据对象的数据格式为弹性分布式数据集RDD格式。
步骤104,将所述元数据中指定的待处理数据以所述数据格式对应的转换方式进行转换,得到待封装数据。
具体的说,在待处理数据为配置数据,对应的数据格式为Bean格式时,最终将所述元数据中指定的配置数据以Bean格式对应的转换方式进行转换后,得到的待封装数据为结构化数组;在待处理数据为源数据,对应的数据格式为RDD格式时,最终将所述元数据中指定的源数据以RDD格式对应的转换方式进行转换后,得到的待封装数据为弹性分布式数据集结构化类型对象和Dataset<Row>对象。
也就是说,不论是源数据,还配置数据,最终均会转换为结构化类型对象,只是最终的结构化类型对象会因为待处理数据的不同,形式有所不同。
步骤105,将所述待封装元数据和所述待封装数据封装在同一个数据对象中,得到所述数据格式的数据对象。
具体的说,在所述待处理数据为配置数据时,上述步骤105是将所述待封装元数据和结构化数组封装在同一个数据对象中,从而获得Bean格式的数据对象。
相应地,在所述待处理数据为源数据时,上述步骤105是将所述待封装元数据、弹性分布式数据集结构化类型对象和Dataset<Row>对象封装在同一个数据对象中,从而获得RDD格式的数据对象。
进一步地,为了管理Bean格式的数据对象的索引,在将所述待封装元数据和所述结构化数组封装在同一个数据对象中,得到Bean格式的数据对象之前,还需要生成用于存储SQL查询过程中生成的索引的唯一索引空间和非唯一索引空间,然后将所述待封装元数据、所述结构化数组、所述唯一索引空间和所述非唯一索引空间封装在同一个数据对象中,得到Bean格式的数据对象。
此外,为了区分本实施方式中封装获得的RDD格式的数据对象与现有RDD数据对象,在实际应用中可以将基于上述方式封装获得的RDD格式的数据对象称为SmartRDD。
同理,为了区分本实施方式中封装获得的Bean格式的数据对象与现有Bean数据对象,在实际应用中可以将基于上述方式封装获得的Bean格式的数据对象称为SmartBean。
由于现有的RDD只是一个最基本的数据抽象,即只能按照系统提供的节点存储相应地数据;而基于本实施方式中给出的数据封装方法封装获得的SmartRDD,不仅存储了基于用户需求过滤出的待封装元数据,还存储了基于待封装元数据和弹性分布式数据集结构化类型对象,以及Dataset<Row>对象,实现了Spark开发中底层数据的映射问题,因而开发人员在实现大数据Spark的开发时,不需要关注底层,只需采用SQL语句进行查询,便可以获得需要的数据。
同样,基于本实施方式中给出的数据封装方法获得的SmartBean,由于其不仅存储了基于用户需求过滤出的待封装元数据,还存储了结构化数组。同时,基于上述方式封装获得的SmartBean中预先分配了唯一索引空间和非唯一索引空间,从而在使用SQL语句进行查询时,能够接收到的SQL语句实现自动索引、自动广播,从而大大提高了Spark作业的性能,尽可能减少了设备资源的消耗,节省了设备成本。
此外,值得的一提的是,在实际应用中,为了方便开发人员使用,在完成上述步骤105之后,还需要对所述数据对象进行临时表注册,以得到唯一标识所述数据对象的名称,即给封装获得的新的数据对象起一个能够标识其唯一性的名称,从而在实现大数据Spark的开发时,开发人员可以根据名称快速定位需要进行SQL查询的数据对象,进而使用SQL语句从确定的数据对象中快速、准确的获取到需要查找的数据。
关于上述所说的对所述数据对象进行临时表注册操作,具体是根据预设的名称对所述数据对象进行临时表注册。
进一步地,在实际应用中,如果所述数据对象为RDD格式,即所述数据对象为SmartRDD,则进行的临时表注册操作具体为:建立所述RDD格式的数据对象与预设的名称之间的第一对应关系。
需要说明的是,由于RDD格式的数据对象中具体包括Dataset<Row>对象,故而在本实施方式中,在所述数据对象为SmartRDD时,进行的临时表注册操作具体为:建立所述RDD格式的数据对象中的Dataset<Row>对象与预设的名称之间的第一对应关系。
相应地,如果所述数据对象为Bean格式,即所述数据对象为SmartBean,则进行的临时表注册操作具体为:建立所述Bean格式的数据对象与预设的名称之间的第二对应关系。
应当理解的是,上述所说的“第一”、“第二”仅仅是为了区分建立的对应关系是针对SmartRDD的,还是针对SmartBean的,对这两种数据对象对应的对应关系本身不构成限定。
此外,值得一提的是,由于SmartBean中封装的是更新频率较低的配置数据,因而为了实现对SmartBean的复用,即使同一个SmartBean能够被不同业务使用,避免重复开发,从而提高开发效率,可以提供自定义的接口来管理第二对应关系,及SmartBean本身。
例如,在接收到SQL语句时,通过对所述SQL语句进行解析,从而获得待查询SmartBean的名称、索引生成条件和索引类型;然后,根据所述第二对应关系和所述名称,确定待查询SmartBean;接着,根据所述索引生成条件生成索引;接着,在所述索引的类型为唯一索引类型时,将所述索引存储到所述唯一索引空间;在所述索引的类型为非唯一索引类型时,将所述索引存储到所述非唯一索引空间。
需要说明的是,在实际应用中,上述所说的索引生成条件具体是根据SQL语句中“where”条件所在位置后的内容确定的,所说索引类型可以是用户输入的。
为了便于理解,以下举例说明:
比如说,用户输入的SQL语句为“select id,name from table where id='123',type='O'”,则表示待查询的SmartBean的名称是“table”,“id='123'”则表示索引生成条件,根据该索引生成条件最终确定的索引为“id”,“type='O'”则表示索引类型。
假设预先约定“type='O'”表示的索引类型为唯一索引类型,则根据上述SQL语句确定的索引“id”需要存储到唯一索引空间中。
应当理解的是,以上仅为举例说明,对本实施方式的具体技术方案并不构成限定,在实际应用中,本领域技术人员可以根据需要选择不同的标识信息来表示唯一索引类型和非唯一索引类型,本实施方式对此不做限制。
此外,由于SmartRDD中封装的是实时变化的数据,由于其数据量大,且更新频率快,因而不便于复用,为降低实现难度,SmartRDD对应的第一对应关系可以直接有Spark提供的接口进行管理,而无需另外封装自定义接口。
此外,值得一提的是,由于本实施方式封装得到的数据对象主要是为了方便开发人员实现大数据Spark的开发,因而在实际应用中使用的SQL查询语句可以为Spark提供的SparkSQL语句。由于本实施方式中封装的SmartRDD和SmartBean已经进行了自动注册,因而基于Spark提供的原生SparkSQL便可以方便、快速的实现对SmartRDD和SmartBean的使用。
进一步地,为了能够更好的提升Spark作业运行的性能,本实施方式通过基于自定义的SQL,为了便于区分以下称为SmartSQL,通过对其进行解析,进而基于SmartBean中的自动索引将封装获得的SmartRDD和SmartBean进行一对一或一对多关联,具体为基于两个对象中相同的内容作为关联参数,将二者关联起来,从而实现了将两个数据对象关联为一个数据对象,具体可以想象成将两张数据表关联为一张包含了两张数据表中内容的大表。
基于这一方式,在具体作业中,只需要对这一张大表进行操作即可,使得性能得到了显著提升(通过实验发现大概在10倍左右),从而可以大大减少使用的资源(CPU、IO、内存占用大大减少),进而减少应激成本的投入。
通过上述描述不难发现,本实施方式中提供的数据封装方法,通过根据待处理数据的属性确定待处理数据需要封装成的数据对象的数据格式,从而在根据预设的元数据名确定待处理数据对应的元数据,根据预设的过滤条件从确定的元数据中筛选出待封装元数据后,能够将元数据中指定的待处理数据以确定的数据格式对应的转换方式进行转换,获得待封装数据,最终通过将获得的待封装数据和筛选出的待封装元数据封装为适合待处理数据的数据格式,且能够使用SQL语句查询的数据对象,使得开发人员只需使用SQL语句便可以实现大数据Spark的开发,无需对Spark原理与底层技术深入了解,从而有效减少了人力成本的投入。
此外,通过将不同数据格式的待处理数据进行不同的数据转换,从而使得封装获得的数据对象能够更好的适应实际开发需求。
此外,由于基于上述数据封装方式,在实际应用中可以通过代码的复用,按需获取数据,从而有效提高了代码复用率,进而提升了开发效率。
本发明的第二实施方式涉及一种数据封装方法。第二实施方式主要是基于待处理数据是源数据时,数据封装的具体实现方式。
如图2所示,第二实施方式涉及的数据封装方法,包括如下步骤:
步骤201,根据预设的元数据名获取预先定义的源数据的元数据。
步骤202,根据所述元数据和预设的过滤条件,得到待封装元数据。
不难发现,本实施方式中的步骤201和步骤202与第一实施方式中的步骤101和步骤102大致相同,在此就不再赘述。
步骤203,将所述元数据中指定的源数据标记为弹性分布式数据集字符串类型对象。
通过第一实施方式的述描述可知,所述元数据包括待处理数据的路径和文件名,在本实施方式中具体为源数据的路径和源数据的文件名。因而在将所述元数据中指定的源数据标记为弹性分布式数据集字符串类型对象时,具体是根据所述元数据中记录的所述源数据路径和所述源数据的文件名,确定记录所述源数据的源数据文件,然后将所述源数据文件中的所述源数据标记为弹性分布式数据集字符串类型对象。
为了便于理解上述所说的弹性分布式数据集字符串类型对象,本实施方式以Java编程语言为例,则上述所说的弹性分布式数据集字符串类型对象具体为针对Java编程语言的JavaRDD<String>对象。
也就是说,在实际应用中,弹性分布式数据集字符串类型对象对应的具体格式,是基于编程语言的不同而命名的,本实施方式对此不做限制,本领域技术人员可以根据需要进行设置。
步骤204,将所述弹性分布式数据集字符串类型对象以所述待封装元数据为过滤条件转换为弹性分布式数据集结构化类型对象。
仍以本实施方式提供的数据封装方法为针对Java编程语言的为例进行说明,在弹性分布式数据集字符串类型对象为JavaRDD<String>对象时,上述转换得到的弹性分布式数据集结构化类型对象也为针对Java编程语言的,即在本实施方式中,上述转换得到的弹性分布式数据集结构化类型对象具体为针对Java编程语言的JavaRDD<Row>对象。
此外,通过第一实施方式的描述可知,元数据中还包括待处理数据的列的相关信息,如列名、列类型、列描述信息、列默认值等,本实施方式具体为源数据的列的相关信息。因而在将JavaRDD<String>对象以所述待封装元数据为过滤条件,具体为预设的列名转换为JavaRDD<Row>对象时,具体是根据预设的列名和源数据的列名、列类型、列描述信息、列默认值等列的相关信息进行转换,比如基于用于输入的列名,从JavaRDD<String>对象中查找到当前列名对应的所有相关信息,并将其以Row的形式进行标记,进而得到JavaRDD<Row>对象。
应当理解的是,由于JavaRDD<String>对象与JavaRDD<Row>对象均为通用的对象,故而关于这两种对象的使用,以及相互之间的转换本领域技术人员可以自行查阅相关资料实现,本实施方式不再赘述。
此外,值得一提的是,在实际应用中,在执行上述步骤204之前,还可以先将待封装元数据转换为schema格式。
相应的,在将所述弹性分布式数据集字符串类型对象,如针对Java编程语言的JavaRDD<String>对象以所述待封装元数据为过滤条件转换为弹性分布式数据集结构化类型对象,如针对Java编程语言的JavaRDD<Row>对象时,具体是将JavaRDD<String>对象以schema为过滤条件转换为JavaRDD<Row>对象。
步骤205,将所述待封装元数据和所述弹性分布式数据集结构化类型对象对象转换为Dataset<Row>对象。
即转换得到的Dataset<Row>对象记载了待封装元数据和弹性分布式数据集结构化类型对象之间的关系。
步骤206,将所述待封装元数据、所述弹性分布式数据集结构化类型对象和所述Dataset<Row>对象封装在同一个数据对象中,得到RDD格式的数据对象。
通过上述描述可知,由于待封装元数据可以转回为schema,因而步骤206中的操作,具体可以是:将所述schema、所述弹性分布式数据集结构化类型对象和所述Dataset<Row>对象封装在同一个数据对象中,得到弹性分布式数据集RDD格式的数据对象。
此外,需要说明的是,在本实施方式中,不论JavaRDD<String>对象,JavaRDD<Row>对象,还是Dataset<Row>对象,都是用于存储其对应的数据的标记,而非数据本身。
通过上述描述不难发现,本实施方式中提供的数据封装方法,通过根据源数据对应的元数据将源数据标记为弹性分布式数据集字符串类型对象,根据预设的过滤条件从元数据中过滤出待封装元数据,然后将弹性分布式数据集字符串类型对象以待封装元数为过滤条件转换为弹性分布式数据集结构化类型对象,将待封装元数据和弹性分布式数据集结构化类型对象转换为Dataset<Row>对象,将得到的待封装元数据、弹性分布式数据集结构化类型对象、Dataset<Row>对象封装为一个能够使用SQL语句查询的RDD格式的数据对象,使得开发人员只需使用SQL语句便可以实现大数据Spark的开发,无需对Spark原理与底层技术深入了解,从而有效减少了人力成本的投入。
本发明的第三实施方式涉及一种数据封装方法。第三实施方式主要是基于待处理数据是配置数据时,数据封装的具体实现方式。
如图3所示,第三实施方式涉及的数据封装方法,包括如下步骤:
步骤301,根据预设的元数据名获取预先定义的配置数据的元数据。
步骤302,根据所述元数据和预设的过滤条件,得到待封装元数据。
不难发现,本实施方式中的步骤301和步骤302与第一实施方式中的步骤101和步骤102大致相同,在此就不再赘述。
步骤303,将所述元数据中指定的配置数据以所述待封装元数据为过滤条件转换为结构化数组。
通过第一实施方式的述描述可知,所述元数据包括待处理数据的路径和文件名,在本实施方式中具体为配置数据的路径和配置数据的文件名。因而在将所述元数据中指定的配置数据以所述待封装元数据为过滤条件转换为结构化数组时,具体是先根据所述元数据中记录的所述配置数据的路径和所述配置数据的文件名,确定记录所述配置数据的配置数据文件;然后,以行为单位,读取所述配置数据文件中记录的所述配置数据,并对读取的每行所述配置数据进行分隔,得到字符串数组;最后,根据所述待封装元数,将所述字符串数组转换为结构化数组。
关于上述所说的对读取的每行所述配置数据进行分隔的操作,在实际应用中可以是根据用户输入的分隔符进行分隔,也可以是根据系统默认的分隔符进行风格,本领域技术人员可以根据需要进行设置,本实施方式对此不做限制。
此外,值得一提的是,由于在实际应用中预定义的元数据中通常会包括多个列的列信息,因而为了便于管理,可以将这些列存储到一个集合中,以便根据用户输入的列名从中查找出满足条件的待封装元数据。
相应地,在实际应用中,如果筛选出的待封装元数据包括多个列的列信息,为了方便管理,同样可以将待封装元数据中的列存储到一个集合中。
步骤304,将所述待封装元数据和所述结构化数组封装在同一个数据对象中,得到Bean格式的数据对象。
通过上述描述不难发现,本实施方式提供的数据封装方法,通过将更新频率低的配置数据封装为SmartBean,并提供自定义的接口来管理SmartBean,从而实现了对SmartBean的复用,即使同一个SmartBean能够被不同业务使用,避免重复开发,从而提高开发效率。
此外,由于SmartBean和SmartRDD均存储了基于相同过滤条件筛选出的待封装元数据,从而实现了SmartBean与SmartRDD的一对一关联,在不增加Spark作业的情况下,尽可能减少了对设备资源的消耗,节省了设备成本。
本发明的第四实施方式涉及一种数据封装方法。第四实施方式在第一实施方式的基础上做了进一步改进,具体改进之处为:预先将元数据存储在管理数据库中,从而可以通过复用已有的元数据,实现对不存在元数据的待处理数据进行封装。
如图4所示,第四实施方式涉及的数据封装方法,包括如下步骤:
步骤401,在管理数据库中存储待处理数据对应的元数据。
具体的说,本实施方式中所说的管理数据库实质就是一个自定义的元数据管理器MetaManager。
在本实施方式中,为了实现对没有元数据的待处理数据(通常为文件系统中的文件,可能是源数据,也可能是配置数据)的封装,通过将已经完成对元数据定义的待处理数据对应的不同元数据存储到MetaManager中,然后根据这些已有元数据包括的信息,如列名、列类型、列描述信息、列默认值在MetaManager中进行注册,从而针对任意待处理数据,在过滤其对应的待封装元数据时,只需根据预设的列名在MetaManager中进行获取即可。
步骤402,根据预设的元数据名从管理数据库中获取预先定义的待处理数据的元数据。
步骤403,根据所述元数据和预设的过滤条件,得到待封装元数据。
通过第一实施方式的描述可知,过滤条件可以为预设的列名,故而在根据所述源数据和预设的过滤条件,得到待封装数据时,具体是根据预设的列名从所述管理数据库中获取所述待封装元数据。
步骤403,根据所述待处理数据的属性,确定需要封装成的数据对象的数据格式。
步骤405,将所述元数据中指定的待处理数据以所述数据格式对应的转换方式进行转换,得到待封装数据。
步骤406将所述待封装元数据和所述待封装数据封装在同一个数据对象中,得到所述数据格式的数据对象,所述数据对象供SQL语句查询。
不难发现,本实施方式中的步骤402至步骤406与第一实施方式中的步骤101至步骤105大致相同,在此就不再赘述。
为了更好的理解本实施方式中提供的数据封装方法,以下以待处理数据为源数据为例,结合实例进行说明:
在进行数据封装之前,首先根据已有元数据在MetaManager中进行注册,从而实现将元数据存储在MetaManager中。
然后,根据用于输入的元数据名定位MetaManager中存储的待处理数据对应的元数据。
接着,根据预设的过滤条件,具体为列名,从MetaManager中获取匹配的列信息,得到待封装元数据。
比如说,在MetaManager中,元数据定义了表3给出的内容:
表3 MetaManager中注册的元数据
/>
关于上述各元数据定义的含义详见第一实施方式对表1的解释,本实施方式不再赘述。
假设与表3给出的元数据定义对应的待处理数据内容为:
1,张三,23
2,李四,14
3,王五,89
当预设的列名为“ID,NAME”时,则从表3中过滤出的元数据定义如表4所示。
表4基于预设的列名过滤出的元数据
列名 | 类型 | 是否允许空 | 默认值 | 说明 |
ID | INT | N | 0 | |
NAME | STRING | Y |
接着,基于上述过滤出的元数据,读取待处理数据,得到“1,张三”、“2,李四”、“3,王五”,即最终需要标记为JavaRDD<String>对象的数据,并将读取出的数据标记为JavaRDD<String>对象。
接着,在得到JavaRDD<String>对象之后,将JavaRDD<String>对象以过滤出的元数据为过滤条件进行过滤,并将过滤出的数据转换为JavaRDD<Row>对象。
接着,将过滤出的元数据,即待处理数据和转换获得的JavaRDD<Row>对象转换为Dataset<Row>对象。
最后,将获取到的待封装元数据、JavaRDD<Row>对象,以及Dataset<Row>对象封装在同一个数据对象中,具体为封装为一个SmartRDD对象,同时对SmartRDD注册为TempView,即对封装获得的数据对象进行临时表注册,从而得到能够唯一标识封装获得的数据对象的名称。
应当理解的是,以上是以待处理数据为源数据时,基于MetaManager中注册的元数据进行数据封装的具体实现流程,若待处理数据是配置数据,则是以行单位,读取的“1,张三,23”、“2,李四,14”、“3,王五,89”这三行数据,并采用预设分隔符将这三行数据进行分隔后以字符串数组的格式进行存储。
为了便于理解,以下举例说明:
比如说,在配置数据只有上述三行数据时,可以定义一个一个长度为3的字符串数组,如:String[]str=new String[3]。
接着,读取到的上述三行配置数据写入字符串数组,具体可以是:String[]s=newString[]{"1,张三,23","2,李四,14","3,王五,89"}。
接着,将根据所述待封装元数,将所述字符串数组转换为结构化数组。
由于字符串数组和结构化数组均为通用数组,故而关于这两种数组的使用,以及相互之间的转换本领域技术人员可以自行查阅相关资料实现,本实施方式不再赘述。
此外,值得一提的是,本实施方式提供的数据封装方法,由于封装获得的数据对象解决了底层数据的映射问题,因而对待处理数据的原始存储类型不做任何限制,即可以适配各种存储系统比如MySQL、Clickhouse、fs、Hdfs、甚至各种接口(如http),从各种存储系统中获取存储的待处理数据。
为了方便开发人员从各种存储系统中获取待处理数据,同时可以直接对获取到的待处理数据按照上述数据封装过程完成封装,可以预先定义针对不同存储系统的数据获取接口,同时将上述数据封装的流程在该接口中实现,为了便于理解,以下举例说明:
比如说,为了对文件中的源数据进行上述封装,本实施方式提供了SmartRDDgetSmartRDDFromTextRDD(tableAlias,columns,options,javaRDD)函数接口。
具体的说,在该函数接口中“tableAlias”参数表示最终封装获得的SmartRDD的名称,“columns”参数表示需要从文件中读取的列名,“options”参数表示读取数据时的扩展选择,比如一次如何处理,“javaRDD”参数表示从文件中读取的标识源数据的JavaRDD<String>对象。
还比如说,为对Hdfs中存储的源数据进行封装,本实施方式提了SmartRDDgetSmartRDDFromHdfs(tableAlias,table,columns,options)函数接口。
具体的说,在该函数接口中“tableAlias”参数表示最终封装获得的SmartRDD的名称,“table”参数表示读取的源数据名称,“columns”参数表示需要从文件中读取的列名,“options”参数表示读取数据时的扩展选择,比如一次如何处理。
还比如说,为对MySQL中存储的源数据进行封装,本实施方式提了SmartRDDgetSmartRDDFromMysql(tableAlias,sql,options)函数接口。
具体的说,在该函数接口中“tableAlias”参数表示最终封装获得的SmartRDD的名称,“sql”参数表示读取MySQL数据库的sql语句,“options”参数表示读取数据时的扩展选择,比如一次如何处理。
还比如说,为对Clickhouse中存储的源数据进行封装,本实施方式提了SmartRDDgetSmartRDDFromClickhouse(tableAlias,sql,options)函数接口。
具体的说,在该函数接口中“tableAlias”参数表示最终封装获得的SmartRDD的名称,“sql”参数表示读取Clickhouse数据库的sql语句,“options”参数表示读取数据时的扩展选择,比如一次如何处理。
此外,值得一提的是,上述各函数接口的返回值,均为封装获得的SmartRDD的名称。
针对SmartBean的封装,具体提供的接口如下:
比如说,为了对文件中的配置数据进行上述封装,本实施方式提供了SmartBeangetSmartBeanFromText(tableAlias,columns,options,content)函数接口。
具体的说,在该函数接口中“tableAlias”参数表示最终封装获得的SmartBean的名称,“columns”参数表示需要从文件中读取的列名,“options”参数表示读取数据时的扩展选择,比如一次如何处理,“content”参数表示从文件中读取的具体配置数据。
还比如说,为对Hdfs中存储的配置数据进行封装,本实施方式提了SmartBeangetSmartBeanFromHdfs(tableAlias,table,columns,options)函数接口。
具体的说,在该函数接口中“tableAlias”参数表示最终封装获得的SmartBean的名称,“table”参数表示读取的配置数据名称,“columns”参数表示需要从文件中读取的列名,“options”参数表示读取数据时的扩展选择,比如一次如何处理。
还比如说,为对MySQL中存储的源数据进行封装,本实施方式提了SmartBeangetSmartBeanFromMysql(tableAlias,sql,options)函数接口。
具体的说,在该函数接口中“tableAlias”参数表示最终封装获得的SmartBean的名称,“sql”参数表示读取MySQL数据库的sql语句,“options”参数表示读取数据时的扩展选择,比如一次如何处理。
还比如说,为对Clickhouse中存储的源数据进行封装,本实施方式提了SmartBeangetSmartBeanFromClickhouse(tableAlias,sql,options)函数接口。
具体的说,在该函数接口中“tableAlias”参数表示最终封装获得的SmartBean的名称,“sql”参数表示读取Clickhouse数据库的sql语句,“options”参数表示读取数据时的扩展选择,比如一次如何处理。
此外,值得一提的是,上述各函数接口的返回值,均为封装获得的SmartBean的名称。
应当理解的是,以上给出的仅为几种具体的函数接口格式,在实际应用中,本领域技术人员可以基于使用的编程语言的编译习惯,进行适应性调整,本实施方式对此不做限制。
通过上述描述不难发现,本实施方式提供的数据封装方法,通过将在MetaManager中存储元数据,即根据现有元数据在MetaManager中进行注册,利用MetaManager管理所有没有元数据的待处理数据,如文件系统中文件,基于其提供的函数接口便可以将文件中的信息转换为元数据,进而完成上述数据封装,得到包含有待封装元数据和待封装数据的数据对象。
此外,值得一提的是,为了进一步方便实际开发过程,在基于上述数据封装方法,得到封装的数据对象之后,还可以根据业务需要将经常使用的数据与上述数据对象进行关联,或者基于上述数据对象定义各种函数接口,以提高窗口函数的支持,从而进一步简化SQL编程。
上面各种方法的步骤划分,只是为了描述清楚,实现时可以合并为一个步骤或者对某些步骤进行拆分,分解为多个步骤,只要包括相同的逻辑关系,都在本专利的保护范围内;对算法中或者流程中添加无关紧要的修改或者引入无关紧要的设计,但不改变其算法和流程的核心设计都在该专利的保护范围内。
本发明第五实施方式涉及一种数据封装装置,如图5所示,包括:获取模块501、过滤模块502、确定模块503、转换模块504和封装模块505。
其中,获取模块501,用于根据预设的元数据名获取预先定义的待处理数据的元数据;过滤模块502,用于根据所述元数据和预设的过滤条件,得到待封装元数据;确定模块503,用于根据所述待处理数据的属性,确定需要封装成的数据对象的数据格式;转换模块504,用于将所述元数据中指定的待处理数据以所述数据格式对应的转换方式进行转换,得到待封装数据;封装模块505,用于将所述待封装元数据和所述待封装数据封装在同一个数据对象中,得到所述数据格式的数据对象,所述数据对象供SQL语句查询。
此外,在另一个例子中,所述数据类型包括简单实体对象Bean格式和弹性分布式数据集RDD格式。
相应地,所述确定模块503具体用于在所述待处理数据的属性标识所述待处理数据为配置数据时,确定需要封装成的数据对象的数据格式为简单实体对象Bean格式;在所述待处理数据的属性标识所述待处理数据为源数据时,确定需要封装成的数据对象的数据格式为弹性分布式数据集RDD格式。
此外,在另一个例子中,在所述待处理数据为配置数据,所述数据格式为Bean格式时,所述转换模块504具体用于将所述元数据中指定的配置数据以所述待封装元数据为过滤条件转换为结构化数组;将所述结构化数组,作为所述待封装数据。
相应地,所述封装模块505具体用于将所述待封装元数据和所述结构化数组封装在同一个数据对象中,得到Bean格式的数据对象。
此外,在另一个例子中,所述数据封装装置还包括索引空间生成模块。
具体而言,所述索引空间生成模块,用于生成唯一索引空间和非唯一索引空间,所述唯一索引空间和所述非唯一索引空间用于存储SQL查询过程中生成的索引。
相应地,所述封装模块505具体用于将所述待封装元数据、所述结构化数组、所述唯一索引空间和所述非唯一索引空间封装在同一个数据对象中,得到Bean格式的数据对象。
此外,在另一个例子中,所述元数据包括:配置数据的路径和配置数据的文件名。
相应地,所述转换模块504具体用于根据所述元数据中记录的所述配置数据的路径和所述配置数据的文件名,确定记录所述配置数据的配置数据文件;以行为单位,读取所述配置数据文件中记录的所述配置数据,并对读取的每行所述配置数据进行分隔,得到字符串数组;根据所述待封装元数,将所述字符串数组转换为结构化数组。
此外,在另一个例子中,在所述待处理数据为源数据,所述数据格式为RDD格式时,所述转换模块504具体用于将所述元数据中指定的源数据标记为弹性分布式数据集字符串类型对象;将所述弹性分布式数据集字符串类型对象以所述待封装元数据为过滤条件转换为弹性分布式数据集结构化类型对象;将所述待封装元数据和所述弹性分布式数据集结构化类型对象转换为Dataset<Row>对象;将所述弹性分布式数据集结构化类型对象和所述Dataset<Row>对象,作为待封装数据。
相应地,所述封装模块505具体用于将所述待封装元数据、所述弹性分布式数据集结构化类型对象和所述Dataset<Row>对象封装在同一个数据对象中,得到RDD格式的数据对象。
此外,在另一个例子中,所述数据封装装置还包括第二转换模块。
具体而言,所述第二转换模块,用于将所述待封装元数据转换为schema。
相应地,所述转换模块504具体用于将所述弹性分布式数据集字符串类型对象以所述schema为过滤条件转换为弹性分布式数据集结构化类型对象。
所述封装模块505具体用于将所述schema、所述弹性分布式数据集结构化类型对象和所述Dataset<Row>对象封装在同一个数据对象中,得到RDD格式的数据对象。
此外,在另一例子中,所述元数据包括:源数据的路径和源数据的文件名。
相应地,所述转换模块504具体用于根据所述元数据中记录的所述源数据路径和所述源数据的文件名,确定记录所述源数据的源数据文件;将所述源数据文件中的所述源数据标记为弹性分布式数据集字符串类型对象。
此外,在另一个例子中,所述弹性分布式数据集字符串类型对象包括针对Java编程语言的JavaRDD<String>对象;所述弹性分布式数据集结构化类型对象包括针对Java编程语言的JavaRDD<Row>对象。
此外,在另一个例子中,所述元数据存储在预设的管理数据库中,所述过滤条件为预设的列名。
相应地,所述过滤模块502具体用于根据预设的列名从所述管理数据库中获取所述待封装元数据。
此外,在另一个例子中,所述数据封装装置还包括注册模块。
具体而言,所述注册模块,用于根据预设的名称,对所述数据对象进行临时表注册。
此外,在另一个例子中,在所述数据对象为RDD格式时,所述注册模块具体用于建立所述RDD格式的数据对象与预设的名称之间的第一对应关系;在所述数据对象为Bean格式时,所述注册模块具体用于建立所述Bean格式的数据对象与预设的名称之间的第二对应关系。
需要说明的是,由于RDD格式的数据对象中具体包括Dataset<Row>对象,故而在本实施方式中,在所述数据对象为RDD格式时,进行的临时表注册操作具体为:建立所述RDD格式的数据对象中的Dataset<Row>对象与预设的名称之间的第一对应关系。
此外,在另一个例子中,所述数据封装模块还包括索引分配模块。
具体而言,所述索引分配模块,用于在接收到SQL语句时,对所述SQL语句进行解析,得到待查询Bean格式的数据对象的名称、索引生成条件和索引类型;根据所述第二对应关系和所述名称,确定待查询Bean格式的数据对象;根据所述索引生成条件生成索引;在所述索引的类型为唯一索引类型时,将所述索引存储到所述唯一索引空间;在所述索引的类型为非唯一索引类型时,将所述索引存储到所述非唯一索引空间。
此外,在另一例子中,所述第一对应关系由Spark提供的接口进行管理,所述第二对应关系由自定义的接口进行管理。
不难发现,本实施方式为与第一,或第二,或第三实施方式相对应的装置实施方式,本实施方式可与第一,或第二,或第三实施方式互相配合实施。第一,或第二,或第三实施方式中提到的相关技术细节在本实施方式中依然有效,为了减少重复,这里不再赘述。相应地,本实施方式中提到的相关技术细节也可应用在第一,或第二,或第三实施方式中。
值得一提的是,本实施方式中所涉及到的各模块均为逻辑模块,在实际应用中,一个逻辑单元可以是一个物理单元,也可以是一个物理单元的一部分,还可以以多个物理单元的组合实现。此外,为了突出本发明的创新部分,本实施方式中并没有将与解决本发明所提出的技术问题关系不太密切的单元引入,但这并不表明本实施方式中不存在其它的单元。
本发明第六实施方式涉及一种电子设备,如图6所示,包括至少一个处理器601;以及,与所述至少一个处理器601通信连接的存储器602;其中,所述存储器602存储有可被所述至少一个处理器601执行的指令,所述指令被所述至少一个处理器601执行,以使所述至少一个处理器601能够执行上述第一或第二实施方式所描述的数据封装方法。
其中,存储器602和处理器601采用总线方式连接,总线可以包括任意数量的互联的总线和桥,总线将一个或多个处理器601和存储器602的各种电路连接在一起。总线还可以将诸如外围设备、稳压器和功率管理电路等之类的各种其他电路连接在一起,这些都是本领域所公知的,因此,本文不再对其进行进一步描述。总线接口在总线和收发机之间提供接口。收发机可以是一个元件,也可以是多个元件,比如多个接收器和发送器,提供用于在传输介质上与各种其他装置通信的单元。经处理器601处理的数据通过天线在无线介质上进行传输,进一步,天线还接收数据并将数据传送给处理器601。
处理器601负责管理总线和通常的处理,还可以提供各种功能,包括定时,外围接口,电压调节、电源管理以及其他控制功能。而存储器602可以被用于存储处理器601在执行操作时所使用的数据。
本发明第七实施方式涉及一种计算机可读存储介质,存储有计算机程序。计算机程序被处理器执行时实现上述数据封装方法实施方式。
即,本领域技术人员可以理解,实现上述实施方式方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序存储在一个存储介质中,包括若干指令用以使得一个设备(可以是单片机,芯片等)或处理器(processor)执行本申请各个实施方式所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
本领域的普通技术人员可以理解,上述各实施方式是实现本发明的具体实施方式,而在实际应用中,可以在形式上和细节上对其作各种改变,而不偏离本发明的精神和范围。
Claims (15)
1.一种数据封装方法,其特征在于,包括:
根据预设的元数据名获取预先定义的待处理数据的元数据;
根据所述元数据和预设的过滤条件,得到待封装元数据;
根据所述待处理数据的属性,确定需要封装成的数据对象的数据格式;
将所述元数据中指定的待处理数据以所述数据格式对应的转换方式进行转换,得到待封装数据;
将所述待封装元数据和所述待封装数据封装在同一个数据对象中,得到所述数据格式的数据对象,所述数据对象供SQL语句查询;
其中,所述根据所述待处理数据的属性,确定需要封装成的数据对象的数据格式,包括:
在所述待处理数据的属性标识所述待处理数据为配置数据时,确定需要封装成的数据对象的数据格式为简单实体对象Bean格式;
在所述待处理数据的属性标识所述待处理数据为源数据时,确定需要封装成的数据对象的数据格式为弹性分布式数据集RDD格式;
在所述待处理数据的属性标识所述待处理数据为配置数据时,所述待封装数据为结构化数组;
在所述待处理数据的属性标识所述待处理数据为源数据时,所述待封装数据为弹性分布式数据集结构化类型对象和Dataset<Row>对象。
2.根据权利要求1所述的数据封装方法,其特征在于,在所述待处理数据为配置数据,所述数据格式为Bean格式时,所述将所述元数据中指定的待处理数据以所述数据格式对应的转换方式进行转换,得到待封装数据,包括:
将所述元数据中指定的配置数据以所述待封装元数据为过滤条件转换为结构化数组;
将所述结构化数组,作为所述待封装数据;
其中,所述将所述待封装元数据和所述待封装数据封装在同一个数据对象中,得到所述数据格式的数据对象,包括:
将所述待封装元数据和所述结构化数组封装在同一个数据对象中,得到Bean格式的数据对象。
3.根据权利要求2所述的数据封装方法,其特征在于,在所述将所述待封装元数据和所述结构化数组封装在同一个数据对象中,得到Bean格式的数据对象之前,所述方法还包:
生成唯一索引空间和非唯一索引空间,所述唯一索引空间和所述非唯一索引空间用于存储SQL查询过程中生成的索引;
其中,所述将所述待封装元数据和所述结构化数组封装在同一个数据对象中,得到Bean格式的数据对象,包括:
将所述待封装元数据、所述结构化数组、所述唯一索引空间和所述非唯一索引空间封装在同一个数据对象中,得到Bean格式的数据对象。
4.根据权利要求2所述的数据封装方法,其特征在于,所述元数据包括:配置数据的路径和配置数据的文件名;
所述将所述元数据中指定的配置数据以所述待封装元数据为过滤条件转换为结构化数组,包括:
根据所述元数据中记录的所述配置数据的路径和所述配置数据的文件名,确定记录所述配置数据的配置数据文件;
以行为单位,读取所述配置数据文件中记录的所述配置数据,并对读取的每行所述配置数据进行分隔,得到字符串数组;
根据所述待封装元数,将所述字符串数组转换为结构化数组。
5.根据权利要求1所述的数据封装方法,其特征在于,在所述待处理数据为源数据,所述数据格式为RDD格式时,所述将所述元数据中指定的待处理数据以所述数据格式对应的转换方式进行转换,得到待封装数据,包括:
将所述元数据中指定的源数据标记为弹性分布式数据集字符串类型对象;
将所述弹性分布式数据集字符串类型对象以所述待封装元数据为过滤条件转换为弹性分布式数据集结构化类型对象;
将所述待封装元数据和所述弹性分布式数据集结构化类型对象转换为Dataset<Row>对象;
将所述弹性分布式数据集结构化类型对象和所述Dataset<Row>对象,作为待封装数据;
其中,所述将所述待封装元数据和所述待封装数据封装在同一个数据对象中,得到所述数据格式的数据对象,包括:
将所述待封装元数据、所述弹性分布式数据集结构化类型对象和所述Dataset<Row>对象封装在同一个数据对象中,得到RDD格式的数据对象。
6.根据权利要求5所述的数据封装方法,其特征在于,在所述将所述弹性分布式数据集字符串类型对象以所述待封装元数据为过滤条件转换为弹性分布式数据集结构化类型对象之前,所述方法还包括:
将所述待封装元数据转换为schema;
所述将所述弹性分布式数据集字符串类型对象以所述待封装元数据为过滤条件转换为弹性分布式数据集结构化类型对象,包括:
将所述弹性分布式数据集字符串类型对象以所述schema为过滤条件转换为弹性分布式数据集结构化类型对象;
所述将所述待封装元数据、所述弹性分布式数据集结构化类型对象和所述Dataset<Row>对象封装在同一个数据对象中,得到RDD格式的数据对象,包括:
将所述schema、所述弹性分布式数据集结构化类型对象和所述Dataset<Row>对象封装在同一个数据对象中,得到RDD格式的数据对象。
7.根据权利要求5所述的数据封装方法,其特征在于,所述元数据包括:源数据的路径和源数据的文件名;
所述将所述元数据中指定的源数据标记为弹性分布式数据集字符串类型对象,包括:
根据所述元数据中记录的所述源数据路径和所述源数据的文件名,确定记录所述源数据的源数据文件;
将所述源数据文件中的所述源数据标记为弹性分布式数据集字符串类型对象。
8.根据权利要求5所述的数据封装方法,其特征在于,所述弹性分布式数据集字符串类型对象包括针对Java编程语言的JavaRDD<String>对象;所述弹性分布式数据集结构化类型对象包括针对Java编程语言的JavaRDD<Row>对象。
9.根据权利要求1至8任一项所述的数据封装方法,其特征在于,所述元数据存储在预设的管理数据库中,所述过滤条件为预设的列名;
所述根据所述元数据和预设的过滤条件,得到待封装元数据,包括:
根据预设的列名从所述管理数据库中获取所述待封装元数据。
10.根据权利要求3所述的数据封装方法,其特征在于,在所述将所述待封装元数据和所述待封装数据封装在同一个数据对象中,得到所述数据格式的数据对象之后,所述方法还包括:
根据预设的名称,对所述数据对象进行临时表注册。
11.根据权利要求10所述的数据封装方法,其特征在于,所述根据预设的名称,对所述数据对象进行临时表注册,包括:
在所述数据对象为RDD格式时,建立所述RDD格式的数据对象与预设的名称之间的第一对应关系;
在所述数据对象为Bean格式时,建立所述Bean格式的数据对象与预设的名称之间的第二对应关系。
12.根据权利要求11所述的数据封装方法,其特征在于,在所述建立所述Bean格式的数据对象与预设的名称之间的第二对应关系之后,所述方法还包括:
在接收到SQL语句时,对所述SQL语句进行解析,得到待查询Bean格式的数据对象的名称、索引生成条件和索引类型;
根据所述第二对应关系和所述名称,确定待查询Bean格式的数据对象;
根据所述索引生成条件生成索引;
在所述索引的类型为唯一索引类型时,将所述索引存储到所述唯一索引空间;
在所述索引的类型为非唯一索引类型时,将所述索引存储到所述非唯一索引空间。
13.根据权利要求11所述的数据封装方法,其特征在于,所述第一对应关系由Spark提供的接口进行管理,所述第二对应关系由自定义的接口进行管理。
14.一种电子设备,其特征在于,包括:
至少一个处理器;以及,
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行如权利要求1至13中任一项所述的数据封装方法。
15.一种计算机可读存储介质,存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至13中任一项所述的数据封装方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010808522.XA CN112052239B (zh) | 2020-08-12 | 2020-08-12 | 数据封装方法、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010808522.XA CN112052239B (zh) | 2020-08-12 | 2020-08-12 | 数据封装方法、电子设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112052239A CN112052239A (zh) | 2020-12-08 |
CN112052239B true CN112052239B (zh) | 2024-02-27 |
Family
ID=73601500
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010808522.XA Active CN112052239B (zh) | 2020-08-12 | 2020-08-12 | 数据封装方法、电子设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112052239B (zh) |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107480202A (zh) * | 2017-07-18 | 2017-12-15 | 湖南大学 | 一种用于多并行处理框架的数据处理方法及装置 |
CN109542889A (zh) * | 2018-10-11 | 2019-03-29 | 平安科技(深圳)有限公司 | 流式数据列存储方法、装置、设备和存储介质 |
CN111259066A (zh) * | 2020-01-17 | 2020-06-09 | 苏州思必驰信息科技有限公司 | 服务器集群数据同步方法及装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20190034496A1 (en) * | 2017-07-27 | 2019-01-31 | Citrix Systems, Inc. | Abstract Query Processing Using Metadata on Multiple Complex Data Sources |
-
2020
- 2020-08-12 CN CN202010808522.XA patent/CN112052239B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107480202A (zh) * | 2017-07-18 | 2017-12-15 | 湖南大学 | 一种用于多并行处理框架的数据处理方法及装置 |
CN109542889A (zh) * | 2018-10-11 | 2019-03-29 | 平安科技(深圳)有限公司 | 流式数据列存储方法、装置、设备和存储介质 |
CN111259066A (zh) * | 2020-01-17 | 2020-06-09 | 苏州思必驰信息科技有限公司 | 服务器集群数据同步方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN112052239A (zh) | 2020-12-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
RU2671044C1 (ru) | Способ и устройство для сохранения данных | |
CN114625732B (zh) | 基于结构化查询语言sql的查询方法和系统 | |
CN111078702B (zh) | 一种sql语句分类管理及统一查询方法和装置 | |
CN108121542B (zh) | 一种基于MyBatis的SQL语句的配置方法、系统 | |
CN104361221A (zh) | 基于异构系统数据映射模板的医疗数据采集系统及方法 | |
CN110866029B (zh) | sql语句构建方法、装置、服务器及可读存储介质 | |
CN114691786A (zh) | 数据血缘关系的确定方法及装置、存储介质、电子装置 | |
CN112949276A (zh) | 报表生成方法、装置、电子设备及存储介质 | |
CN111125220B (zh) | 信息自定义导出方法及装置 | |
WO2020139079A1 (en) | System and method for analyzing heterogeneous data by utilizing data virtualization components | |
CN111159215B (zh) | Java类与关系型数据库的映射方法、装置及计算设备 | |
CN116011400A (zh) | 一种项目标准测试文档自动化生成方法及装置 | |
EP4024263A1 (en) | Method for dynamic maintenance of a knowledge graph, terminal device and storage medium | |
CN110955714A (zh) | 一种将非结构化文本转化为结构化文本的方法及装置 | |
US20160026708A1 (en) | Selection of data storage settings for an application | |
CN113468204A (zh) | 一种数据查询方法、装置、设备、介质 | |
CN107368500B (zh) | 数据抽取方法及系统 | |
CN103425779A (zh) | 数据的处理方法和装置 | |
CN112052254B (zh) | 数据封装方法、电子设备及存储介质 | |
CN113407565B (zh) | 跨库数据查询方法、装置和设备 | |
Prabhune et al. | MetaStore: an adaptive metadata management framework for heterogeneous metadata models | |
CN112182637A (zh) | 一种安全控制系统、方法、装置及存储介质 | |
CN105867886B (zh) | 一种写表格的方法及装置 | |
CN112052239B (zh) | 数据封装方法、电子设备及存储介质 | |
CN102456070B (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 |