本發(fā)明涉及數(shù)據(jù)處理技術(shù),特別涉及一種數(shù)據(jù)表關(guān)聯(lián)方法和裝置。
背景技術(shù):
:在數(shù)據(jù)倉(cāng)庫(kù)進(jìn)行數(shù)據(jù)清洗時(shí),其中一種常用的清洗方式是數(shù)據(jù)表和數(shù)據(jù)表之間的關(guān)聯(lián),這種數(shù)據(jù)倉(cāng)庫(kù)中的數(shù)據(jù)表之間的關(guān)聯(lián)可以稱(chēng)為join操作。參與join的數(shù)據(jù)表中通常具有相同的關(guān)聯(lián)鍵(數(shù)據(jù)表之間關(guān)聯(lián)時(shí)使用的連接字段),如果將關(guān)聯(lián)鍵稱(chēng)為key,例如,其中一個(gè)數(shù)據(jù)表中存儲(chǔ)該key與信息A的對(duì)應(yīng)關(guān)系,另一個(gè)數(shù)據(jù)表中存儲(chǔ)該Key與信息B的對(duì)應(yīng)關(guān)系,在兩者join時(shí),可以根據(jù)關(guān)聯(lián)鍵key,將對(duì)應(yīng)相同key的信息A和信息B組合在一張新數(shù)據(jù)表中,該新數(shù)據(jù)表可以包含該key與對(duì)應(yīng)的信息A、信息B。在join的過(guò)程中經(jīng)常出現(xiàn)的一種情況是數(shù)據(jù)傾斜,數(shù)據(jù)傾斜即:參與join的數(shù)據(jù)表中,其中一個(gè)數(shù)據(jù)表包含大量的相同key值的數(shù)據(jù)記錄,例如,某個(gè)用戶(hù)登陸信息數(shù)據(jù)表中,記載有用戶(hù)ID“123”這個(gè)用戶(hù)分別在不同時(shí)間進(jìn)行登陸的百萬(wàn)或千萬(wàn)條數(shù)據(jù)記錄(例如,其中一條記錄是“用戶(hù)ID123——登陸時(shí)間2016.3.21”)。那么在數(shù)據(jù)倉(cāng)庫(kù)使用的分布式計(jì)算平臺(tái)上處理該數(shù)據(jù)表與其他數(shù)據(jù)表的join操作時(shí),通常計(jì)算時(shí)間會(huì)較長(zhǎng)。技術(shù)實(shí)現(xiàn)要素:有鑒于此,本發(fā)明提供一種數(shù)據(jù)表關(guān)聯(lián)方法和裝置,以在存在數(shù)據(jù)傾斜的數(shù)據(jù)表之間關(guān)聯(lián)時(shí),提高數(shù)據(jù)表關(guān)聯(lián)的效率。具體地,本發(fā)明是通過(guò)如下技術(shù)方案實(shí)現(xiàn)的:第一方面,提供一種數(shù)據(jù)表關(guān)聯(lián)方法,該方法應(yīng)用于對(duì)第一數(shù)據(jù)表和第二數(shù)據(jù)表進(jìn)行關(guān)聯(lián);其中,所述第一數(shù)據(jù)表中包括:能夠造成數(shù)據(jù)傾斜的傾斜數(shù)據(jù)以及所述傾斜數(shù)據(jù)之外的非傾斜數(shù)據(jù),所述方法包括:由所述第一數(shù)據(jù)表中提取所述傾斜數(shù)據(jù)放入第一數(shù)據(jù)分表,并將所述非傾斜數(shù)據(jù)放入第二數(shù)據(jù)分表;由所述第二數(shù)據(jù)表中提取匹配關(guān)聯(lián)所述第一數(shù)據(jù)分表的數(shù)據(jù),放入第三數(shù)據(jù)分表;將所述第一數(shù)據(jù)分表和第三數(shù)據(jù)分表進(jìn)行mapjoin得到第一關(guān)聯(lián)表,將所述第二數(shù)據(jù)分表和所述第二數(shù)據(jù)表進(jìn)行關(guān)聯(lián),得到第二關(guān)聯(lián)表;將所述第一關(guān)聯(lián)表和第二關(guān)聯(lián)表進(jìn)行組合,得到關(guān)聯(lián)結(jié)果表,所述關(guān)聯(lián)結(jié)果表為所述第一數(shù)據(jù)表和第二數(shù)據(jù)表關(guān)聯(lián)的結(jié)果。第二方面,提供一種數(shù)據(jù)表關(guān)聯(lián)裝置,所述裝置應(yīng)用于對(duì)第一數(shù)據(jù)表和第二數(shù)據(jù)表進(jìn)行關(guān)聯(lián);其中,所述第一數(shù)據(jù)表中包括:能夠造成數(shù)據(jù)傾斜的傾斜數(shù)據(jù)以及所述傾斜數(shù)據(jù)之外的非傾斜數(shù)據(jù),所述裝置包括:表拆分單元,用于由所述第一數(shù)據(jù)表中提取所述傾斜數(shù)據(jù)放入第一數(shù)據(jù)分表,并將所述非傾斜數(shù)據(jù)放入第二數(shù)據(jù)分表;表提取單元,用于由所述第二數(shù)據(jù)表中提取匹配關(guān)聯(lián)所述第一數(shù)據(jù)分表的數(shù)據(jù),放入第三數(shù)據(jù)分表;表關(guān)聯(lián)單元,用于將所述第一數(shù)據(jù)分表和第三數(shù)據(jù)分表進(jìn)行mapjoin得到第一關(guān)聯(lián)表,將所述第二數(shù)據(jù)分表和所述第二數(shù)據(jù)表進(jìn)行關(guān)聯(lián),得到第二關(guān)聯(lián)表;表組合單元,用于將所述第一關(guān)聯(lián)表和第二關(guān)聯(lián)表進(jìn)行組合,得到關(guān)聯(lián)結(jié)果表,所述關(guān)聯(lián)結(jié)果表為所述第一數(shù)據(jù)表和第二數(shù)據(jù)表關(guān)聯(lián)的結(jié)果。本發(fā)明實(shí)施例的數(shù)據(jù)表關(guān)聯(lián)方法和裝置,通過(guò)將包含傾斜數(shù)據(jù)的數(shù)據(jù)表進(jìn)行拆分,將拆分后的傾斜數(shù)據(jù)與一小表進(jìn)行mapjoin,并將剩余數(shù)據(jù)與另一表join,使得這兩部分的數(shù)據(jù)表關(guān)聯(lián)都不會(huì)受到傾斜數(shù)據(jù)的影響,提高了數(shù)據(jù)表關(guān)聯(lián)的效率。附圖說(shuō)明圖1為本發(fā)明實(shí)施例提供的數(shù)據(jù)表關(guān)聯(lián)方法的流程圖;圖2為本發(fā)明實(shí)施例提供的數(shù)據(jù)表關(guān)聯(lián)方法的原理示意圖;圖3為本發(fā)明實(shí)施例提供的數(shù)據(jù)表關(guān)聯(lián)裝置的結(jié)構(gòu)示意圖;圖4為本發(fā)明實(shí)施例提供的數(shù)據(jù)表關(guān)聯(lián)裝置的結(jié)構(gòu)示意圖;圖5為本發(fā)明實(shí)施例提供的數(shù)據(jù)表關(guān)聯(lián)裝置所在的處理設(shè)備的一種硬件結(jié)構(gòu)圖。具體實(shí)施方式數(shù)據(jù)倉(cāng)庫(kù)主要是為決策分析提供數(shù)據(jù),所涉及的數(shù)據(jù)操作主要是數(shù)據(jù)查詢(xún),并且為了保證數(shù)據(jù)倉(cāng)庫(kù)提供數(shù)據(jù)的準(zhǔn)確性,進(jìn)入倉(cāng)庫(kù)的數(shù)據(jù)通常要經(jīng)過(guò)數(shù)據(jù)清洗。數(shù)據(jù)表關(guān)聯(lián)是數(shù)據(jù)倉(cāng)庫(kù)進(jìn)行數(shù)據(jù)清洗時(shí)的一種常用方法,例如,在通過(guò)map/reduce分布式計(jì)算平臺(tái)進(jìn)行數(shù)據(jù)處理時(shí),reduce階段可以根據(jù)兩個(gè)或更多的數(shù)據(jù)表中的關(guān)聯(lián)鍵對(duì)這些表執(zhí)行join(也稱(chēng)笛卡爾乘積),比如,數(shù)據(jù)倉(cāng)庫(kù)接收到一個(gè)數(shù)據(jù)查詢(xún)請(qǐng)求,請(qǐng)求查詢(xún)獲取對(duì)應(yīng)某個(gè)key的信息A和信息B,而信息A和信息B分別位于兩個(gè)數(shù)據(jù)表中,那么可以根據(jù)Key對(duì)這兩個(gè)數(shù)據(jù)表進(jìn)行關(guān)聯(lián),得到一個(gè)包含key及對(duì)應(yīng)的信息A和信息B的新數(shù)據(jù)表,返回給查詢(xún)者。例如,reduce節(jié)點(diǎn)可以獲取key相同的來(lái)自?xún)蓚€(gè)數(shù)據(jù)表的valuelist(表中可以是key與value的對(duì)應(yīng)關(guān)系,比如,key是用戶(hù)ID,value是該用戶(hù)的登陸時(shí)間),對(duì)于同一個(gè)key,對(duì)這兩個(gè)數(shù)據(jù)表中的數(shù)據(jù)進(jìn)行join處理。當(dāng)數(shù)據(jù)傾斜時(shí),由于某一個(gè)key的條數(shù)比其他key多很多(有時(shí)是百倍或者千倍之多),這條key所在的reduce節(jié)點(diǎn)所處理的數(shù)據(jù)量比其他節(jié)點(diǎn)就大很多,從而導(dǎo)致reduce節(jié)點(diǎn)大部分執(zhí)行完畢,但是有一個(gè)或者幾個(gè)reduce節(jié)點(diǎn)運(yùn)行很慢,遲遲運(yùn)行不完,也使得整個(gè)數(shù)據(jù)表關(guān)聯(lián)的處理時(shí)間延長(zhǎng)。本申請(qǐng)實(shí)施例的數(shù)據(jù)表關(guān)聯(lián)方法,旨在對(duì)存在數(shù)據(jù)傾斜問(wèn)題的數(shù)據(jù)表進(jìn)行關(guān)聯(lián)時(shí),提高數(shù)據(jù)表關(guān)聯(lián)的效率,降低數(shù)據(jù)傾斜對(duì)關(guān)聯(lián)處理時(shí)間的影響。圖1示例了該數(shù)據(jù)表關(guān)聯(lián)方法的流程,該方法可以由分布式計(jì)算平臺(tái)執(zhí)行。在如下圖1所示的例子中,以對(duì)第一數(shù)據(jù)表和第二數(shù)據(jù)表進(jìn)行關(guān)聯(lián)join為例來(lái)說(shuō)明(但是實(shí)際實(shí)施中該方法還可以應(yīng)用于其他場(chǎng)景中的數(shù)據(jù)表的關(guān)聯(lián),并不局限于下面的例子),此外,還可以結(jié)合圖2所示的原理示意圖來(lái)描述該方法:例如,第一數(shù)據(jù)表可以是用戶(hù)登陸信息表,參見(jiàn)如下的表1,示例了第一數(shù)據(jù)表的部分信息,包括了用戶(hù)ID及該用戶(hù)的登陸時(shí)間的對(duì)應(yīng)關(guān)系,其中的用戶(hù)ID可以稱(chēng)為關(guān)聯(lián)鍵,數(shù)據(jù)表之間可以依據(jù)該關(guān)聯(lián)鍵進(jìn)行join。表1第一數(shù)據(jù)表用戶(hù)ID登陸時(shí)間1232016.3.21··························1232016.3.242342016.3.263452016.3.27其中,在第一數(shù)據(jù)表中,用戶(hù)ID“123”的數(shù)據(jù)記錄達(dá)到了百萬(wàn)或千萬(wàn)條,并假設(shè)本例子中該用戶(hù)ID“123”的數(shù)據(jù)屬于“能夠造成數(shù)據(jù)傾斜的傾斜數(shù)據(jù)”,而剩余的其他數(shù)據(jù)比如用戶(hù)ID“234”和“345”的數(shù)據(jù)記錄屬于非傾斜數(shù)據(jù),即不會(huì)造成數(shù)據(jù)傾斜。與第一數(shù)據(jù)表進(jìn)行join的第二數(shù)據(jù)表,可以是一個(gè)用戶(hù)名稱(chēng)的信息表,例如參見(jiàn)如下的表2所示,包含了用戶(hù)ID和用戶(hù)名稱(chēng)。表2第二數(shù)據(jù)表用戶(hù)ID用戶(hù)名稱(chēng)123張三234李四345王五本次第一數(shù)據(jù)表和第二數(shù)據(jù)表之間的關(guān)聯(lián),即根據(jù)用戶(hù)ID這個(gè)關(guān)聯(lián)鍵,由第一數(shù)據(jù)表和第二數(shù)據(jù)表中找到與用戶(hù)ID對(duì)應(yīng)的登陸時(shí)間和用戶(hù)名稱(chēng),生成一個(gè)類(lèi)似表3所示的關(guān)聯(lián)結(jié)果表,該關(guān)聯(lián)結(jié)果表中包括了用戶(hù)ID、以及與該用戶(hù)ID對(duì)應(yīng)的登陸時(shí)間和用戶(hù)名稱(chēng)。表3關(guān)聯(lián)結(jié)果表用戶(hù)ID登陸時(shí)間用戶(hù)名稱(chēng)1232016.3.21張三····································1232016.3.24張三2342016.3.26李四3452016.3.27王五下面將結(jié)合上述的例子,描述本申請(qǐng)的數(shù)據(jù)表關(guān)聯(lián)方法的過(guò)程:在步驟101中,由第一數(shù)據(jù)表中提取傾斜數(shù)據(jù)放入第一數(shù)據(jù)分表,并將非傾斜數(shù)據(jù)放入第二數(shù)據(jù)分表。本步驟中,將第一數(shù)據(jù)表進(jìn)行了拆分,可以分別稱(chēng)為第一數(shù)據(jù)分表和第二數(shù)據(jù)分表。其中,第一數(shù)據(jù)分表中可以包括傾斜數(shù)據(jù),例如表1中的用戶(hù)ID“123”對(duì)應(yīng)的百萬(wàn)或千萬(wàn)條的數(shù)據(jù)記錄,第二數(shù)據(jù)分表中可以包括非傾斜數(shù)據(jù),例如表1中的用戶(hù)ID“123”之外的數(shù)據(jù)記錄。如下示例一種對(duì)第一數(shù)據(jù)表拆分的方式:首先,由第一數(shù)據(jù)表中提取造成數(shù)據(jù)傾斜的至少一個(gè)關(guān)聯(lián)鍵,將所述至少一個(gè)關(guān)聯(lián)鍵放入關(guān)聯(lián)鍵子表中。例如,可以統(tǒng)計(jì)第一數(shù)據(jù)表中的各個(gè)關(guān)聯(lián)鍵的數(shù)量,將各個(gè)關(guān)聯(lián)鍵按照數(shù)量由多到少的順序排序。作為一示例,用戶(hù)ID“123”在第一數(shù)據(jù)表中的重復(fù)次數(shù)即數(shù)量可以為1000000,用戶(hù)ID“234”的數(shù)量可以為100000,用戶(hù)ID“345”的數(shù)量可以為8000。根據(jù)統(tǒng)計(jì)的用戶(hù)ID的數(shù)量由多到少排序,則為“123——234——345”的順序。假設(shè)預(yù)先設(shè)定的關(guān)聯(lián)鍵數(shù)量上限為1,即要從上面的排序中選擇排在第一位的關(guān)聯(lián)鍵用戶(hù)ID“123”,作為造成數(shù)據(jù)傾斜的關(guān)聯(lián)鍵。又例如,在其他例子中,如果第一數(shù)據(jù)表中包括的不同關(guān)聯(lián)鍵的數(shù)量為十個(gè),統(tǒng)計(jì)各個(gè)關(guān)聯(lián)鍵的數(shù)量并排序后,將得到排序位數(shù)由第一排序位至第十排序位的一個(gè)排列順序;如果預(yù)先設(shè)定的關(guān)聯(lián)鍵數(shù)量上限為5,則表示要從該排序中選擇前五個(gè)關(guān)聯(lián)鍵,該前五個(gè)關(guān)聯(lián)鍵是能造成數(shù)據(jù)傾斜的關(guān)聯(lián)鍵。本例子的描述中,以選出一個(gè)關(guān)聯(lián)鍵為例,如下的表4為關(guān)聯(lián)鍵子表,造成數(shù)據(jù)傾斜的一個(gè)關(guān)聯(lián)鍵在該表4中。表4關(guān)聯(lián)鍵子表用戶(hù)ID統(tǒng)計(jì)數(shù)量1231000000此外,預(yù)先設(shè)定的關(guān)聯(lián)鍵數(shù)量上限的數(shù)值,可以是根據(jù)經(jīng)驗(yàn)值或測(cè)試值確定。比如,可以在數(shù)據(jù)清洗遇到數(shù)據(jù)傾斜造成的處理時(shí)間超時(shí),查看該情況下造成超時(shí)的關(guān)聯(lián)鍵的重復(fù)次數(shù)是多少,假如是100萬(wàn)條,那就表明100萬(wàn)條記錄將可能造成處理延時(shí)。那么在根據(jù)關(guān)聯(lián)鍵的排序順序中初始設(shè)定一個(gè)關(guān)聯(lián)鍵數(shù)量上限比如為5,選擇前五位的關(guān)聯(lián)鍵,如果發(fā)現(xiàn)排序第五位的關(guān)聯(lián)鍵的統(tǒng)計(jì)數(shù)量是8000,則表明該關(guān)聯(lián)鍵數(shù)量上限設(shè)置不適合;如果將關(guān)聯(lián)鍵數(shù)量上限更改2時(shí),發(fā)現(xiàn)排序第二位的關(guān)聯(lián)鍵統(tǒng)計(jì)數(shù)量是100萬(wàn),則表明該上限數(shù)值設(shè)置合理,能夠?qū)⒃斐蓴?shù)據(jù)傾斜的數(shù)據(jù)記錄選擇出來(lái)。當(dāng)然,以上只是示例一種方式,也可以采用其他方式確定關(guān)聯(lián)鍵數(shù)量上限,只要能將傾斜數(shù)據(jù)識(shí)別即可。其次,根據(jù)關(guān)聯(lián)鍵子表,將第一數(shù)據(jù)表中匹配關(guān)聯(lián)關(guān)聯(lián)鍵子表的數(shù)據(jù)放入第一數(shù)據(jù)分表,將不能匹配關(guān)聯(lián)關(guān)聯(lián)鍵子表的數(shù)據(jù)放入第二數(shù)據(jù)分表。例如,在上述得到關(guān)聯(lián)鍵子表后,可以將該關(guān)聯(lián)鍵子表與第一數(shù)據(jù)表進(jìn)行關(guān)聯(lián),例如可以進(jìn)行兩者的mapjoin,mapjoin是join方式的一種,可以將小表數(shù)據(jù)直接讀取到內(nèi)存中與另一表進(jìn)行關(guān)聯(lián),可以極大提高生成關(guān)聯(lián)結(jié)果的效率。本例子中的關(guān)聯(lián)鍵子表如表4是一個(gè)小表,可以采用mapjoin。關(guān)聯(lián)鍵子表與第一數(shù)據(jù)表進(jìn)行關(guān)聯(lián)時(shí),能夠匹配關(guān)聯(lián)表4的數(shù)據(jù)放入第一數(shù)據(jù)分表,這里的“匹配關(guān)聯(lián)”指的是將第一數(shù)據(jù)表中的關(guān)聯(lián)鍵子表中的key對(duì)應(yīng)的數(shù)據(jù)記錄找出來(lái),本例子中,第一數(shù)據(jù)分表包括用戶(hù)ID“123”對(duì)應(yīng)的數(shù)據(jù)記錄;將不能匹配關(guān)聯(lián)表4的數(shù)據(jù)放入第二數(shù)據(jù)分表,即用戶(hù)ID“123”之外的數(shù)據(jù)記錄。表5第一數(shù)據(jù)分表用戶(hù)ID登陸時(shí)間1232016.3.21··························1232016.3.24表6第二數(shù)據(jù)分表用戶(hù)ID登陸時(shí)間2342016.3.263452016.3.27上述通過(guò)關(guān)聯(lián)鍵子表對(duì)第一數(shù)據(jù)表中的數(shù)據(jù)進(jìn)行拆分的方式可以有多種,例如,一種方式可以是,將關(guān)聯(lián)鍵子表與第一數(shù)據(jù)表進(jìn)行第一次mapjoin,得到匹配關(guān)聯(lián)關(guān)聯(lián)鍵子表的數(shù)據(jù),放入第一數(shù)據(jù)分表,即本次mapjoin得到的是能夠關(guān)聯(lián)上關(guān)聯(lián)鍵子表的數(shù)據(jù);可以將關(guān)聯(lián)鍵子表與第一數(shù)據(jù)表進(jìn)行第二次mapjoin,得到不能匹配關(guān)聯(lián)關(guān)聯(lián)鍵子表的數(shù)據(jù)放入第二數(shù)據(jù)分表。又例如,另一種方式可以是,將關(guān)聯(lián)鍵子表與第一數(shù)據(jù)表進(jìn)行一次mapjoin,通過(guò)本次mapjoin分別對(duì)匹配關(guān)聯(lián)關(guān)聯(lián)鍵子表的數(shù)據(jù)和不能匹配關(guān)聯(lián)關(guān)聯(lián)鍵子表的數(shù)據(jù)進(jìn)行標(biāo)識(shí),即標(biāo)識(shí)上某一數(shù)據(jù)是能夠關(guān)聯(lián)上關(guān)聯(lián)鍵子表的數(shù)據(jù),或者是不能關(guān)聯(lián)上關(guān)聯(lián)鍵子表的數(shù)據(jù);根據(jù)上述標(biāo)識(shí),將匹配關(guān)聯(lián)關(guān)聯(lián)鍵子表的數(shù)據(jù)放入第一數(shù)據(jù)分表,將不能匹配關(guān)聯(lián)關(guān)聯(lián)鍵子表的數(shù)據(jù)放入第二數(shù)據(jù)分表。以上只是列舉兩種方式,實(shí)際實(shí)施中不局限于此,只要能夠?qū)崿F(xiàn)表5和表6的數(shù)據(jù)拆分即可。在步驟102中,由第二數(shù)據(jù)表中提取匹配關(guān)聯(lián)第一數(shù)據(jù)分表的數(shù)據(jù),放入第三數(shù)據(jù)分表。例如,可以將表4所示的關(guān)聯(lián)鍵子表與表2所示的第二數(shù)據(jù)表進(jìn)行mapjoin,得到在第二數(shù)據(jù)表中能夠與關(guān)聯(lián)鍵子表匹配關(guān)聯(lián)的數(shù)據(jù)記錄,將該數(shù)據(jù)記錄放入第三數(shù)據(jù)分表。比如,在上述例子中,表4和表2關(guān)聯(lián)得到表7,例如,表4中的key是用戶(hù)ID“123”,那就將表2中的相同key即用戶(hù)ID“123”對(duì)應(yīng)的數(shù)據(jù)記錄放入表7:表7第三數(shù)據(jù)分表用戶(hù)ID用戶(hù)名稱(chēng)123張三在步驟103中,將第一數(shù)據(jù)分表和第三數(shù)據(jù)分表進(jìn)行mapjoin得到第一關(guān)聯(lián)表,將第二數(shù)據(jù)分表和第二數(shù)據(jù)表進(jìn)行join,得到第二關(guān)聯(lián)表。本步驟中,第三數(shù)據(jù)分表是小表,可以將該第三數(shù)據(jù)分表與第一數(shù)據(jù)分表進(jìn)行mapjoin,得到兩者關(guān)聯(lián)結(jié)果的第一關(guān)聯(lián)表如表8:表8第一關(guān)聯(lián)表用戶(hù)ID登陸時(shí)間用戶(hù)名稱(chēng)1232016.3.21張三·····································1232016.3.24張三第二數(shù)據(jù)分表和第二數(shù)據(jù)表進(jìn)行join,得到的第二關(guān)聯(lián)表,如下表9:表9第二關(guān)聯(lián)表在步驟104中,將第一關(guān)聯(lián)表和第二關(guān)聯(lián)表進(jìn)行組合,得到關(guān)聯(lián)結(jié)果表,所述關(guān)聯(lián)結(jié)果表為所述第一數(shù)據(jù)表和第二數(shù)據(jù)表關(guān)聯(lián)的結(jié)果。本步驟中,可以將步驟103中得到的第一關(guān)聯(lián)表和第二關(guān)聯(lián)表進(jìn)行組合,得到的關(guān)聯(lián)結(jié)果表如上的表3所示。本例子的數(shù)據(jù)表關(guān)聯(lián)方法,通過(guò)將含有傾斜數(shù)據(jù)的數(shù)據(jù)表進(jìn)行拆分,將傾斜數(shù)據(jù)與一個(gè)匹配該數(shù)據(jù)的小表進(jìn)行mapjoin,顯著提升了這部分傾斜數(shù)據(jù)的關(guān)聯(lián)處理效率,而另外的非傾斜數(shù)據(jù)在與數(shù)據(jù)表關(guān)聯(lián)時(shí),由于不再有傾斜數(shù)據(jù)的影響,處理過(guò)程也可以很快完成,上述兩部分的處理速度都很快,從而提升了數(shù)據(jù)表關(guān)聯(lián)的效率。為了實(shí)現(xiàn)上述方法,本申請(qǐng)實(shí)施例還提供了一種數(shù)據(jù)表關(guān)聯(lián)裝置,該裝置應(yīng)用于對(duì)第一數(shù)據(jù)表和第二數(shù)據(jù)表進(jìn)行關(guān)聯(lián);其中,所述第一數(shù)據(jù)表中包括:能夠造成數(shù)據(jù)傾斜的傾斜數(shù)據(jù)以及所述傾斜數(shù)據(jù)之外的非傾斜數(shù)據(jù)。如圖3所示,該裝置可以包括:表拆分單元31、表提取單元32、表關(guān)聯(lián)單元33和表組合單元34。其中,表拆分單元31,用于由所述第一數(shù)據(jù)表中提取所述傾斜數(shù)據(jù)放入第一數(shù)據(jù)分表,并將所述非傾斜數(shù)據(jù)放入第二數(shù)據(jù)分表;表提取單元32,用于由所述第二數(shù)據(jù)表中提取匹配關(guān)聯(lián)所述第一數(shù)據(jù)分表的數(shù)據(jù),放入第三數(shù)據(jù)分表;表關(guān)聯(lián)單元33,用于將第一數(shù)據(jù)分表和第三數(shù)據(jù)分表進(jìn)行mapjoin得到第一關(guān)聯(lián)表,將所述第二數(shù)據(jù)分表和所述第二數(shù)據(jù)表進(jìn)行關(guān)聯(lián),得到第二關(guān)聯(lián)表;表組合單元34,用于將所述第一關(guān)聯(lián)表和第二關(guān)聯(lián)表進(jìn)行組合,得到關(guān)聯(lián)結(jié)果表,所述關(guān)聯(lián)結(jié)果表為所述第一數(shù)據(jù)表和第二數(shù)據(jù)表關(guān)聯(lián)的結(jié)果。如圖4所示,該裝置中的表拆分單元31可以包括:鍵提取子單元311和表生成子單元312。鍵提取子單元311,用于由所述第一數(shù)據(jù)表中提取造成數(shù)據(jù)傾斜的至少一個(gè)關(guān)聯(lián)鍵,將所述至少一個(gè)關(guān)聯(lián)鍵放入關(guān)聯(lián)鍵子表中;表生成子單元312,用于根據(jù)所述關(guān)聯(lián)鍵子表,將所述第一數(shù)據(jù)表中匹配關(guān)聯(lián)所述關(guān)聯(lián)鍵子表的數(shù)據(jù)放入所述第一數(shù)據(jù)分表,將不能匹配關(guān)聯(lián)所述關(guān)聯(lián)鍵子表的數(shù)據(jù)放入所述第二數(shù)據(jù)分表。在另一例子中,鍵提取子單元311,在用于提取關(guān)聯(lián)鍵時(shí),包括:統(tǒng)計(jì)所述第一數(shù)據(jù)表中的各個(gè)關(guān)聯(lián)鍵的數(shù)量,將各個(gè)關(guān)聯(lián)鍵按照數(shù)量由多到少的順序進(jìn)行排序;根據(jù)預(yù)先設(shè)定的關(guān)聯(lián)鍵數(shù)量上限,獲取排序位數(shù)在所述關(guān)聯(lián)鍵數(shù)量上限之內(nèi)的至少一個(gè)關(guān)聯(lián)鍵,作為所述造成數(shù)據(jù)傾斜的至少一個(gè)關(guān)聯(lián)鍵。在另一例子中,表提取單元32,在用于生成第三數(shù)據(jù)分表時(shí),包括:將所述關(guān)聯(lián)鍵子表與所述第二數(shù)據(jù)表進(jìn)行關(guān)聯(lián),將關(guān)聯(lián)得到的所述第二數(shù)據(jù)表的數(shù)據(jù)放入所述第三數(shù)據(jù)分表。上述裝置中各個(gè)單元的功能和作用的實(shí)現(xiàn)過(guò)程具體詳見(jiàn)上述方法中對(duì)應(yīng)步驟的實(shí)現(xiàn)過(guò)程,在此不再贅述。對(duì)于裝置實(shí)施例而言,由于其基本對(duì)應(yīng)于方法實(shí)施例,所以相關(guān)之處參見(jiàn)方法實(shí)施例的部分說(shuō)明即可。以上所描述的裝置實(shí)施例僅僅是示意性的,其中所述作為分離部件說(shuō)明的單元可以是或者也可以不是物理上分開(kāi)的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個(gè)地方,或者也可以分布到多個(gè)網(wǎng)絡(luò)單元上??梢愿鶕?jù)實(shí)際的需要選擇其中的部分或者全部模塊來(lái)實(shí)現(xiàn)本申請(qǐng)方案的目的。本領(lǐng)域普通技術(shù)人員在不付出創(chuàng)造性勞動(dòng)的情況下,即可以理解并實(shí)施。本申請(qǐng)的數(shù)據(jù)表關(guān)聯(lián)裝置的實(shí)施例可以應(yīng)用在處理設(shè)備上,該數(shù)據(jù)處理設(shè)備例如可以是數(shù)據(jù)倉(cāng)庫(kù)中進(jìn)行數(shù)據(jù)處理所使用的計(jì)算設(shè)備。數(shù)據(jù)表關(guān)聯(lián)裝置實(shí)施例可以通過(guò)軟件實(shí)現(xiàn),也可以通過(guò)硬件或者軟硬件結(jié)合的方式實(shí)現(xiàn)。如圖5所示,為本申請(qǐng)數(shù)據(jù)表關(guān)聯(lián)裝置所在的處理設(shè)備的一種硬件結(jié)構(gòu)圖,以軟件實(shí)現(xiàn)為例,作為一個(gè)邏輯意義上的裝置,可以通過(guò)其所在的處理設(shè)備中的處理器51,將非易失性存儲(chǔ)器53中對(duì)應(yīng)的計(jì)算機(jī)程序指令讀取到內(nèi)存52中運(yùn)行。該處理設(shè)備除了包括上述的各個(gè)組件和網(wǎng)絡(luò)接口之外,通常還可以根據(jù)該處理設(shè)備的實(shí)際功能,可以包括其他功能組件,對(duì)此不再贅述。以上所述僅為本發(fā)明的較佳實(shí)施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所做的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明保護(hù)的范圍之內(nèi)。當(dāng)前第1頁(yè)1 2 3