面試話術(shù)準(zhǔn)備
一、自我介紹
1.介紹總體的工作經(jīng)歷,做了哪些項(xiàng)目
2.挑一個(gè)近期的項(xiàng)目詳細(xì)講解
1)項(xiàng)目的背景/價(jià)值
2)項(xiàng)目的數(shù)據(jù)流向
3)項(xiàng)目的分層(stg,ods,dwd,dim,dws,ads)
4)主要負(fù)責(zé)的內(nèi)容
5)突出貢獻(xiàn)
各位面試官好(面試官您好),我叫xxx,2018年本科畢業(yè)于南昌航空大學(xué)軟件工程專業(yè),畢業(yè)后入職過(guò)兩家公司,都是差不多2年左右,主要從事的工作內(nèi)容是離線數(shù)據(jù)倉(cāng)庫(kù)和java后端的開(kāi)發(fā)。第一家公司是北京紅山信息研究院有限公司,涉及的項(xiàng)目有2個(gè),一個(gè)是跟深圳司法局戒毒所有關(guān)的移動(dòng)輕應(yīng)用后端項(xiàng)目,另一個(gè)是跟陜西天元化工中心智慧工廠數(shù)倉(cāng)大屏項(xiàng)目。上家公司是浙江未訊,涉及的兩個(gè)主要項(xiàng)目是離線數(shù)倉(cāng)基礎(chǔ)設(shè)施建設(shè)以及基于離線數(shù)倉(cāng)構(gòu)建的數(shù)據(jù)應(yīng)用-運(yùn)營(yíng)分析平臺(tái)。我先說(shuō)下最近做的運(yùn)營(yíng)分析平臺(tái)項(xiàng)目,如果其他項(xiàng)目您也想了解的話我待會(huì)再給您介紹。
易借速貸運(yùn)營(yíng)分析平臺(tái)項(xiàng)目是基于易借速貸app核心系統(tǒng)借貸業(yè)務(wù)及公司的大數(shù)據(jù)平臺(tái)及離線數(shù)倉(cāng)產(chǎn)出的數(shù)據(jù)產(chǎn)品。
數(shù)據(jù)源分為3大類:
業(yè)務(wù)數(shù)據(jù):主要來(lái)源于APP server,核心信貸系統(tǒng),風(fēng)控系統(tǒng)等業(yè)務(wù)系統(tǒng)。
日志數(shù)據(jù):主要是用戶行為日志數(shù)據(jù)。
第三方ftp文件數(shù)據(jù):比如地圖數(shù)據(jù)和客服語(yǔ)音文件等。
整體的數(shù)據(jù)流向:數(shù)據(jù)采集到hdfs,hdfs提供數(shù)據(jù)存儲(chǔ),hive +spark提供數(shù)據(jù)計(jì)算,結(jié)合分層理論和建模理論對(duì)數(shù)據(jù)進(jìn)行分層建模,最后數(shù)據(jù)同步到clickhouse,superset連接clickhouse做統(tǒng)計(jì)分析。
數(shù)據(jù)采集:基于平臺(tái)可視化頁(yè)面拖拉拽方式實(shí)現(xiàn),配置采集的數(shù)據(jù)源,采集方式,目的地,資源及調(diào)度時(shí)間將數(shù)據(jù)同步到hdfs作為數(shù)據(jù)緩沖層供下游使用。
數(shù)據(jù)分層:包括stg數(shù)據(jù)緩沖層,ods數(shù)據(jù)標(biāo)準(zhǔn)層,dwd明細(xì)層,dim維表層,temp臨時(shí)表層,dws輕度匯總層以及ads集市層。
stg: stg數(shù)據(jù)緩沖層主要是起到災(zāi)備的作用,后續(xù)任務(wù)需要重跑的時(shí)候直接到stg層直接取數(shù)即可,不需要重新導(dǎo)業(yè)務(wù)系統(tǒng)拉取數(shù)據(jù)。
ods: ods數(shù)據(jù)標(biāo)準(zhǔn)層主要負(fù)責(zé)數(shù)據(jù)的清洗過(guò)濾,標(biāo)準(zhǔn)化等。比如過(guò)濾用戶信息中的測(cè)試臟數(shù)據(jù),日期格式統(tǒng)一標(biāo)準(zhǔn)化為yyyy-MM-dd格式,用戶身份信息脫敏,2000大地坐標(biāo)系統(tǒng)一轉(zhuǎn)換為wgs84坐標(biāo)系等。
dwd: dwd層主要基于Kimball維度建模理論和領(lǐng)域建模為不同的主題域設(shè)計(jì)數(shù)據(jù)模型,存儲(chǔ)明細(xì)事實(shí)表數(shù)據(jù)供下游使用。我們的主題域有用戶域,交易域,流量域,風(fēng)控域和合同域等等。我主要參與的是交易域的設(shè)計(jì)。比如交易域的主題模型有OCR認(rèn)證模型,md5認(rèn)證模型,用戶借款申請(qǐng)模型等等。領(lǐng)域模型主要是用戶行為借貸模型。
dim: dim存儲(chǔ)的是維度表數(shù)據(jù)。用于后續(xù)的維度分析統(tǒng)計(jì),比如有自定義的日期維度表,用戶維度表,貸款產(chǎn)品維度表,渠道維度表等等。
dws: 這一層存儲(chǔ)的是輕度匯總層數(shù)據(jù),將多個(gè)需求公共的派生指標(biāo)數(shù)據(jù)放在這一層,可以避免重復(fù)計(jì)算。我們的指標(biāo)一般可以分為原子指標(biāo)(業(yè)務(wù)過(guò)程+度量值+聚合邏輯,比如訂單量),派生指標(biāo)(原子指標(biāo)+統(tǒng)計(jì)周期+業(yè)務(wù)限定+統(tǒng)計(jì)粒度? 每天各省份的訂單量)和衍生指標(biāo)(有多個(gè)派生指標(biāo)構(gòu)成,一般是比率,如MD5認(rèn)證通過(guò)率)。通過(guò)onedata這套指標(biāo)體系標(biāo)準(zhǔn)將我們的需求拆解后,就會(huì)存在多個(gè)需求共用相同的派生指標(biāo),那就可以將業(yè)務(wù)過(guò)程和統(tǒng)計(jì)周期以及統(tǒng)計(jì)粒度相同的派生指標(biāo)放在dws層,實(shí)現(xiàn)邏輯復(fù)用。
ads:? 集市層是根據(jù)業(yè)務(wù)需求,基于dws層或者dwd層的數(shù)據(jù)進(jìn)行加工,給后續(xù)的數(shù)據(jù)應(yīng)用使用。
主要工作:
這里我的工作主要是和產(chǎn)品經(jīng)理對(duì)接需求,統(tǒng)一指標(biāo)口徑對(duì)需求進(jìn)行拆解后進(jìn)行后續(xù)的模型設(shè)計(jì)和指標(biāo)開(kāi)發(fā)。同時(shí)編寫(xiě)相應(yīng)的接口文檔,數(shù)據(jù)模型文檔,詳細(xì)設(shè)計(jì)文檔等,以及后續(xù)問(wèn)題清單問(wèn)題的處理及維護(hù)工作以及技術(shù)調(diào)研等。
突出貢獻(xiàn):
然后里面對(duì)團(tuán)隊(duì)比較有貢獻(xiàn)的是用戶借貸行為模型的優(yōu)化。這是模型是用于后續(xù)的自定義事件分析,動(dòng)態(tài)報(bào)表等功能。
優(yōu)化之前:
采用的是維度建模的方式,跑批效率很慢,而且數(shù)據(jù)很難查出來(lái),多個(gè)業(yè)務(wù)過(guò)程耦合在一塊,維護(hù)起來(lái)也麻煩。
優(yōu)化之后:
采用的是領(lǐng)域建模的方式,通過(guò)維度建模的方式是直接橫向?qū)⒍鄠€(gè)業(yè)務(wù)過(guò)程join起來(lái),耦合度太高,所以導(dǎo)致跑批效率特別慢。所以解決的方式要從耦合度著手,將涉及的業(yè)務(wù)過(guò)程進(jìn)行縱向拆分,方法是為將多個(gè)業(yè)務(wù)過(guò)程進(jìn)行子域劃分,為每個(gè)業(yè)務(wù)過(guò)程單獨(dú)定義一個(gè)事件編碼,比如借款申請(qǐng)定義事件編碼loanApply,這個(gè)編碼最終最為表的二級(jí)分區(qū)字段,表的字段包括所有過(guò)程的事實(shí)字段和維度字段,每個(gè)業(yè)務(wù)過(guò)程統(tǒng)計(jì)的時(shí)候只需要關(guān)注自身業(yè)務(wù)涉及的字段,其它的字段按照數(shù)據(jù)類型取默認(rèn)值即可,這個(gè)各個(gè)業(yè)務(wù)過(guò)程可以是實(shí)現(xiàn)并行跑批,提高了跑批效率,同時(shí)也方便后續(xù)的維護(hù)。
二、建模
常用的建模理論:
范式建模:范式建模常用于關(guān)系型數(shù)據(jù)庫(kù)的設(shè)計(jì),在數(shù)據(jù)倉(cāng)庫(kù)中主要應(yīng)用于數(shù)據(jù)貼源層,好處是范式級(jí)別越高,數(shù)據(jù)冗余度就越低。
Kimball維度建模:Kimball維度建模主要應(yīng)用數(shù)倉(cāng)dw層事實(shí)表和維度表的設(shè)計(jì)
事實(shí)表建模的步驟:1)選擇業(yè)務(wù)過(guò)程-》2)確認(rèn)粒度-》確認(rèn)維度-》確認(rèn)事實(shí)
選擇業(yè)務(wù)過(guò)程:
事實(shí)表是緊緊圍繞業(yè)務(wù)過(guò)程進(jìn)行設(shè)計(jì)的,為了還原業(yè)務(wù)細(xì)節(jié)的,所以每張事實(shí)表要先確定對(duì)應(yīng)的業(yè)務(wù)過(guò)程,比如說(shuō)現(xiàn)在拿到的指標(biāo)需求是運(yùn)營(yíng)那邊需要統(tǒng)計(jì)md5認(rèn)證申請(qǐng)次數(shù),通過(guò)次數(shù),申請(qǐng)人數(shù),通過(guò)人數(shù)。那對(duì)應(yīng)的業(yè)務(wù)過(guò)程就是業(yè)務(wù)流程中借款申請(qǐng)前的md5認(rèn)證過(guò)程。確認(rèn)業(yè)務(wù)過(guò)程其實(shí)就是確定我們到時(shí)候統(tǒng)計(jì)指標(biāo)到時(shí)候到哪里獲取對(duì)應(yīng)的事實(shí)數(shù)據(jù)。
確認(rèn)粒度:確認(rèn)粒度就是確認(rèn)最終事實(shí)表的一行記錄所表達(dá)的含義,原則是粒度越細(xì)越好,粒度越細(xì),還原的業(yè)務(wù)細(xì)節(jié)就越多,能夠支撐的統(tǒng)計(jì)需求就越豐富,模型的復(fù)用性可以得到提升。
確認(rèn)維度:確認(rèn)維度也就是確認(rèn)事實(shí)表中的維度字段,后續(xù)需要跟維度表進(jìn)行關(guān)聯(lián)做各個(gè)維度的統(tǒng)計(jì)分析,維度一般就對(duì)應(yīng)了事實(shí)所發(fā)生的環(huán)境,可以用5w1h的方式進(jìn)行定位,比如MD5認(rèn)證過(guò)程就可以定義為誰(shuí)在什么時(shí)間什么地點(diǎn)用了什么設(shè)備提交了MD5認(rèn)證記錄,那對(duì)應(yīng)的維度信息就有用戶信息,日期,省份,設(shè)備類型等等。
確認(rèn)事實(shí):確認(rèn)事實(shí)也就是確認(rèn)業(yè)務(wù)行為產(chǎn)生過(guò)程中的度量值,一般都是可累加的字段,比如次數(shù)人數(shù)金額等等。
維度表設(shè)計(jì)過(guò)程:
如果是比較簡(jiǎn)單的維度信息,比如性別這種一般就采用維度退化的方式,直接將維度字段退化到事實(shí)表中,可以減少表的數(shù)量。
而對(duì)于大多數(shù)單一的維度就可以直接同步過(guò)來(lái)或者在同步的基礎(chǔ)上進(jìn)行加工即可,比如用戶維度表,日期維度表等
對(duì)于存在有維度層次關(guān)聯(lián)的維度表,比如貸款商品表,會(huì)有一級(jí)分類 二級(jí)分類的情況,那就以主維表的粒度最最細(xì)粒度,然后將其他相關(guān)維表的信息通過(guò)join的方式拉取到一張大的表中形成最終的維度表。
領(lǐng)域建模:維度建模依賴的建模理論呢還是維度建模,只是多了前期的子域劃分的過(guò)程,這方面目前還在學(xué)習(xí)階段,用的還不是特別熟。
設(shè)計(jì)原則:通過(guò)實(shí)體+業(yè)務(wù)行為來(lái)定義主題,主題內(nèi)部高內(nèi)聚低耦合
設(shè)立思路:
1) 確認(rèn)實(shí)體。
2) 根據(jù)業(yè)務(wù)流程分析實(shí)體對(duì)應(yīng)的業(yè)務(wù)行為。
①??? 登錄
②? ? 借款申請(qǐng)
③? ? 風(fēng)控認(rèn)證
④? ? 認(rèn)證通過(guò)
⑤? ? 額度申請(qǐng)
⑥????額度審批
⑦????放款
⑧????逾期
⑨????催收
3) 找出每種業(yè)務(wù)行為對(duì)應(yīng)的計(jì)算來(lái)源,屬于數(shù)據(jù)倉(cāng)庫(kù)中哪層的哪個(gè)表。
4) 確認(rèn)計(jì)算來(lái)源后確定最后輸出方式,既寬表后續(xù)是如何使用的。
5) 根據(jù)需求指標(biāo)和業(yè)務(wù)行為對(duì)應(yīng)的事實(shí)表設(shè)計(jì)寬表,包括
①??? 對(duì)業(yè)務(wù)行為進(jìn)行事件定義:目的是為了作業(yè)務(wù)的垂直切分,對(duì)相同實(shí)體的不同業(yè)務(wù)事件進(jìn)行分類,起到功能之間解耦的作用,方便后續(xù)的使用和維護(hù)。方法是在業(yè)務(wù)數(shù)據(jù)庫(kù)中自定義事件表,這樣就可以在分析云平臺(tái)上隨意選擇事件分析。
②??? 確定寬表字段:對(duì)業(yè)務(wù)進(jìn)行事件定義之后,也就確定了寬表的分區(qū)字段(業(yè)務(wù)日期作為一級(jí)分區(qū),事件編碼作為二級(jí)分區(qū)),然后確定表的具體字段,方式是按照實(shí)體為統(tǒng)計(jì)粒度,到每個(gè)行為事實(shí)表中確定可統(tǒng)計(jì)的事實(shí),每個(gè)可統(tǒng)計(jì)值作為一個(gè)字段,匯聚在一起就形成了寬表字段。
③??? 寬表的算法形成:實(shí)體的一種業(yè)務(wù)行為就對(duì)應(yīng)了一個(gè)算法,裝載數(shù)據(jù)的時(shí)候其它的業(yè)務(wù)行為字段取0即可。比如統(tǒng)計(jì)用戶的下單行為事件,那就到下單事實(shí)表中按照用戶實(shí)體統(tǒng)計(jì)相關(guān)的事實(shí)比如用戶下單金額,下單量等,而其它的業(yè)務(wù)過(guò)程字段比如收藏,支付等業(yè)務(wù)過(guò)程設(shè)計(jì)的事實(shí)字段取0即可。這樣當(dāng)需要新增業(yè)務(wù)行為事件的時(shí)候就只需要新增類似的邏輯就行,不需要修改原來(lái)的邏輯,遵循了設(shè)計(jì)模式的OCP原則,起到功能之間解耦的作用。