簡介
本教程通過使⽤資料湖建構(DLF)産品對于淘寶⽤戶⾏為樣例資料的分析,介紹DLF産品的資料發現和資料探索功能。教程内容包括:1. 服務開通:開通阿⾥雲賬号及DLF/OSS相關服務2. 樣例資料集下載下傳和導⼊:下載下傳樣例資料(csv⽂件),并上傳⾄OSS3. DLF資料發現:使⽤DLF⾃動識别⽂件Schema并建立中繼資料表4. DLF資料探索:使⽤DLF資料探索,對⽤戶⾏為進⾏分析,包括⽤戶活躍度、漏⽃模型等
資料說明
本次測試的資料集來⾃阿⾥雲天池⽐賽中使⽤的淘寶⽤戶⾏為資料集,為了提⾼性能,我們做了⼀定的裁剪。資料集中以csv的格式存儲了⽤戶⾏為及商品樣例資料。資料範圍:2014年12⽉1⽇ - 2014年12⽉7⽇資料格式:
開通DLF和OSS服務(如已開通,直接跳轉⾄第⼆步)
1.1 登入阿⾥雲賬号,點選進⼊
DLF控制台⻚⾯。
1.2 開通DLF及其依賴OSS服務,并完成授權。(如果已開通可直接跳過)
若之前未開通過DLF服務,會提示⽤戶開通服務。點選“開通服務”,進⼊服務開通⻚⾯。

