简介
本教程通过使⽤数据湖构建(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/da…
Spark SQL ⽇期类型转换:https://spark.apache.org/docs…
近期数据湖流动
2021 年 6 月 24 日至 7 月 2 日工作日期间 实现该场景,即可支付 polo 衫一件。先到先得
支付地址:https://developer.aliyun.com/…