知識是需要總結的,美好是需要記錄的.
才想起,時隔好久沒寫簡書了,五一假期已過2天,趁著五一假期沒回家,好好復盤一番,分為技術總結篇和耍樂記錄篇~
一、實踐復盤
在寫這個模塊前,得先感謝下在公司華哥和趙哥的指導,從他們身上總可以散發(fā)出老鳥程序員的經驗,欣賞 趙哥工作的勤奮,華哥工作的效率。(PS:時常看見趙哥早上早早地來到公司,聽見華哥經常性地爆出一句又想到了一個優(yōu)化的方案了),小江在組里是新手,偶爾總是翻車被批在所難免,希望早日磨煉到華哥說的遇到問題不要慌。
開始經驗總結
日常工作是ETL數據處理流程,主要有報表開發(fā)、畫像標簽開發(fā)、各部門數據臨時取數等,常用語言:hiveQL離線大數據處理,python腳本調度任務。以下總結盡可能還原出實際場景...
-
1、在寫hiveQL時,注意在確保不影響各計算指標時內層查詢要盡可能的收斂數據。
比如之前在計算次日留存用戶的時候,通過左關聯當天用戶數據和次日用戶數據來做子查詢,關聯上則表示次日用戶在當天仍有活躍,則外層查詢做邏輯計算uv,然而之前執(zhí)行調度任務調度了1小時多,被華哥發(fā)現了,emmm于是秀操作的來了,華哥調出hive腳本看了下,我被吐槽了,這內層查詢都沒做group by收斂,數據量肯定發(fā)散了,優(yōu)化之后,調度執(zhí)行時間就幾分鐘... -
2、方向方法要掌握對,遇到數據支持任務取數,最效率地是要熟悉好各個數據表的用途,做好記憶。
比如需要埋點行為數據的指標,就要立馬反映是從事件行為表取數,需要活躍數據的指標,就要從活躍表取,而又分app活躍明細表和app活躍統(tǒng)計表,這部分總犯迷糊搞錯,現在覺得主要得從調度平臺看調度任務分析表內部的數據含義,請教別人雖然快,但記憶不深,自己摸索出才記憶得住,當然這需要有時間讓自己摸索。還有有時業(yè)務會需要讓提供hiveQL腳本,而表可能包含敏感字段數據,可把數據表生成視圖方式隱藏關鍵表字段提供腳本。 -
3、業(yè)務要先清晰好,寫代碼才有邏輯思路。
當任務轉交給我時,其實正確地做法是先分析下需求,然后找相關的業(yè)務對接人討論疑惑點,確認清晰了再動手做,效率才高。而不是等做得差不多了,因為雙方理解有誤導致代碼需要重構,這是我經常犯的大錯,總是想著應該是我理解的這樣,就省點溝通時間而反而后續(xù)花費了更多的時間。 -
4、盡可能地考慮到數據的實際場景方面,不做代碼工具人,ETL工程師是需要熟悉業(yè)務場景的,這樣處理的數據才會有根據,才會有意義。
多考慮實際的現實場景,比如在技術的維度上看問題,這么寫代碼觀察驗證數據是否會出現數據傾斜的情況,或者關聯表的時候是否會出現數據發(fā)散的情況,而在業(yè)務的維度上看問題,這么寫代碼是否會發(fā)生考慮場景不全,比如業(yè)務各表在關聯時是否是一對多還是一對一情況,最終的數據結果是否會漏掉特殊場景。 -
5、在某個大表的大分區(qū)數據量很大的情況下,可以考慮實際業(yè)務場景抽取出中間表或者臨時表,從而達到報表層處理時的優(yōu)化。
比如最近在做一個瀏覽器基礎數據指標報表,需要計算次日留存率,還有其他一些指標,我思路是做個報表層任務,把各個需要的指標數據通過子查詢的方式關聯并計算出來,雖然這樣寫代碼很清晰,但是后面在執(zhí)行調度任務跑的時候很耗費集群資源,排查原因是瀏覽器分區(qū)的數據量很大,關聯計算時查詢大表很耗時間,所以最后采用抽取出臨時表的方式,之后再從臨時表來取數就達到了不用每次都查大表數據的效果了,相當于把需要部分的數據先抽取出來存在中間的臨時表。 -
6、磨煉項:思路要靈活,效率要提高,數據質量要準確,獨立能力要增強。
寫代碼靈活,這個真的被華哥折服,經常寫出代碼看起來很冗余,華哥又經常性地賜教... 嗯很服,這個感覺代碼寫多了,函數api使用多了,多總結才會有所進步吧 -
7、不要給自己懶惰的理由,之前自己定的很多想學的都沒時間認真學習。
比如Spark、Scala、Shell、Flink、集群資源很多,好久沒好好額外學習大數據了。
最后簡單回顧了下工作以來的cvn服務平臺,處理的71個數據需求服務,感覺基本都是簡單小任務,希望后續(xù)能配合好組里工作內容和提升好個人技能實力。有規(guī)劃、有目標、哈哈還有嘴里總喊著不想加班的虛假年輕人,講真、小江自我感覺還是菜的一批。

實習至今處理的任務.png
二、假期娛樂篇
五一假期開始于2天前下班的那個晚上,興沖沖地搭公車奔向港灣一號跟小老哥會和,開啟第一頓酸菜魚,講真,飽到了,好吃。
江漁兒酸菜魚

嘆佬雞煲

雞煲特寫