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
下載範例代碼,放在本地磁碟。
解壓後得到檔案夾:user_behavior_data,包含item和user兩個檔案夾,裡面分別包含了各自的CSV資料檔案。本次分析主要集中在user檔案中,資料內容如下。
user_id,item_id,behavior_type,user_geohash,item_category,time 98047837,232431562,1,,4245,2014-12-06 02 97726136,383583590,1,,5894,2014-12-09 20 98607707,64749712,1,,2883,2014-12-18 11 98662432,320593836,1,96nn52n,6562,2014-12-06 10 98145908,290208520,1,,13926,2014-12-16 21 93784494,337869048,1,,3979,2014-12-03 20 94832743,105749725,1,,9559,2014-12-13 20 95290487,76866650,1,,10875,2014-11-27 16 96610296,161166643,1,,3064,2014-12-11 23 100684618,21751142,3,,2158,2014-12-05 23 100509623,266020206,3,tfvomgk,4923,2014-12-08 17 101781721,139144131,1,9rgt162,3424,2014-12-13 21 103891828,255365467,1,96sjmho,552,2014-12-01 13 101260672,212072908,1,95q0is4,10984,2014-12-12 11將解壓後的user_behavior_data檔案夾上傳至OSS。詳情請參見簡單上傳。
上傳後目錄結構中,item和user為兩個表的資料檔案夾。
說明需刪除檔案夾中的.DS_Store檔案。
第三步:在DLF上抽取中繼資料
登入資料湖構建控制台。
建立資料庫。
在左側功能表列,選擇。
單擊数据库頁簽,選擇目標数据目录,單擊新建数据库。
配置以下資料庫資訊,單擊确定。
所属数据目录:選擇所屬資料目錄。
数据库名称::輸入資料庫名稱。
数据库描述:可選,輸入資料庫描述。
选择路径:選擇上一步中存有使用者行為分析資料user_behavior_data的OSS路徑。
資料庫建立成功。
中繼資料管理頁面的資料庫頁簽中,dlf_demo資料目錄下顯示資料庫default和demo_db,可通過操作列查看對應的表、函數或進行編輯和刪除。
進行DLF資料幫浦。
在左側導覽列,單擊。
在中繼資料抽取頁面,單擊新建抽取任务。參數配置詳情請參見中繼資料抽取。
填寫抽取源相關配置,單擊下一步。
配置樣本:抽取任務名稱設定為
dif_demo_extract,OSS路徑選擇目標資料路徑(如oss://<Bucket名稱>/dif/user_behavior_data/),解析格式選擇csv。在csv檔案配置地區,欄位分隔符號選擇逗號(,),表頭髮現選擇首行為表頭,引用標識選擇英文單引號(')。選擇要使用的目標資料庫,單擊下一步。
在 設定目標資訊 頁面,選擇 所屬資料目錄(例如
dlf_demo)和 目標資料庫(例如demo_db),按需填寫 目標資料表首碼。在 抽取任務發現表欄位更新時 中選擇處理策略(如 忽略更新,不修改任何錶);在 如何處理OSS中發現已刪除對象 中選擇處理策略(如 忽略更新,不刪除任何錶)。完成後單擊 下一步。設定抽取任務資訊。
RAM 角色:預設為開通階段已經授權的“AliyunDLFWorkFlowDefaultRole”。
执行策略:選擇手动执行。
抽取策略:選擇全量抽取。掃描全量資料檔案,在資料規模比較大時,作業消耗時間長,抽取結果更準確。
核對資訊後,單擊保存并立即执行。
確認頁面分為三個區塊:資料來源資訊(包括抽取任務名稱、OSS路徑、解析格式等)、目標資訊(包括所屬資料目錄、目標資料庫等)和任務配置(包括RAM角色、抽取策略、執行策略等)。
系統會跳轉到中繼資料抽取列表頁面,建立的任務開始建立並自動運行。在資料規模比較大時,作業消耗時間長。
待任務運行成功後,滑鼠移到狀態列的問號表徵圖,可看到已經成功建立了兩張中繼資料表。
浮層顯示抽取成功的兩張表分別為
demo_db.item和demo_db.user。
查詢資料表資訊。
單擊浮層中的数据库,單擊表列表頁簽,可查看該庫中相關的表資訊。
demo_db 資料庫的 表列表 中顯示 item 和 user 兩張表,表格式均為 CSV,資料目錄ID為 dlf_demo,儲存位置分別對應 OSS 上的
dlf/user_behavior_data/item和dlf/user_behavior_data/user路徑。單擊表名,查看並確認抽取出來的表結構是否符合預期。
本樣本中,資料表 user 的表類型為 EXTERNAL_TABLE,所屬資料庫為 demo_db,儲存格式為 CSV。普通列包含6個欄位:
user_id(int)、item_id(int)、behavior_type(int)、user_geohash(string)、item_category(int)、time(string),表結構與預期一致即可。表 item 的基本資料顯示:表類型為 EXTERNAL_TABLE,所屬資料庫 demo_db,儲存位置為
oss://xxx/dlf/user_behavior_data/item,儲存格式為 CSV,SerializationLib 為org.apache.hadoop.hive.serde2.OpenCSVSerde。普通列包含 3 個欄位:item_id(int)、item_geohash(string)、item_category(int)。
第四步:使用者行為資料分析
資料分析的過程主要分為三步:
預覽並檢查資料資訊。
簡單的資料清洗。
進行使用者活躍度、漏鬥模型和商品熱度分析。
預覽並檢查資料
在左側功能表列,單擊数据探索,在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`;demo_db.user 表查詢結果包含 user_id、item_id、behavior_type、user_geohash、item_category、time 六個欄位,預覽資料顯示 behavior_type 值均為 1,user_geohash 大多為空白,時間範圍為 2014-11-27 至 2014-12-18。demo_db.item 表查詢結果包含 item_id、item_geohash、item_category 三個欄位,其中 item_geohash 大多為空白。此外,統計查詢返回去重使用者數、去重商品數以及總行為記錄數,可用於瞭解資料集的整體規模。
資料預先處理
我們對未經處理資料進行一定的處理,以提高資料的可讀性,並提升分析的效能。
建立新表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`;使用者行為分析
首先,我們基於漏鬥模型,對所有使用者從點擊到加購、收藏、購買的轉化情況進行分析。
-- 漏鬥分析耗時13秒 SELECT behavior, COUNT(*) AS total FROM `demo_db`.`user_log` GROUP BY behavior ORDER BY total DESC查詢結果為:
click(點擊)共 11550581 次,cart(加購)共 343564 次,collect(收藏)共 242556 次,pay(付款)共 120205 次。然後對一周內每天的使用者行為做統計分析。
-- 使用者行為分析耗時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路徑)。設定後,查詢結果會被儲存到該路徑下。
單擊数据探索頁面右上方的路径设置,設定结果存储路径,可以選擇已有檔案夾或者建立檔案夾。
在彈出的 OSS直接選取 對話方塊中,確認路徑後單擊 確定。
設定完成後,運行SQL查詢,在运行历史頁簽的下载结果直接下載,也可以直接通過OSS路徑訪問和下載該檔案。
(可選)儲存SQL。
通過單擊保存,可以將本次分析用到的SQL進行儲存,後續可直接在已存查询中開啟,做進一步的調用及修改。
問題解答
如果您有任何問題或希望深入探討資料湖技術,歡迎在微信中搜尋並關注“資料湖技術圈”公眾號。