亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

hive中的幾種join到底有什么區(qū)別

 更新時(shí)間:2022年03月24日 16:10:37   作者:牧碼文  
hive處理表關(guān)聯(lián)時(shí)由于數(shù)據(jù)量以及數(shù)據(jù)傾斜等問(wèn)題會(huì)導(dǎo)致計(jì)算性能差甚至任務(wù)失敗,下面這篇文章主要給大家介紹了關(guān)于hive中幾種join到底有什么區(qū)別的相關(guān)資料,需要的朋友可以參考下

hive中,幾種join的區(qū)別

數(shù)據(jù):

tom,1
jey,2
lilly,7
lilly,8

tom,1
lilly,3
may,4
bob,5

以上兩個(gè)為數(shù)據(jù),沒(méi)有什么意義,全是為了檢測(cè)join的使用

看一下兩張表,其實(shí)可以看出來(lái),在name一行有重復(fù)的,也有不重復(fù)的,在id一行1表完全包含2表

1. left join

left join會(huì)把左邊的表所有數(shù)據(jù)列出來(lái),當(dāng)左邊表有而右邊表沒(méi)有的時(shí)候,就會(huì)用null代替

select *
from jn1
left join jn2
on jn1.name=jn2.name;

jn1.name    jn1.id    jn2.name    jn2.id
tom    1    tom    1
jey    2    NULL    NULL
lilly    7    lilly    3
lilly    8    lilly    3

而右表有左表沒(méi)有的就不會(huì)顯示了

2. join

join會(huì)把兩個(gè)表共有的部分篩選出來(lái)

select *
from jn1
join jn2
on jn1.name=jn2.name;

jn1.name    jn1.id    jn2.name    jn2.id
tom    1    tom    1
lilly    7    lilly    3
lilly    8    lilly    3

可以看到,共有的部分篩選了出來(lái)

3. full join

會(huì)把兩者沒(méi)有的有的全部數(shù)據(jù)都選出來(lái),沒(méi)有的顯示空值

select *
from jn1
full join jn2
on jn1.name = jn2.name;

jn1.name    jn1.id    jn2.name    jn2.id
tom    1    tom    1
NULL    NULL    bob    5
jey    2    NULL    NULL
lilly    7    lilly    3
lilly    8    lilly    3
NULL    NULL    may    4

4. Join…on 1=1

這種情況會(huì)有笛卡爾積的產(chǎn)生,就是表1的每一行都會(huì)和表2匹配一下,這樣就會(huì)產(chǎn)生指數(shù)級(jí)的增長(zhǎng)

select *
from jn1
join jn2
on 1=1;

jn1.name    jn1.id    jn2.name    jn2.id
tom    1    lilly    3
tom    1    bob    5
tom    1    may    4
tom    1    tom    1
jey    2    lilly    3
jey    2    bob    5
jey    2    may    4
jey    2    tom    1
lilly    7    lilly    3
lilly    7    bob    5
lilly    7    may    4
lilly    7    tom    1
lilly    8    lilly    3
lilly    8    bob    5
lilly    8    may    4
lilly    8    tom    1

5. union

會(huì)把查詢結(jié)果拼接起來(lái),但是要求兩個(gè)查詢結(jié)果的行數(shù)必須保持一致

否則會(huì)報(bào)錯(cuò)

FAILED: SemanticException Schema of both sides of union should match

select *
from jn1
union
select * 
from jn2;

_u1.name    _u1.id
jey    2
lilly    7
bob    5
lilly    3
lilly    8
tom    1
may    4

6. union all

union會(huì)組合起來(lái),那么union all可以不

select *
from jn1
union all
select * 
from jn2;

lilly    3
tom    1
may    4
bob    5
tom    1
jey    2
lilly    7
lilly    8

union和union all的區(qū)別

從上述的兩個(gè)結(jié)果就可以看出來(lái)了兩者的區(qū)別,union會(huì)自動(dòng)去重處理,所以結(jié)果把重復(fù)的數(shù)據(jù)去掉了,而union all則不會(huì)去重。

注意tips:left join會(huì)用之后,right join不用說(shuō)了吧

總結(jié)

到此這篇關(guān)于hive中的幾種join到底有什么區(qū)別的文章就介紹到這了,更多相關(guān)hive的join區(qū)別內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論