一种查询数据表的方法和装置与流程

文档序号:16972847发布日期:2019-02-26 18:42阅读:146来源:国知局
一种查询数据表的方法和装置与流程
本发明涉及计算机
技术领域
,尤其涉及一种查询数据表的方法和装置。
背景技术
:在数据库中,通常设置有不止一个数据表,这些数据表之间不是相互独立的,不同的数据表之间需要建立关系,并根据关系对数据表进行关联,以便根据具体业务需求查询对应的数据。在数据库中,经常出现数据表关联的场景,需要对数据表内的数据进行查询,需要开发人员对这样的场景进行特别的处理,从而实现性能优化。现有技术中,通常采用将小数据表先放入内存中再进行关联的方式来优化查询数据表的速度。在实现本发明过程中,发明人发现现有技术中至少存在如下问题:虽然现有技术将小数据表放入内存中,但是在进行查询时仍然需要将大数据表中的记录与小数据表的记录逐条比对,因此在实质上并没有减少查询过程的系统资源占用,仍然存在系统资源占用过多的问题。技术实现要素:有鉴于此,本发明实施例提供一种查询数据表的方法和装置,能够降低查询数据表时的系统资源占用量。为实现上述目的,根据本发明实施例的一个方面,提供了一种查询数据表的方法,包括:将数据表的数据保存为基于键值对的关系项;根据获取到的关键字,在所述关系项中查询与所述关键字对应的数据。可选的,所述关键字包括数据表中的关联字段值和待查询字段名,所述关系项包括第一关系项和第二关系项;将数据表的数据保存为关系项的步骤包括:建立包含待查询字段名、待查询字段值及二者对应关系的第一关系项;建立包含关联字段值、所述第一关系项及二者对应关系的第二关系项。可选的,所述第一关系项为以所述待查询字段名为键、以所述待查询字段值为值的键值对。可选的,所述方法还包括:在根据获取到的关键字,在所述关系项中查询与所述关键字对应的数据的步骤前,将所述第二关系项以键值对的形式存储至内存中;所述键值对的键为所述关联字段值,所述键值对的值为所述第一关系项。可选的,在将所述第二关系项以键值对的形式存储至内存中时,所述键值对为hashmap键值对。可选的,所述关键字还包括数据表名,所述关系项还包括第三关系项;所述方法还包括:在建立包含关联字段值、所述第一关系项及二者对应关系的第二关系项的步骤后,建立包含数据表名、所述第二关系项及二者对应关系的第三关系项。可选的,所述数据表为数据仓库中的维度表。为实现上述目的,根据本发明实施例的另一个方面,提供了一种查询数据表的装置,包括:关系项模块,用于将数据表的数据保存为基于键值对的关系项;查询模块,用于根据获取到的关键字,在所述关系项中查询与所述关键字对应的数据。可选的,所述关键字包括数据表中的关联字段值和待查询字段名,所述关系项包括第一关系项和第二关系项;所述关系项模块还用于:建立包含待查询字段名、待查询字段值及二者对应关系的第一关系项;建立包含关联字段值、所述第一关系项及二者对应关系的第二关系项。可选的,所述第一关系项为以所述待查询字段名为键、以所述待查询字段值为值的键值对。可选的,所述装置还包括:转存模块,用于将所述第二关系项以键值对的形式存储至内存中;所述键值对的键为所述关联字段值,所述键值对的值为所述第一关系项。可选的,在将所述第二关系项以键值对的形式存储至内存中时,所述键值对为hashmap键值对。可选的,所述关键字还包括数据表名,所述关系项还包括第三关系项;所述关系项模块还用于:建立包含数据表名、所述第二关系项及二者对应关系的第三关系项。可选的,所述数据表为数据仓库中的维度表。为实现上述目的,根据本发明实施例的再一个方面,提供了一种查询数据表的电子设备,包括:一个或多个处理器;存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器至少实现:将数据表的数据保存为基于键值对的关系项;根据获取到的关键字,在所述关系项中查询与所述关键字对应的数据。为实现上述目的,根据本发明实施例的又一个方面,提供一种计算机可读介质,其上存储有计算机程序,所述程序被处理器执行时至少实现:将数据表的数据保存为基于键值对的关系项;根据获取到的关键字,在所述关系项中查询与所述关键字对应的数据。上述发明中的一个实施例具有如下优点或有益效果:因为采用将数据表的数据保存为基于键值对的关系项,以便在查询数据表时根据获取到的关键在在所述关系项中查询对应数据的技术手段,省略了查询数据表时逐条对比各项记录的步骤,而可以根据键值对的对应关系直接获取到相应数据,所以克服了现有的查询方法系统资源占用过多的技术问题,进而达到降低查询数据表时的系统资源占用量的技术效果。上述的非惯用的可选方式所具有的进一步效果将在下文中结合具体实施方式加以说明。附图说明附图用于更好地理解本发明,不构成对本发明的不当限定。其中:图1是根据本发明实施例的查询数据表的方法的主要步骤的示意图;图2是根据本发明实施例的查询数据表的方法中关系项在内存中的存储状态示意图;图3是根据本发明实施例的查询数据表的装置的主要模块的示意图;图4是本发明实施例可以应用于其中的示例性系统架构图;图5是适于用来实现本发明实施例的终端设备或服务器的计算机系统的结构示意图。具体实施方式以下结合附图对本发明的示范性实施例做出说明,其中包括本发明实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本发明的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。图1是根据本发明实施例的查询数据表的方法的主要步骤的示意图。如图1所示,根据本发明实施例提供的一种查询数据表的方法,包括:s10,将数据表的数据保存为基于键值对的关系项。通常数据表包括多个字段以及多条记录,其中的一个字段为关联字段,即在查询时用于与其他数据表的记录相互映射的字段;其他字段或其他字段中的一部分字段为待查询字段,用于存放待查询的目标数据。本步骤在保持数据表中的各条记录、各字段名、字段值之间原有对应关系的基础上,将其转化为基于键值对的关系项,例如以待查询字段名为键、待查询字段值为值建立键值对等。优选的,所述键值对为hashmap型键值对。s11,根据获取到的关键字,在所述关系项中查询与所述关键字对应的数据。在获取到关键字后,将关键字作为所述关系项中键值对的键,即可获取到对应的值,从而可以快速地取得待查询数据而无需将关键字和数据表的内容进行逐条对比。例如有第一数据表与第二数据表,需要根据第一数据表的内容,在第二数据表中查询对应的内容,基于现有技术的查询过程大致为:从第一数据表中选择某一字段,将每条记录该字段的值与第二数据表每条记录的关联字段的字段值逐条对比,若满足预设的匹配关系(通常匹配关系指二者相同),则确定查询到了第二数据表中的对应记录,可以进一步获取该记录中的待查询字段的数据。而根据本实施例提供的方法,可以将第二数据表中的关联字段值、待查询字段名和待查询字段值保存为基于键值对的关系项,在查询时可以直接根据键值对中的键值对应关系获取到对应的数据,无需逐条对比第二数据表的各条记录,从而减少了查询数据的耗时。相对于在数据表中通过外键相互关联的数据库而言,本发明实施例更加适用于数据表之间的对应关系较为模糊或者没有确定的对应关系的数据库,例如数据仓库等。从上面所述可以看出,本实施例提供的方法因为采用将数据表的数据保存为基于键值对的关系项,以便在查询数据表时根据获取到的关键在在所述关系项中查询对应数据的技术手段,省略了查询数据表时逐条对比各项记录的步骤,而可以根据键值对的对应关系直接获取到相应数据,所以克服了现有的查询方法系统资源占用过多的技术问题,进而达到降低查询数据表时的系统资源占用量的技术效果。在一些可选的实施例中,所述关键字包括数据表中的关联字段值和待查询字段名,所述关系项包括第一关系项和第二关系项;s10,将数据表的数据保存为关系项的步骤包括:建立包含待查询字段名、待查询字段值及二者对应关系的第一关系项。可选的,所述第一关系项为以所述待查询字段名为键、以所述待查询字段值为值的键值对。建立包含关联字段值、所述第一关系项及二者对应关系的第二关系项。本实施例建立了两组嵌套的关系项,其中第一关系项优选为以所述待查询字段名为键、以所述待查询字段值为值的键值对;第二关系项则用于记录关联字段值与所述第一关系项的对应关系。在获取到包含关联字段值和待查询字段名的关键字后,就可以在第二关系项中根据关联字段值获取对应的第一关系项,然后进一步根据待查询字段名在第一关系项中获取到对应的待查询字段值,完成查询过程。第二关系项的形式可以为键值对或者数据表等,为了进一步提高查询速度,可选的,在s11,根据获取到的关键字,在所述关系项中查询与所述关键字对应的数据的步骤前,将所述第二关系项以键值对的形式存储至内存中;所述键值对的键为所述关联字段值,所述键值对的值为所述第一关系项。所述键值对优选为hashmap键值对。将第二关系项存储至内存中,由于内存的存取速度高于数据库内的磁性存储介质(例如硬盘),因此有助于提高查询数据的速度。hashmap基于哈希表的map接口的实现,以key-value(键-值)的形式存在。在hashmap中,key-value总是会当做一个整体来处理,系统会根据hash算法来来计算key-value的存储位置,因此可以通过key快速地存、取value。因此,将第二关系项存储为hashmap键值对还可以进一步提高查询速度,存储时可以将第二关系项中的关联字段值作为hashmap键值对的key,将第一关系项作为hashmap键值对的value。当需要对多个数据表进行查询时,需要对多个数据表内的数据进行区分。基于此目的,在一些可选的实施例中,所述关键字还包括数据表名,所述关系项还包括第三关系项;所述方法还包括:在建立包含关联字段值、所述第一关系项及二者对应关系的第二关系项的步骤后,建立包含数据表名、所述第二关系项及二者对应关系的第三关系项。第三关系项的形式可以为键值对或者数据表等,当第三关系项为键值对时,可以以数据表名作为键,以第二关系项作为值。下面通过一个基于具体场景的实施例来进一步说明本实施例所述的查询方法的具体应用方式。本实施例所基于的数据库环境为数据仓库hive;作为基于分布式系统基础架构hadoop的一个数据仓库工具,hive支持将结构化的数据文件映射为一张数据库表,并提供简单的sql(structuredquerylanguage,结构化查询语言)查询功能。hive中的数据表包括事实表和维度表。事实表是用来存储业务主干内容的,可以理解为包含了业务的各项信息,因此通常容量很大;维度表则可以理解为通过某一特定角度(维度)观察业务,通常只包含业务中一些可以分为一类的属性,因此容量较小。而为了进一步获取更加全面的业务信息,经常会出现事实表与维度表进行关联的场景,因而需要进行性能优化。现有技术中的优化方法,通过调整hivesql的语法或者设置hive的属性,来实现将维度表加载至内存中后再进行查询。但是查询的原理仍然是根据事实表与维度表的关联字段,对维度表中的每一条记录进行逐条对比,因此执行查询任务时所占用的系统资源并没有减少。下面说明本发明中的查询数据表的方法应用于hive时的实现方式。1.建立分区表首先,建立一个分区表。较佳的,每个事实表对应于一个分区表,分区表中的每个分区存放有与该事实表对应的一个维度表的数据。分区表的各字段如表1所示:表1分区表字段说明注明:需要先将维度表的数据插入到分区表中对应的分区,其中维度表中需要关联的字段作为维度表中mapping_id字段的值;关联维度表后,维度表中待查询的字段名为mapping_column中map型键值对的键(key),待查询字段的值为mapping_column中map型键值对的值(value);mapping_type字段存储有维度表的名称,即mapping_type字段的值相同的各记录属于分区表中的同一分区。mapping_column的类型是map类型(例如hashmap),如果有多个字段要存取,只需要在map数据结构中多增加一个key-value即可,因此支持多个待查询字段的情况。比如事实表中有字段a,维度表中有字段a/b/c,通过字段a进行关联,待查询字段b和c,只需要把b和c都存放到mapping_column里即可。例如有一维度表“city”如表2所示:表2维度表citycity_idcity_namecity_size1beijing10002tianjin900可以看到维度表city中包含3个字段,共有2条记录。若将city_id字段作为关联字段,city_name和city_size字段作为待查询字段,则该维度表在分区表中对应的分区如表3所示:表3维度表city在分区表中的分区mapping_idmapping_columnmapping_type1{‘city_name’:’beijing’,’city_size’:1000}city2{‘city_name’:’tianjin’,’city_size’:900}city需要说明的是,表3中mapping_column字段内保存的数据实际应当为map类型的键值对,为了表述清楚,因此在表3中以普通键值对的形式予以体现,不应当理解为表3即为实际的分区内容。2.编写用户定义函数udf(userdefinedfunction,用于自定义函数)是hive提供的扩展函数内容,当hive提供的内置函数无法满足业务处理需要时,可以考虑使用用户自定义函数。在分区表建立完毕后,通过编写udf以实现以下查询步骤:步骤1,获取用于查询数据的关键字。关键字包括维度表名、关联字段值和待查询字段名,需要根据关键字查询对应的维度表中、指定关联字段值所在记录内的待查询字段的值。在编写udf时,可以将需要获取的关键字作为函数的参数。步骤2,根据关键字中的维度表名,使用文件流读取分区表中与该维度表对应分区下的数据到hashmap<string,map>中。其中hashmap的key为分区表中mapping_id字段的值,hashmap的value为分区表中mapping_column字段的map数据结构。可见,步骤s20将分区表的内容读取至内存中,并保存为hashmap的形式,即建立了两个层次的键值关系。图2是根据本发明实施例的查询数据表的方法中关系项在内存中的存储状态示意图。如图2所示,在本实施例中,将表2所示的city分区中的内容读入内存后,形成以分区中mapping_id字段的值作为key,以mapping_column字段的值作为value的hashmap型数据;同时,hashmap1的value又是以原维度表中的待查询字段名city_name和city_size分别作为key,以这两个字段的值作为value的hashmap型数据,从而将维度表中的数据以嵌套的hashmap型键值对的形式存储至内存中。步骤3,根据关键字中的关联字段值,从hashmap中得到以所述关联字段值作为key时,对应的value中的mapping_column字段的值。由于hashmap具备快速存取的特点,步骤s22执行的耗时很少,远低于常规数据表的查询耗时,可以节省大量的时间。步骤4,根据关键字中的待查询字段名,从mapping_column内的map数据结构中得到以所述待查询字段名作为key时,对应的value中的值作为最终查询到的数据并返回。在执行步骤1至步骤4时,可以根据现有的开发语言编写相应的函数进行实现,只要传递对应的关键字,即维度表名、关联字段值和待查询字段名作为参数即可。仍然参考图2所示,例如需要取得city_id为“1”时的city_name,可以传递参数:(‘city’,1,’city_name’),通过函数执行将维度表city在分区表中对应分区的数据读入内存中,然后分别以关联字段值“1”和待查询字段名city_name为key在内存中的hashmap型数据内进行检索,即可得到city_name所对应的值“beijing”。根据步骤1-4可以看出,本实施例根据分区将分区表中对应的数据加载到内存中,并且用key-value的形式存在hashmap中,因此在执行hivesql时,事实表(大表)中的每一条记录只需要从内存中根据传递的key去查找value,不需要启动额外的系统任务来和维度表(小表)进行关联就可以得到关联的数据。由于关联过程是在内存中根据key进行查找,而不是逐行匹配,所以关联的效率大大提高;由于不需要启动额外的系统任务,相比hive中自带的查询方式节省了集群资源。3.将用户自定义函数加入系统环境在创建完毕udf后,需要进一步将函数打包(例如打包为jar文件)后上传至系统环境中。在使用时,可以通过创建临时函数的方式进行调用,并通过临时函数的参数传入关键字,以实现对数据表的查询。图3是根据本发明实施例的查询数据表的装置的主要模块的示意图。如图所示,根据本实施例提供的查询数据表的装置300包括:关系项模块301,用于将数据表的数据保存为基于键值对的关系项;查询模块302,用于根据获取到的关键字,在所述关系项中查询与所述关键字对应的数据。在一些可选的实施例中,所述关键字包括数据表中的关联字段值和待查询字段名,所述关系项包括第一关系项和第二关系项;所述关系项模块301还用于:建立包含待查询字段名、待查询字段值及二者对应关系的第一关系项;建立包含关联字段值、所述第一关系项及二者对应关系的第二关系项。在一些可选的实施例中,所述第一关系项为以所述待查询字段名为键、以所述待查询字段值为值的键值对。在一些可选的实施例中,所述装置300还包括:转存模块303,用于将所述第二关系项以键值对的形式存储至内存中;所述键值对的键为所述关联字段值,所述键值对的值为所述第一关系项。在一些可选的实施例中,在将所述第二关系项以键值对的形式存储至内存中时,所述键值对为hashmap键值对。在一些可选的实施例中,所述关键字还包括数据表名,所述关系项还包括第三关系项;所述关系项模块301还用于:建立包含数据表名、所述第二关系项及二者对应关系的第三关系项。在一些可选的实施例中,所述数据表为数据仓库中的维度表。从上面所述可以看出,本实施例提供的装置因为采用将数据表的数据保存为基于键值对的关系项,以便在查询数据表时根据获取到的关键在在所述关系项中查询对应数据的技术手段,省略了查询数据表时逐条对比各项记录的步骤,而可以根据键值对的对应关系直接获取到相应数据,所以克服了现有的查询方法系统资源占用过多的技术问题,进而达到降低查询数据表时的系统资源占用量的技术效果。图4示出了可以应用本发明实施例的查询数据表的方法或查询数据表的装置的示例性系统架构400。如图4所示,系统架构400可以包括终端设备401、402、403,网络404和服务器405。网络404用以在终端设备401、402、403和服务器405之间提供通信链路的介质。网络404可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。用户可以使用终端设备401、402、403通过网络404与服务器405交互,以接收或发送消息等。终端设备401、402、403上可以安装有各种通讯客户端应用,例如购物类应用、网页浏览器应用、搜索类应用、即时通信工具、邮箱客户端、社交平台软件等(仅为示例)。终端设备401、402、403可以是具有显示屏并且支持网页浏览的各种电子设备,包括但不限于智能手机、平板电脑、膝上型便携计算机和台式计算机等等。服务器405可以是提供各种服务的服务器,例如对用户利用终端设备401、402、403执行数据查询时提供支持的数据服务器。需要说明的是,本发明实施例所提供的查询数据表的方法一般由服务器405执行,相应地,查询数据表的装置一般设置于服务器405中。应该理解,图4中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。根据本发明的实施例,本发明还提供了一种电子设备和一种可读存储介质。图5是适于用来实现本发明实施例的终端设备或服务器的计算机系统的结构示意图。下面参考图5,其示出了适于用来实现本发明实施例的终端设备的计算机系统500的结构示意图。图5示出的终端设备仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。如图5所示,计算机系统500包括中央处理单元(cpu)501,其可以根据存储在只读存储器(rom)502中的程序或者从存储部分508加载到随机访问存储器(ram)503中的程序而执行各种适当的动作和处理。在ram503中,还存储有系统500操作所需的各种程序和数据。cpu501、rom502以及ram503通过总线504彼此相连。输入/输出(i/o)接口505也连接至总线504。以下部件连接至i/o接口505:包括键盘、鼠标等的输入部分506;包括诸如阴极射线管(crt)、液晶显示器(lcd)等以及扬声器等的输出部分507;包括硬盘等的存储部分508;以及包括诸如lan卡、调制解调器等的网络接口卡的通信部分509。通信部分509经由诸如因特网的网络执行通信处理。驱动器510也根据需要连接至i/o接口505。可拆卸介质511,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器510上,以便于从其上读出的计算机程序根据需要被安装入存储部分508。特别地,根据本发明的实施例,上文主要步骤的示意图描述的过程可以被实现为计算机软件程序。例如,本发明的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行主要步骤的示意图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分509从网络上被下载和安装,和/或从可拆卸介质511被安装。在该计算机程序被中央处理单元(cpu)501执行时,执行本发明的系统中限定的上述功能。需要说明的是,本发明所示的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、光纤、便携式紧凑磁盘只读存储器(cd-rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本发明中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本发明中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、rf等等,或者上述的任意合适的组合。附图中的流程图和框图,图示了按照本发明各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。描述于本发明实施例中所涉及到的模块可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的模块也可以设置在处理器中,例如,可以描述为:一种处理器包括关系项模块301和查询模块302。其中,这些模块的名称在某种情况下并不构成对该模块本身的限定,例如,关系项模块301还可以被描述为“用于将数据表的数据保存为基于键值对的关系项的模块”。作为另一方面,本发明还提供了一种计算机可读介质,该计算机可读介质可以是上述实施例中描述的设备中所包含的;也可以是单独存在,而未装配入该设备中。上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被一个该设备执行时,使得该设备包括:将数据表的数据保存为基于键值对的关系项;根据获取到的关键字,在所述关系项中查询与所述关键字对应的数据。根据本发明实施例的技术方案,因为采用将数据表的数据保存为基于键值对的关系项,以便在查询数据表时根据获取到的关键在在所述关系项中查询对应数据的技术手段,省略了查询数据表时逐条对比各项记录的步骤,而可以根据键值对的对应关系直接获取到相应数据,所以克服了现有的查询方法系统资源占用过多的技术问题,进而达到降低查询数据表时的系统资源占用量的技术效果。上述具体实施方式,并不构成对本发明保护范围的限制。本领域技术人员应该明白的是,取决于设计要求和其他因素,可以发生各种各样的修改、组合、子组合和替代。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明保护范围之内。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1