DLF產品(資料湖構建)提供中繼資料抽取和資料探索的功能,本文介紹如何通過DLF完成對淘寶使用者行為範例的分析。
前提條件
已建立OSS Bucket。如未建立,請參見建立儲存空間。
操作流程
服務開通:開通阿里雲帳號及DLF和OSS相關服務。
範例資料集下載和匯入:下載範例資料(CSV檔案),並上傳至OSS。
DLF資料幫浦:使用DLF資料幫浦,自動識別檔案Schema並建立中繼資料表。
DLF資料探索:使用DLF資料探索,對使用者行為進行分析,包括使用者活躍度、漏鬥模型等。
資料說明
本次測試的資料集來自阿里雲天池比賽中使用的淘寶使用者行為資料集,為了提高效能,我們做了一定的裁剪。資料集中以CSV的格式儲存了使用者行為及商品範例資料。
淘寶使用者行為資料集介紹:https://tianchi.aliyun.com/dataset/dataDetail?dataId=46
資料範圍:2014年12月1日 - 2014年12月7日
資料格式:
user表
欄位 | 欄位說明 | 提取說明 |
user_id | 使用者標識 | 抽樣&欄位脫敏(非真實ID) |
item_id | 商品標識 | 欄位脫敏(非真實ID) |
behavior_type | 使用者對商品的行為類型 | 包括瀏覽、收藏、加購物車、購買,對應取值分別是1、2、3、4。 |
user_geohash | 使用者位置的空間標識,可以為空白 | 由經緯度通過保密的演算法產生 |
item_category | 商品分類標識 | 欄位脫敏 (非真實ID) |
time | 行為時間 | 精確到小時層級 |
item表
欄位 | 欄位說明 | 提取說明 |
item_id | 商品標識 | 抽樣&欄位脫敏(非真實ID) |
item_ geohash | 商品位置的空間標識,可以為空白 | 由經緯度通過保密的演算法產生 |
item_category | 商品分類標識 | 欄位脫敏 (非真實ID) |
詳細流程
第一步:開通DLF和OSS服務
第二步:將需要分析的資料檔案上傳至OSS
第三步:在DLF上抽取中繼資料
登入資料湖構建控制台。
建立資料庫。
在左側功能表列,選擇
。單擊資料庫頁簽,選擇目標資料目錄,單擊建立資料庫。
配置以下資料庫資訊,單擊確定。
所屬資料目錄:選擇所屬資料目錄。
資料庫名稱:輸入資料庫名稱。
資料庫描述:可選,輸入資料庫描述。
選擇路徑:選擇上一步中存有使用者行為分析資料user_behavior_data的OSS路徑。
如下圖所示,資料庫建立成功。
進行DLF資料幫浦。
在左側導覽列,單擊
。在中繼資料抽取頁面,單擊建立抽取任務。參數配置詳情請參見中繼資料抽取。
填寫抽取源相關配置,單擊下一步。
選擇要使用的目標資料庫,單擊下一步。
設定抽取任務資訊。
RAM角色:預設為開通階段已經授權的“AliyunDLFWorkFlowDefaultRole”。
執行策略:選擇手動執行。
抽取策略:選擇全量抽取。掃描全量資料檔案,在資料規模比較大時,作業消耗時間長,抽取結果更準確。
核對資訊後,單擊儲存並立即執行。
系統會跳轉到中繼資料抽取列表頁面,建立的任務開始建立並自動運行。在資料規模比較大時,作業消耗時間長。
待任務運行成功後,滑鼠移到狀態列的問號表徵圖,可看到已經成功建立了兩張中繼資料表。
查詢資料表資訊。
單擊浮層中的資料庫,單擊表列表頁簽,可查看該庫中相關的表資訊。
單擊表名,查看並確認抽取出來的表結構是否符合預期。
第四步:使用者行為資料分析
資料分析的過程主要分為三步:
預覽並檢查資料資訊。
簡單的資料清洗。
進行使用者活躍度、漏鬥模型和商品熱度分析。
預覽並檢查資料
在左側功能表列,單擊資料探索,在SQL查詢方塊中輸入以下語句,查看檔案中的資料資訊。
SET spark.sql.legacy.timeParserPolicy=LEGACY;
-- 預覽資料
SELECT * FROM `demo_db`.`user` limit 10;
SELECT * FROM `demo_db`.`item` limit 10;
-- 使用者數
SELECT COUNT(DISTINCT user_id) FROM `demo_db`.`user`;
-- 商品數
SELECT COUNT(DISTINCT item_id) FROM `demo_db`.`item`;
-- 行為記錄數
SELECT COUNT(*) FROM `demo_db`.`user`;
結果如下:
資料預先處理
我們對未經處理資料進行一定的處理,以提高資料的可讀性,並提升分析的效能。
建立新表user_log,表格式為Parquet,按日期分區。
將behavior_type轉換成更易理解的字串資訊:1-click; 2-collect; 3-cart; 4-pay。
將日誌+時間的格式拆分為日期和小時兩列,再加上周資訊,便於分別做日期和小時層級的分析。
過濾掉不必要的欄位,並將資料存入新表user_log。
後續我們會基於新表做使用者行為分析。
CREATE TABLE `demo_db`.`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 `demo_db`.`user_log` limit 10;
結果如下:
使用者行為分析
首先,我們基於漏鬥模型,對所有使用者從點擊到加購、收藏、購買的轉化情況進行分析。
-- 漏鬥分析耗時13秒 SELECT behavior, COUNT(*) AS total FROM `demo_db`.`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 `demo_db`.`user_log` GROUP BY date, day_of_week ORDER BY date
結果如下(由於資料集經過裁剪,對於工作日和非工作日的結果有失真)。
最後,我們結合商品表,分析出資料集中最受歡迎的是個商品品類
-- 銷售最多的品類耗時1分10秒 SELECT item.item_category, COUNT(*) AS times FROM `demo_db`.`item` item JOIN `demo_db`.`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;
結果如下:
(可選)下載分析結果。
DLF提供將分析結果以CSV檔案的形式下載的功能,啟用該功能需要提前設定分析結果的儲存路徑(OSS路徑)。設定後,查詢結果會被儲存到該路徑下。
單擊資料探索頁面右上方的路徑設定,設定結果儲存路徑,可以選擇已有檔案夾或者建立檔案夾。
設定完成後,運行SQL查詢,在運行歷史頁簽的下載結果直接下載,也可以直接通過OSS路徑訪問和下載該檔案。
(可選)儲存SQL。
通過單擊儲存,可以將本次分析用到的SQL進行儲存,後續可直接在已存查詢中開啟,做進一步的調用及修改。
問題解答
如果您有任何問題或希望深入探討資料湖技術,歡迎在微信中搜尋並關注“資料湖技術圈”公眾號。