摘要: 企業最終的資料往往都隱藏在日誌背後,如果從日誌背後挖掘出有價值的資訊,勾畫出平臺或網站的使用者畫像對精準化運營有著重要的幫助。阿里雲技術專家禕休帶來阿里在處理日誌、構建數倉上的最佳實踐分享。主要從數倉開發開始談起,重點講解了資料加工使用者畫像的五大步驟,最後進行了演示解析。
企業最終的資料往往都隱藏在日誌背後,如果從日誌背後挖掘出有價值的資訊,勾畫出平臺或網站的使用者畫像對精準化運營有著重要的幫助。阿里雲技術專家禕休帶來阿里在處理日誌、構建數倉上的最佳實踐分享。主要從數倉開發開始談起,重點講解了資料加工使用者畫像的五大步驟,最後進行了演示解析。
直播視訊回顧請點選
以下是精彩視訊內容整理:
資料融合加工-數倉開發
大資料倉儲特殊引擎提供我們一站式的PB級大資料倉儲解決方案,那麼,我們如何基於MaxCompute去構建倉庫,如何去幫資料進行清洗加工,然後去挖掘出有價值的資訊?MaxCompute2.0推出了一些新功能,比如說非結構化資料的處理, MaxCompute支援非結構化資料儲存在OSS上,以前的方式是通過資料整合工具或者自己去寫一些任務,將這些資料週期性或者一次性同步到MaxCompute上來,既有開發成本,又有運維成本,在2.0裡面我們支援直接建立外部表的方式連線資料來源,直接對資料進行處理。
在數倉上的開發規範如圖,從日誌資料、使用者基本資訊資料等裡面去挖掘出價值資訊,然後涉及到資料開發人員做一些ETL的設計,包括我們的一些開發編碼、設定,將任務提交到線上,線上上我們會遇到過去的一些資料運維工作,這些運維工作是不是可以在Dataworks裡面去完成?下面我們一起來了解操作細節。
- 需求分析
通常情況下會以一個這樣的鏈路圖去做使用者畫像,可以看到,使用者畫像通常情況下會包含兩個部分,動態資料和靜態資料。動態資料包括行為資料、頁面行為、交易資料,比如說你的使用者點選瀏覽資料等都可以放在動態的資料裡面去,比如說在我們的網站整個的訪問深度,是不是在頁面上形成了時長有多少,在某一整個鏈路上註冊開通再到資料開發的跳失率是多少等等;靜態資料更多的是關於人的一些屬性,比如說姓名、星座、年齡、長居地以及通常使用什麼樣的裝置去訪問我們的網站等等,所以有一些終端裝置的偏好資訊。
數倉建立
做數倉要進行數倉分層,底層是ODS層,通常情況下將原始的資料先採集到MaxCompute上來,對一些非結構化資料進行一定的結構化,包括一些資料的規範化, DWD層有我們的一些明細資料,我們要在這些資料之間能夠產生一些價值,做一些資料清潔工作、資料交換工作,將資料進行打包,再向上我們要根據資料去做一些公共指標加工和應用指標加工,比如PVUV的訪問、裝置的訪問等等。
- 原始日誌分析
原始資料可以通過這些欄位裡面去獲得什麼樣的資訊?一個日誌資訊裡面,包含使用者來訪問網站或者平臺IP地址、使用者登入名,然後通過一些欄位可以分析裝置資訊,比如說我們可以從使用者真實的資料裡面看到IP地址,包括什麼時間去訪問,訪問了我們哪一個頁面,使用了什麼樣的瀏覽器,瀏覽器內容是什麼,有的直接用手機端等等,我們可以通過這些資訊去挖掘出更多的資訊,比如說可以通過IP地址知道使用者長居住在哪個城市來訪問我們網站,通過user_agent欄位可以獲取裝置資訊,因為我們去訪問終端一些版本,設定可以通過這些資料進行一個結構化,然後把資料抽象處理。
使用者資訊表就是一張結構化的二維表,通常會包含一些使用者的資訊、性別、年齡、星座等等。
通過已有的這些資料,再去做使用者畫像時候可以看到,深色是已有資料,可以去刻畫出使用者在我們網站的瀏覽性,比如說整個網站的PVUV等等,通常訪問哪個頁面更高,然後在什麼時候去訪問。
- 資料開發
接下來進入資料開發階段,資料開發階段要去實現如圖邏輯,左邊ods_log_info_d這張表存著我們的日誌資訊,我們要去公開一個結構,將使用者IP地址解析出來一個一個地域資訊。右邊ods_log_info_d使用者的基本資訊已經是結構化了,這兩個資料通過UID進行關聯,JOIN成一張大表,原封未動的將我們的資料採集到MaxCompute上來,然後在DW層裡面做更多的關聯,關聯出一張使用者去訪問我們廣泛基本資訊的寬表,然後基於這個寬表之上,我們有一個IP地址,要知道這個使用者PV的具體資料,比如求平均值或者求在整個網站訪問的最佳深度等。
在建立表的時候怎麼更全面?我們發現,所有工作流任務、節點任務,包括我們的表,命名其實都有一個規則,如果你的資料量很大,通常情況下包含資料庫的倉庫分層、業務域、資料域和資料分析時間,這張表屬於DW層,這張表刻劃了一個使用者的基本資訊,這就表示這張表的資料是一天更新一次的,通過這樣一張表可以明確知道刻劃什麼樣的業務價值,讓依賴於這張表的下游同學可以快速認識這張表的資料分析時間,描述什麼樣的資訊。
另外,我們的IP去轉地域資訊,在公共雲版本上面函式是沒有對外開放的,所以需要去解決自定義的函式,但有一些函式不能滿足配置,比如說大寫轉成小寫,將IP轉成region如何去做,通常情況下我們會去寫一些Java去做這樣的事情。將這些函式、資源包註冊到MaxCompute上來,通過堆頭註冊上來,然後去對函式進行解析。
- 最佳實踐
我們強調每一個節點裡面最多輸出一張表,當你有多張表的時候,比如說任務失敗了,可能是因為其中某一條處理的邏輯失敗了,當你去重跑的時候,可能整個任務都要重新去跑,另外,你的輸出表表格一定要跟你的節點名稱一樣,這樣可以快速從你的輸出運維上,快速找到這張表的資料在哪個節點上沒有產生,是因為哪一些任務失敗了。
大家都知道,大資料裡面可能會有預測的insert overwrite,比如說測試資料任務時候會加資料庫,通常情況下會造成資料重複和資料產生,如果你去使用灰色的overwrite,或者是每一次的任務重跑或失敗之後,你要去手工再把這個任務調動起來,會根據你的分割槽表資料批量進行。這樣最多的好處是每一張表資料的產生,比如說程式碼加一些註釋,比如說整個SQL邏輯是處於什麼樣的,一定要在前面去進行相關的註釋。
在操作過程中,大家儘量去減少Select*操作,因為你的計算成本比較高,在2.0裡面我們已經開啟了全表推出,使用者去進行一個選表,上個月去拜訪什麼客戶,通常情況下每個月在平臺上消費3千多,在所有檢視資料的時候,沒有加分割槽的全表掃的計算成本很高,所以建議大家在去使用的過程中多加一個分割槽排檢,可以減少我們的計算成本。
在公共雲上,我們有一些公共雲的服務,還有一些私有化服務,比如說安全行業、金融行業,通常都需要將大資料部署穩定,我們的專案建立的一個或者兩個如何區分?通常情況下會有開發和生成,開發就交給資料開發團隊去把資料任務開發好、除錯好,然後釋出到生產環境上去,生產環境上更新一些配置的排程資訊,比如說按天、周、月等等去運維,對他的資料開發流程要求特別嚴,通常情況下有更多的事情發生,包的開發、測試,還有一些預發環境和生產,整個程式碼環境都會去詳細的進行運維,你去建立的時候,可以在專案配置中去除錯,比如說在開發專案裡面,通常情況是不開啟排程引數,就是說你建立的客戶提交之後,不會每天自動去排程,當你把任務釋出到生產的專案上面,根據你的配置更新每天去同步。
排程引數方面,比如說將資料如何去寫到一個最新的分割槽,比如說分公司24號對應的分割槽裡面,25是新的一些事情,如何去起到新對應25號的分割槽裡面去,我們提供這樣的引數,當你配置這樣的系統引數時候,每次在我們排程系統的時候會自動進行切換,一些日期不需要你每次手動去建立分割槽。
- 實驗操作
通常情況下,我們先去建立所謂的三張表,每張表簡單去適應如何分層,比方說第一層ODS層,第二層是DW層,從結構上面也可以看出來,每一個節點都是相當規則,當這張資料要同步到MaxCompute上,肯定是要建一個目標表,同樣有一張表可以儲存這張資料。然後建立工作流節點,接著建立自定義UDF,最後配置SQL節點和測試執行。
本文由雲棲志願小組毛鶴整理,編輯百見