開通服務後,傳回DLF控制台⻚⾯。會提示開通OSS服務,以及授予DLF通路依賴資料源的權限。點選按 鈕完成OSS開通及授權。回到DLF控制台⻚⾯,點選重新整理檢查狀态。⻚⾯⾃動跳轉⾄DLF控制台主⻚⾯。
1.3 開通完成後,進⼊DLF控制台主⻚:
在OSS中導⼊需要分析的資料
2.1 點選
連結,下載下傳樣例代碼⾄本地磁盤。
解壓後得到⽂件夾:user_behavior_data,包含item和user個⽂件夾,⾥⾯分别包含了各⾃的csv資料⽂ 件。本次分析主要集中在user⽂件中,資料内容如下。
2.2 将⽂件上傳⾄OSS 進⼊OSS控制台,上傳⽂件使⽤已有的Bucket,或建立新的Bucket。
上傳解壓後的user_behavior_data⽂件夾。上傳後⽬錄結構如下所示,item和user為兩個表的資料⽂件夾。
在DLF上抽取中繼資料
3.1 建立中繼資料表
DLF中中繼資料庫可以了解為在關系型資料庫中的Database,其下⼀級為Table。
在
DLF控制台中,進⼊中繼資料庫⻚⾯,建立中繼資料庫。
填⼊資料庫名稱。并選擇剛才存有⽤戶⾏為分析的
如下圖所示,中繼資料庫建立成功。
3.2 發現OSS⽂件中的中繼資料表資訊
進⼊
DLF中繼資料抽取⻚⾯,點選“建立抽取任務”
填寫資料源相關配置,點選下⼀步
選擇過程中需要⽤到的RAM⻆⾊,預設為開通階段已經授權的“AliyunDLFWorkFlowDefaultRole”。運⾏模式 選擇“⼿動執⾏”。抽取政策選擇“快速模式”以最快的速度完成中繼資料發現。
核對資訊後,點選“儲存并⽴即執⾏”。
系統會跳轉到中繼資料抽取清單⻚⾯,建立的任務開始建立并⾃動運⾏。
約10秒後任務運⾏完成。約10秒後任務運⾏完成。⿏标移到狀态欄的問号圖示,會看到已經成功建立了兩張中繼資料表。
點選浮層中的“中繼資料庫”連結,可直接檢視該庫中相關的表資訊。
點選表詳情,檢視并确認抽取出來的表結構是否符合預期。
⾄此,我們通過DLF⾃動發現資料湖CSV⽂件Schema的過程已經完成。下⼀步我們開始針對資料湖内的數 據做分析。
⽤戶⾏為資料分析
4.1 資料分析概述
在DLF控制台⻚⾯,點選菜單“資料探索”-“Spark SQL”,進⼊資料探索頁面。
資料分析的過程主要分為三步:
- 預覽并檢查資料資訊。
- 簡單的資料清洗。
- 進⾏⽤戶活躍度、漏⽃模型和商品熱度分析。
4.2 預覽并檢查資料
在查詢框輸⼊下⾯的語句,檢視⽂件中的資料資訊。
-- 預覽資料
select * from `dlf_demo ` . ` user ` limit 10;
select * from `dlf_demo ` . `item ` limit 10;
-- ⽤戶數 17970
select COUNT(DISTINCT user_id) from `dlf_demo ` . ` user ` ;
-- 商品數 422858
select COUNT(DISTINCT item_id) from `dlf_demo ` . `item ` ;
-- ⾏為記錄數 746024
select COUNT(*) from `dlf_demo ` . ` user ` ;
資料内容如下:
4.3 資料預處理
我們對原始資料進⾏⼀定的處理,已提⾼資料的可讀性,并提⾼分析的性能。 将behavior_type修改成更好了解的字元串資訊;将⽇志+時間的格式打平到兩個單獨的列,再加上周信 息,便于分别做⽇期和⼩時級别的分析;過濾掉不必要的字段。并将資料存⼊新表user_log,表格式為 Parquet,按⽇期分區。後續我們會基于新表做⽤戶⾏為分析。
-- 資料轉換 耗時約40秒-- 建立新表user_log,parquet格式,按⽇期分區
-- 導⼊資料,拆分⽇期和⼩時,并将behavoior轉換成可讀性更好的值
-- 1-click; 2-collect; 3-cart; 4-pay
create table `dlf_demo ` . ` user_log `
USING PARQUET
PARTITIONED BY (date)
as select
user_id,
item_id,
CASE
WHEN behavior_type = 1 THEN 'click'
WHEN behavior_type = 2 THEN 'collect'
WHEN behavior_type = 3 THEN 'cart'
WHEN behavior_type = 4 THEN 'pay'
END as behavior,
item_category,
time,
date_format(time, 'yyyy-MM-dd') as date,
date_format(time, 'H') as hour,
date_format(time, 'u') as day_of_week
from `dlf_demo ` . ` user ` ;
-- 檢視運⾏後的資料
select * from `dlf_demo ` . ` user_log ` limit 10;
4.4 ⽤戶⾏為分析
⾸先,我們基于漏⽃模型,對所有⽤戶從點選到加購/收藏到購買的轉化情況。
-- 漏⽃分析 耗時13秒
SELECT behavior, COUNT(*) AS total FROM `dlf_demo ` . ` user_log ` GROUP BY behavior ORDER BY total DESC
結果如下:
然後我們⼀周内每天的⽤戶⾏為做統計分析
-- ⽤戶⾏為分析 耗時 14秒
SELECT date, day_of_week
COUNT(DISTINCT(user_id)) as uv,
SUM(CASE WHEN behavior = 'click' THEN 1 ELSE 0 END) AS click,
SUM(CASE WHEN behavior = 'cart' THEN 1 ELSE 0 END) AS cart,
SUM(CASE WHEN behavior = 'collect' THEN 1 ELSE 0 END) AS collect,
SUM(CASE WHEN behavior = 'pay' THEN 1 ELSE 0 END) AS pay
FROM `dlf_demo ` . ` user_log `
GROUP BY date, day_of_week
ORDER BY date
分析結果如下:(由于資料集經過裁剪,對于⼯作⽇和⾮⼯作⽇的結果有失真)
最後,我們結合商品表,分析出資料集中最受歡迎的是個商品品類
-- 銷售最多的品類 耗時 1分10秒
SELECT item.item_category, COUNT(*) AS times
FROM `dlf_demo ` . `item ` item
JOIN `dlf_demo ` . ` user_log ` log
ON item.item_id = log.item_id
WHERE log.behavior= 'pay'
GROUP BY item.item_category
ORDER BY times DESC
LIMIT 10;
4.5 下載下傳分析結果
DLF提供将分析結果以CSV⽂件的形式下載下傳的功能,啟⽤該功能需要提前設定分析結果的儲存路徑(OSS 路徑)。設定後,查詢結果會被儲存到該路徑下。⽤戶可以通過DLF⻚⾯上的“下載下傳”按鈕直接下載下傳,也可 以直接通過OSS通路和下載下傳該⽂件。 通過點選⻚⾯上的“路徑設定”按鈕進⾏設定。
可以選擇已有⽂件夾或者建立⽂件夾。
4.6 儲存SQL
通過點選“儲存”按鈕,可以将該次分析⽤到的sql儲存,後續可以直接在“已存查詢”中打開做進⼀步的調⽤ 及修改。
總結
本⽂通過⼀個簡單的淘寶⽤戶⾏為分析案例,介紹并實踐了資料湖建構(DLF)産品的中繼資料發現和資料 探索功能。
有任何問題,或希望進⼀步探讨資料湖技術,歡迎掃碼加⼊資料湖技術群,關注資料湖技術圈。
參考
天池 淘寶⽤戶⾏為資料集:
https://tianchi.aliyun.com/dataset/dataDetail?dataId=46Spark SQL ⽇期類型轉換:
https://spark.apache.org/docs/latest/sql-ref-datetime-pattern.html