A表1億條記錄
B表1億條記錄,
A表B表通過id字段關(guān)聯(lián)癌别,直接關(guān)聯(lián)報錯皂岔,跑不動任務(wù);
現(xiàn)在對A B表分別進行分桶展姐,然后進行關(guān)聯(lián):
主要用了hive的分桶原理躁垛,具體操作如下:
A數(shù)據(jù)重新抽到一張分桶表a_bucket,分桶是針對某一列進行桶的組織。Hive采用對列值哈希圾笨,然后除以桶的個數(shù)求余的方式?jīng)Q定該條記錄存放在哪個桶當(dāng)中缤苫。在本例中是根據(jù)id分成100個桶;
B也根據(jù)id分成100個桶墅拭;
A分桶表和B分桶表關(guān)聯(lián)生成新的表a_b_detail活玲,因為是分桶表,關(guān)聯(lián)的時候相當(dāng)于將整個表切分成100個小任務(wù)進行關(guān)聯(lián),傳統(tǒng)的方式直接關(guān)聯(lián)會直接卡死舒憾,分桶后再關(guān)聯(lián)比較高效镀钓,耗時225s,這里面用到的關(guān)聯(lián)叫做SMB(Sort-Merge-Buket) Join,具體可自行百度