一般數(shù)據(jù)倉庫面試會面兩輪方妖,第一輪一般是sql技術(shù)面匣缘,第二輪就是維度建模和數(shù)據(jù)治理的問題窘哈。
一輪技術(shù)面(待補充):
1、數(shù)據(jù)傾斜:
數(shù)據(jù)傾斜一般產(chǎn)生的原因是數(shù)據(jù)在map端hash分配到reduce端時胧洒,某一個key的數(shù)量遠(yuǎn)大于其他的key畏吓,導(dǎo)致某一個reduce的處理時間較長。
1)key分布不均勻
2)數(shù)據(jù)本身就是如此
3)數(shù)據(jù)關(guān)聯(lián)時沒有把握好關(guān)聯(lián)鍵
解決方案
1)參數(shù)調(diào)整:hive.map.aggr = true;hive.groupby.skewindata=true;
?當(dāng)存在數(shù)據(jù)傾斜時開啟負(fù)載均衡卫漫,此時會生成兩個MapReduce任務(wù)菲饼,第一個MR任務(wù)會將map端產(chǎn)生的key隨機(jī)的分配到reduce,先進(jìn)行一次聚合列赎,第二個MR任務(wù)會將第一個任務(wù)的預(yù)處理結(jié)果作為輸入宏悦,將相同的key分配到同一個reduce當(dāng)中。
2)sql調(diào)整:在處理大量空值導(dǎo)致數(shù)據(jù)傾斜的情況下包吝,可以先將空值附一個特殊值去處理饼煞,比如給一個隨機(jī)數(shù)加字符串的方式,因為空值數(shù)據(jù)是關(guān)聯(lián)不上的诗越,不會影響后期處理砖瞧。
2、order by掺喻,sort by芭届,cluster by,distribute by的區(qū)別
1)order by是全局排序感耙,排序過程在一個reduce中進(jìn)行褂乍,在數(shù)據(jù)量較大時就會很慢
2)sort by是局部排序,排序結(jié)果在同一個reduce中使有序的
3)distribute by是將數(shù)據(jù)按照字段劃分到一個reduce中即硼,一般與sort by連用進(jìn)行分組排序的作用
4)cluster by除具有distribute by功能外還具有sort by的功能
order by優(yōu)化(阿里面試):
1)開啟嚴(yán)格模式逃片,order by之后添加limit子句
2)利用sort by,在每個reduce中先排序取出top項只酥,再把預(yù)處理結(jié)果order by輸出
3褥实、hive中內(nèi)部表和外部表的區(qū)別
1)在創(chuàng)建表的時候,內(nèi)部表是將數(shù)據(jù)移動到數(shù)據(jù)倉庫指向的路徑裂允,外部表僅記錄數(shù)據(jù)所在的路徑损离,不對數(shù)據(jù)的位置做任何改變。
2)在刪除表的時候绝编,內(nèi)部表會將元數(shù)據(jù)和數(shù)據(jù)都刪除僻澎,外部表只刪除元數(shù)據(jù)。
4十饥、列轉(zhuǎn)行窟勃、行轉(zhuǎn)列
1)列轉(zhuǎn)行:lateral view explode(split('column_name',','))作為一個新表
2)行轉(zhuǎn)列:concat_ws(',',collect_set(column_name))
5、mapreduce運行原理
6逗堵、數(shù)據(jù)倉庫分層原理(阿里面試)
7秉氧、維度建模中三種事實表的應(yīng)用場景(阿里面試)
二輪面試(待補充)