Hive SQL關(guān)鍵字常見面試題

1、union 和 union all的區(qū)別

union會(huì)對(duì)結(jié)果進(jìn)行去重,union all會(huì)保留重復(fù)數(shù)據(jù)

2、窗口函數(shù)rank() over(order by )、dense_rank() over(order by)、row_number() over(order by)區(qū)別

rank() 函數(shù)rank相同,排序值相同,且占排序位置。如113446

dense_rank() 函數(shù)rank相同,排序值相同,不占排序位置。如1223445

row_number() 函數(shù)rank相同,排序依次遞增,占排序位置。如123456

3、空值不占空間,null占空間。

4、開窗函數(shù)sum() over(partition by A order by B

5、grouping sets用法 select a,b,count(c),grouping__id from table_A where dt = 20230228 group by 1,2 grouping sets(a,b,(a,b))

6、count (distinct )和group by的區(qū)別

數(shù)據(jù)量不大時(shí),兩者性能相近。前者主要用于統(tǒng)計(jì)去重指標(biāo),后者主要用于分組統(tǒng)計(jì)。數(shù)據(jù)量較大時(shí)可以使用里層group by,外層count代替count (distinct )操作。由于count distinct全局只有一個(gè)reduce,數(shù)據(jù)量較大時(shí),容易reduce端數(shù)據(jù)傾斜,性能較差。

兩者執(zhí)行方式不同,distinct主要對(duì)數(shù)據(jù)進(jìn)行兩兩比較,需要遍歷整個(gè)表。group by分組類似先建立索引再查索引,當(dāng)數(shù)據(jù)量大時(shí),group by速度快于distinct。

7、exists和in的區(qū)別

in在查詢時(shí),先執(zhí)行子查詢,然后與外表進(jìn)行笛卡爾積按照過濾條件進(jìn)行過濾。所以內(nèi)表小時(shí),in比較快。

exists指定一個(gè)子查詢,檢測(cè)行的存在。遍歷循環(huán)外表,然后看外表是否有和內(nèi)表一樣的數(shù)據(jù),匹配上就將結(jié)果放入結(jié)果集中。

exists只返回true或false。因此查詢的select *也可以是select 1或其他。select * from A exists (select 1 from B where A.id = B.id); exists的實(shí)際過程經(jīng)過了優(yōu)化,而非逐條對(duì)比;Exists子查詢往往可以使用條件表達(dá)式。其他子查詢或join來代替。

當(dāng)A表數(shù)據(jù)量大于B表時(shí),in優(yōu)于exists。當(dāng)A表數(shù)據(jù)量小于B表時(shí)用exists優(yōu)于in?!続與B表的id字段應(yīng)該建立索引】。如果兩個(gè)表查詢性能相當(dāng),那么in和exists差別不大,如果兩個(gè)表一個(gè)較小,一個(gè)是大表,則子查詢的大用exists。子查詢小的用in。

最后編輯于
?著作權(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),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

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