一种数据表关联方法和装置与流程

文档序号:12719759阅读:218来源:国知局
一种数据表关联方法和装置与流程
本发明涉及数据处理技术,特别涉及一种数据表关联方法和装置。
背景技术
:在数据仓库进行数据清洗时,其中一种常用的清洗方式是数据表和数据表之间的关联,这种数据仓库中的数据表之间的关联可以称为join操作。参与join的数据表中通常具有相同的关联键(数据表之间关联时使用的连接字段),如果将关联键称为key,例如,其中一个数据表中存储该key与信息A的对应关系,另一个数据表中存储该Key与信息B的对应关系,在两者join时,可以根据关联键key,将对应相同key的信息A和信息B组合在一张新数据表中,该新数据表可以包含该key与对应的信息A、信息B。在join的过程中经常出现的一种情况是数据倾斜,数据倾斜即:参与join的数据表中,其中一个数据表包含大量的相同key值的数据记录,例如,某个用户登陆信息数据表中,记载有用户ID“123”这个用户分别在不同时间进行登陆的百万或千万条数据记录(例如,其中一条记录是“用户ID123——登陆时间2016.3.21”)。那么在数据仓库使用的分布式计算平台上处理该数据表与其他数据表的join操作时,通常计算时间会较长。技术实现要素:有鉴于此,本发明提供一种数据表关联方法和装置,以在存在数据倾斜的数据表之间关联时,提高数据表关联的效率。具体地,本发明是通过如下技术方案实现的:第一方面,提供一种数据表关联方法,该方法应用于对第一数据表和第二数据表进行关联;其中,所述第一数据表中包括:能够造成数据倾斜的倾斜数据以及所述倾斜数据之外的非倾斜数据,所述方法包括:由所述第一数据表中提取所述倾斜数据放入第一数据分表,并将所述非倾斜数据放入第二数据分表;由所述第二数据表中提取匹配关联所述第一数据分表的数据,放入第三数据分表;将所述第一数据分表和第三数据分表进行mapjoin得到第一关联表,将所述第二数据分表和所述第二数据表进行关联,得到第二关联表;将所述第一关联表和第二关联表进行组合,得到关联结果表,所述关联结果表为所述第一数据表和第二数据表关联的结果。第二方面,提供一种数据表关联装置,所述装置应用于对第一数据表和第二数据表进行关联;其中,所述第一数据表中包括:能够造成数据倾斜的倾斜数据以及所述倾斜数据之外的非倾斜数据,所述装置包括:表拆分单元,用于由所述第一数据表中提取所述倾斜数据放入第一数据分表,并将所述非倾斜数据放入第二数据分表;表提取单元,用于由所述第二数据表中提取匹配关联所述第一数据分表的数据,放入第三数据分表;表关联单元,用于将所述第一数据分表和第三数据分表进行mapjoin得到第一关联表,将所述第二数据分表和所述第二数据表进行关联,得到第二关联表;表组合单元,用于将所述第一关联表和第二关联表进行组合,得到关联结果表,所述关联结果表为所述第一数据表和第二数据表关联的结果。本发明实施例的数据表关联方法和装置,通过将包含倾斜数据的数据表进行拆分,将拆分后的倾斜数据与一小表进行mapjoin,并将剩余数据与另一表join,使得这两部分的数据表关联都不会受到倾斜数据的影响,提高了数据表关联的效率。附图说明图1为本发明实施例提供的数据表关联方法的流程图;图2为本发明实施例提供的数据表关联方法的原理示意图;图3为本发明实施例提供的数据表关联装置的结构示意图;图4为本发明实施例提供的数据表关联装置的结构示意图;图5为本发明实施例提供的数据表关联装置所在的处理设备的一种硬件结构图。具体实施方式数据仓库主要是为决策分析提供数据,所涉及的数据操作主要是数据查询,并且为了保证数据仓库提供数据的准确性,进入仓库的数据通常要经过数据清洗。数据表关联是数据仓库进行数据清洗时的一种常用方法,例如,在通过map/reduce分布式计算平台进行数据处理时,reduce阶段可以根据两个或更多的数据表中的关联键对这些表执行join(也称笛卡尔乘积),比如,数据仓库接收到一个数据查询请求,请求查询获取对应某个key的信息A和信息B,而信息A和信息B分别位于两个数据表中,那么可以根据Key对这两个数据表进行关联,得到一个包含key及对应的信息A和信息B的新数据表,返回给查询者。例如,reduce节点可以获取key相同的来自两个数据表的valuelist(表中可以是key与value的对应关系,比如,key是用户ID,value是该用户的登陆时间),对于同一个key,对这两个数据表中的数据进行join处理。当数据倾斜时,由于某一个key的条数比其他key多很多(有时是百倍或者千倍之多),这条key所在的reduce节点所处理的数据量比其他节点就大很多,从而导致reduce节点大部分执行完毕,但是有一个或者几个reduce节点运行很慢,迟迟运行不完,也使得整个数据表关联的处理时间延长。本申请实施例的数据表关联方法,旨在对存在数据倾斜问题的数据表进行关联时,提高数据表关联的效率,降低数据倾斜对关联处理时间的影响。图1示例了该数据表关联方法的流程,该方法可以由分布式计算平台执行。在如下图1所示的例子中,以对第一数据表和第二数据表进行关联join为例来说明(但是实际实施中该方法还可以应用于其他场景中的数据表的关联,并不局限于下面的例子),此外,还可以结合图2所示的原理示意图来描述该方法:例如,第一数据表可以是用户登陆信息表,参见如下的表1,示例了第一数据表的部分信息,包括了用户ID及该用户的登陆时间的对应关系,其中的用户ID可以称为关联键,数据表之间可以依据该关联键进行join。表1第一数据表用户ID登陆时间1232016.3.21··························1232016.3.242342016.3.263452016.3.27其中,在第一数据表中,用户ID“123”的数据记录达到了百万或千万条,并假设本例子中该用户ID“123”的数据属于“能够造成数据倾斜的倾斜数据”,而剩余的其他数据比如用户ID“234”和“345”的数据记录属于非倾斜数据,即不会造成数据倾斜。与第一数据表进行join的第二数据表,可以是一个用户名称的信息表,例如参见如下的表2所示,包含了用户ID和用户名称。表2第二数据表用户ID用户名称123张三234李四345王五本次第一数据表和第二数据表之间的关联,即根据用户ID这个关联键,由第一数据表和第二数据表中找到与用户ID对应的登陆时间和用户名称,生成一个类似表3所示的关联结果表,该关联结果表中包括了用户ID、以及与该用户ID对应的登陆时间和用户名称。表3关联结果表用户ID登陆时间用户名称1232016.3.21张三····································1232016.3.24张三2342016.3.26李四3452016.3.27王五下面将结合上述的例子,描述本申请的数据表关联方法的过程:在步骤101中,由第一数据表中提取倾斜数据放入第一数据分表,并将非倾斜数据放入第二数据分表。本步骤中,将第一数据表进行了拆分,可以分别称为第一数据分表和第二数据分表。其中,第一数据分表中可以包括倾斜数据,例如表1中的用户ID“123”对应的百万或千万条的数据记录,第二数据分表中可以包括非倾斜数据,例如表1中的用户ID“123”之外的数据记录。如下示例一种对第一数据表拆分的方式:首先,由第一数据表中提取造成数据倾斜的至少一个关联键,将所述至少一个关联键放入关联键子表中。例如,可以统计第一数据表中的各个关联键的数量,将各个关联键按照数量由多到少的顺序排序。作为一示例,用户ID“123”在第一数据表中的重复次数即数量可以为1000000,用户ID“234”的数量可以为100000,用户ID“345”的数量可以为8000。根据统计的用户ID的数量由多到少排序,则为“123——234——345”的顺序。假设预先设定的关联键数量上限为1,即要从上面的排序中选择排在第一位的关联键用户ID“123”,作为造成数据倾斜的关联键。又例如,在其他例子中,如果第一数据表中包括的不同关联键的数量为十个,统计各个关联键的数量并排序后,将得到排序位数由第一排序位至第十排序位的一个排列顺序;如果预先设定的关联键数量上限为5,则表示要从该排序中选择前五个关联键,该前五个关联键是能造成数据倾斜的关联键。本例子的描述中,以选出一个关联键为例,如下的表4为关联键子表,造成数据倾斜的一个关联键在该表4中。表4关联键子表用户ID统计数量1231000000此外,预先设定的关联键数量上限的数值,可以是根据经验值或测试值确定。比如,可以在数据清洗遇到数据倾斜造成的处理时间超时,查看该情况下造成超时的关联键的重复次数是多少,假如是100万条,那就表明100万条记录将可能造成处理延时。那么在根据关联键的排序顺序中初始设定一个关联键数量上限比如为5,选择前五位的关联键,如果发现排序第五位的关联键的统计数量是8000,则表明该关联键数量上限设置不适合;如果将关联键数量上限更改2时,发现排序第二位的关联键统计数量是100万,则表明该上限数值设置合理,能够将造成数据倾斜的数据记录选择出来。当然,以上只是示例一种方式,也可以采用其他方式确定关联键数量上限,只要能将倾斜数据识别即可。其次,根据关联键子表,将第一数据表中匹配关联关联键子表的数据放入第一数据分表,将不能匹配关联关联键子表的数据放入第二数据分表。例如,在上述得到关联键子表后,可以将该关联键子表与第一数据表进行关联,例如可以进行两者的mapjoin,mapjoin是join方式的一种,可以将小表数据直接读取到内存中与另一表进行关联,可以极大提高生成关联结果的效率。本例子中的关联键子表如表4是一个小表,可以采用mapjoin。关联键子表与第一数据表进行关联时,能够匹配关联表4的数据放入第一数据分表,这里的“匹配关联”指的是将第一数据表中的关联键子表中的key对应的数据记录找出来,本例子中,第一数据分表包括用户ID“123”对应的数据记录;将不能匹配关联表4的数据放入第二数据分表,即用户ID“123”之外的数据记录。表5第一数据分表用户ID登陆时间1232016.3.21··························1232016.3.24表6第二数据分表用户ID登陆时间2342016.3.263452016.3.27上述通过关联键子表对第一数据表中的数据进行拆分的方式可以有多种,例如,一种方式可以是,将关联键子表与第一数据表进行第一次mapjoin,得到匹配关联关联键子表的数据,放入第一数据分表,即本次mapjoin得到的是能够关联上关联键子表的数据;可以将关联键子表与第一数据表进行第二次mapjoin,得到不能匹配关联关联键子表的数据放入第二数据分表。又例如,另一种方式可以是,将关联键子表与第一数据表进行一次mapjoin,通过本次mapjoin分别对匹配关联关联键子表的数据和不能匹配关联关联键子表的数据进行标识,即标识上某一数据是能够关联上关联键子表的数据,或者是不能关联上关联键子表的数据;根据上述标识,将匹配关联关联键子表的数据放入第一数据分表,将不能匹配关联关联键子表的数据放入第二数据分表。以上只是列举两种方式,实际实施中不局限于此,只要能够实现表5和表6的数据拆分即可。在步骤102中,由第二数据表中提取匹配关联第一数据分表的数据,放入第三数据分表。例如,可以将表4所示的关联键子表与表2所示的第二数据表进行mapjoin,得到在第二数据表中能够与关联键子表匹配关联的数据记录,将该数据记录放入第三数据分表。比如,在上述例子中,表4和表2关联得到表7,例如,表4中的key是用户ID“123”,那就将表2中的相同key即用户ID“123”对应的数据记录放入表7:表7第三数据分表用户ID用户名称123张三在步骤103中,将第一数据分表和第三数据分表进行mapjoin得到第一关联表,将第二数据分表和第二数据表进行join,得到第二关联表。本步骤中,第三数据分表是小表,可以将该第三数据分表与第一数据分表进行mapjoin,得到两者关联结果的第一关联表如表8:表8第一关联表用户ID登陆时间用户名称1232016.3.21张三·····································1232016.3.24张三第二数据分表和第二数据表进行join,得到的第二关联表,如下表9:表9第二关联表在步骤104中,将第一关联表和第二关联表进行组合,得到关联结果表,所述关联结果表为所述第一数据表和第二数据表关联的结果。本步骤中,可以将步骤103中得到的第一关联表和第二关联表进行组合,得到的关联结果表如上的表3所示。本例子的数据表关联方法,通过将含有倾斜数据的数据表进行拆分,将倾斜数据与一个匹配该数据的小表进行mapjoin,显著提升了这部分倾斜数据的关联处理效率,而另外的非倾斜数据在与数据表关联时,由于不再有倾斜数据的影响,处理过程也可以很快完成,上述两部分的处理速度都很快,从而提升了数据表关联的效率。为了实现上述方法,本申请实施例还提供了一种数据表关联装置,该装置应用于对第一数据表和第二数据表进行关联;其中,所述第一数据表中包括:能够造成数据倾斜的倾斜数据以及所述倾斜数据之外的非倾斜数据。如图3所示,该装置可以包括:表拆分单元31、表提取单元32、表关联单元33和表组合单元34。其中,表拆分单元31,用于由所述第一数据表中提取所述倾斜数据放入第一数据分表,并将所述非倾斜数据放入第二数据分表;表提取单元32,用于由所述第二数据表中提取匹配关联所述第一数据分表的数据,放入第三数据分表;表关联单元33,用于将第一数据分表和第三数据分表进行mapjoin得到第一关联表,将所述第二数据分表和所述第二数据表进行关联,得到第二关联表;表组合单元34,用于将所述第一关联表和第二关联表进行组合,得到关联结果表,所述关联结果表为所述第一数据表和第二数据表关联的结果。如图4所示,该装置中的表拆分单元31可以包括:键提取子单元311和表生成子单元312。键提取子单元311,用于由所述第一数据表中提取造成数据倾斜的至少一个关联键,将所述至少一个关联键放入关联键子表中;表生成子单元312,用于根据所述关联键子表,将所述第一数据表中匹配关联所述关联键子表的数据放入所述第一数据分表,将不能匹配关联所述关联键子表的数据放入所述第二数据分表。在另一例子中,键提取子单元311,在用于提取关联键时,包括:统计所述第一数据表中的各个关联键的数量,将各个关联键按照数量由多到少的顺序进行排序;根据预先设定的关联键数量上限,获取排序位数在所述关联键数量上限之内的至少一个关联键,作为所述造成数据倾斜的至少一个关联键。在另一例子中,表提取单元32,在用于生成第三数据分表时,包括:将所述关联键子表与所述第二数据表进行关联,将关联得到的所述第二数据表的数据放入所述第三数据分表。上述装置中各个单元的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本申请方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。本申请的数据表关联装置的实施例可以应用在处理设备上,该数据处理设备例如可以是数据仓库中进行数据处理所使用的计算设备。数据表关联装置实施例可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。如图5所示,为本申请数据表关联装置所在的处理设备的一种硬件结构图,以软件实现为例,作为一个逻辑意义上的装置,可以通过其所在的处理设备中的处理器51,将非易失性存储器53中对应的计算机程序指令读取到内存52中运行。该处理设备除了包括上述的各个组件和网络接口之外,通常还可以根据该处理设备的实际功能,可以包括其他功能组件,对此不再赘述。以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1