hive sql中的join

1 幾種join方式

join

join對(duì)應(yīng)于inner join 內(nèi)連接。
當(dāng)多張表進(jìn)行join的時(shí)候,所有表中與on條件中匹配的數(shù)據(jù)才會(huì)顯示。
hql(即hive sql)的on子句中只支持and,不支持 or,也不支持null的對(duì)比。

left outer join

左外連接,也稱為左連接。
以左表為基準(zhǔn),如果右表有條件匹配的數(shù)據(jù),則顯示,否則顯示為null。

right outer join

與左外連接相反,以右表為基準(zhǔn),若左表有條件匹配的數(shù)據(jù),則顯示,否則顯示為null。

full outer join

全外連接,返回所有表中滿足where條件的數(shù)據(jù),不滿足的以null代替。

left semi join

左半連接,查詢出滿足on條件的左表的數(shù)據(jù)。左表的記錄在右表中找到對(duì)應(yīng)的記錄,則右表停止掃描。
selectwhere子句不能引用右表的字段。

right semi join

右半連接,類似左半連接。hql不支持right semi join

笛卡爾積

左表數(shù)據(jù)乘以右表數(shù)據(jù)。使用join,(跟內(nèi)連接的區(qū)別貌似是沒有on條件)

union

聯(lián)合操作

2 避免踩坑

left outer join

左外連接的結(jié)果條數(shù)應(yīng)該與左表的條數(shù)一樣多。如果右表關(guān)聯(lián)的字段存在重復(fù)時(shí),會(huì)讓結(jié)果條數(shù)變多。

full outer join

不要把右表的 where條件寫在 on 語句中

join特別慢

reduce階段特別慢,可能發(fā)生數(shù)據(jù)傾斜,或者join on字段存在null值。

select 非null值

做完full outer join后,想要選擇非空的列值作為結(jié)果,可以使用 coalesce。

SELECT COALESCE(table1.id, table2.id) AS id,
table1.name,table1.family,table2.orderr,table2.countt
FROM table1 FULL OUTER JOIN table2
ON table1.id = table2.id

(網(wǎng)上還有一種用法是isnull,沒有證實(shí)過

SELECT ISNULL(table1.id, table2.id) AS id,
table1.name,table1.family,table2.orderr,table2.countt
FROM table1 FULL OUTER JOIN table2
ON table1.id = table2.id

order by & sort by

order by對(duì)所有數(shù)據(jù)在一個(gè)reduce中全排序。如果設(shè)置hive.mapred.mode=strict,在全排序時(shí)必須結(jié)合limit使用。
sort by 在每個(gè)reduce中進(jìn)行排序(局部排序)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容