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定該條記錄存放在哪個桶當中。在本例中是根據(jù)id分成100個桶;
B也根據(jù)id分成100個桶;
A分桶表和B分桶表關(guān)聯(lián)生成新的表a_b_detail,因為是分桶表,關(guān)聯(lián)的時候相當于將整個表切分成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,具體可自行百度