大数据workshop:《云数据·大计算:海量日志数据分析与应用》之《数据加工:用户画像》篇

简介: 本手册为阿里云MVP《云计算·大数据:海量日志数据分析与应用》的《数据加工:用户画像》篇而准备。主要阐述在使用大数据开发套件过程中如何将已经采集至MaxCompute上的日志数据进行加工并进行用户画像,学员可以根据本实验手册,去学习如何创建SQL任务、如何处理原始日志数据。

阿里云MVP Meetup:《云数据·大计算:海量日志数据分析与应用》之《数据加工:用户画像》篇

实验背景介绍

本手册为阿里云MVP Meetup Workshop《云计算·大数据:海量日志数据分析与应用》的《数据加工:用户画像》篇而准备。主要阐述在使用大数据开发套件过程中如何将已经采集至MaxCompute上的日志数据进行加工并进行用户画像,学员可以根据本实验手册,去学习如何创建SQL任务、如何处理原始日志数据。

实验涉及大数据产品

实验环境准备

必备条件:

  • 开通大数据计算服务MaxCompute
  • 创建大数据开发套件项目空间

进入大数据开发套件

确保阿里云账号处于登录状态。

项目列表

  • step2:点击已经创建的项目空间名称,进入大数据开发套件。

点击进入项目

进入大数据开发套件

新建数据表

若在实验《数据采集:日志数据上传》中已经新建脚本文件,可以直接切换至脚本开发tab下,双击打开create_table_ddl脚本文件。若无新建脚本文件可通过如下详细步骤进行创建脚本文件。

1.新建ods_log_info_d表

  • step1:点击数据开发,进入数据开发首页中点击新建脚本

新建脚本

  • step2:配置文件名称为create_table_ddl,类型选择为ODPS SQL,点击提交

配置脚本

  • step3:编写DDL创建表语句。
    编写DDL

DDL建表语句如下:

CREATE TABLE ods_log_info_d (
    ip STRING COMMENT 'ip地址',
    uid STRING COMMENT '用户ID',
    time STRING COMMENT '时间yyyymmddhh:mi:ss',
    status STRING COMMENT '服务器返回状态码',
    bytes STRING COMMENT '返回给客户端的字节数',
    region STRING COMMENT '地域,根据ip得到',
    method STRING COMMENT 'http请求类型',
    url STRING COMMENT 'url',
    protocol STRING COMMENT 'http协议版本号',
    referer STRING COMMENT '来源url',
    device STRING COMMENT '终端类型 ',
    identity STRING COMMENT '访问类型 crawler feed user unknown'
)
PARTITIONED BY (
    dt STRING
);
  • step4:选择需要执行的SQL语句,点击运行,直至日志信息返回成功表示表创建成功。

运行DDL

  • step5:可以使用desc语法来确认创建表是否成功。

DESC

  • step6:点击保存,保存编写的SQL建表语句。

保存DDL

2.新建dw_user_info_all_d表

创建表方法同上,本小节附建表语句:

---创建dw_user_info_all_d表
drop table if exists dw_user_info_all_d;

CREATE TABLE dw_user_info_all_d (
    uid STRING COMMENT '用户ID',
    gender STRING COMMENT '性别',
    age_range STRING COMMENT '年龄段',
    zodiac STRING COMMENT '星座',
    region STRING COMMENT '地域,根据ip得到',
    device STRING COMMENT '终端类型 ',
    identity STRING COMMENT '访问类型 crawler feed user unknown',
    method STRING COMMENT 'http请求类型',
    url STRING COMMENT 'url',
    referer STRING COMMENT '来源url',
    time STRING COMMENT '时间yyyymmddhh:mi:ss'
)
PARTITIONED BY (
    dt STRING
);

3.新建rpt_user_info_d表

创建表方法同上,本小节附建表语句:

---创建rpt_user_info_d表
DROP TABLE IF EXISTS rpt_user_info_d;

CREATE TABLE rpt_user_info_d (
    uid STRING COMMENT '用户ID',
    region STRING COMMENT '地域,根据ip得到',
    device STRING COMMENT '终端类型 ',
    pv BIGINT COMMENT 'pv',
    gender STRING COMMENT '性别',
    age_range STRING COMMENT '年龄段',
    zodiac STRING COMMENT '星座'
)
PARTITIONED BY (
    dt STRING
);

上述三张表创建成功后,保存脚本文件。
保存脚本文件

工作流设计

若成功完成实验《数据采集:日志数据上传》,即可切换至任务开发tab中,双击打开workshop工作流任务。

打开工作流任务

向画布中拖入三个ODPS SQL节点,依次命名为ods_log_info_d、dw_user_info_all_d、rpt_user_info_d,并配置依赖关系如下:

SQL依赖关系

若未完成实验《数据采集:日志数据上传》篇,可通过进入查看如何创建工作流任务。

创建自定义函数

  • step1:点击下载ip2region.jar.
  • step2:切换至资源管理tab页,点击上传按钮。

进入资源管理

  • step3:点击选择文件,选择已经下载到本地的ip2region.jar。

资源上传

  • step4:点击提交
  • step5:切换至函数管理tab,点击创建函数按钮。

进入函数管理

  • step6:资源选择ip2region.jar,其他配置项如下所示。

新建函数

配置项说明如下:

  • 函数名:getregion
  • 类名:org.alidata.odps.udf.Ip2Region
  • 资源:ip2region.jar
  • step7:点击提交

配置ODPS SQL节点

1)配置ods_log_info_d节点:

  • step1:双击ods_log_info_d节点,进入节点配置界面,编写处理逻辑。

ODS

附SQL逻辑如下:

INSERT OVERWRITE TABLE ods_log_info_d PARTITION (dt=${bdp.system.bizdate})
SELECT ip
    , uid
    , time
    , status
    , bytes -- 使用自定义UDF通过ip得到地域
    , getregion(ip) AS region -- 通过正则把request差分为三个字段
    , regexp_substr(request, '(^[^ ]+ )') AS method
    , regexp_extract(request, '^[^ ]+ (.*) [^ ]+$') AS url
    , regexp_substr(request, '([^ ]+$)') AS protocol -- 通过正则清晰refer,得到更精准的url
    , regexp_extract(referer, '^[^/]+://([^/]+){1}') AS referer -- 通过agent得到终端信息和访问形式
    , CASE 
        WHEN TOLOWER(agent) RLIKE 'android' THEN 'android'
        WHEN TOLOWER(agent) RLIKE 'iphone' THEN 'iphone'
        WHEN TOLOWER(agent) RLIKE 'ipad' THEN 'ipad'
        WHEN TOLOWER(agent) RLIKE 'macintosh' THEN 'macintosh'
        WHEN TOLOWER(agent) RLIKE 'windows phone' THEN 'windows_phone'
        WHEN TOLOWER(agent) RLIKE 'windows' THEN 'windows_pc'
        ELSE 'unknown'
    END AS device
    , CASE 
        WHEN TOLOWER(agent) RLIKE '(bot|spider|crawler|slurp)' THEN 'crawler'
        WHEN TOLOWER(agent) RLIKE 'feed'
        OR regexp_extract(request, '^[^ ]+ (.*) [^ ]+$') RLIKE 'feed' THEN 'feed'
        WHEN TOLOWER(agent) NOT RLIKE '(bot|spider|crawler|feed|slurp)'
        AND agent RLIKE '^[Mozilla|Opera]'
        AND regexp_extract(request, '^[^ ]+ (.*) [^ ]+$') NOT RLIKE 'feed' THEN 'user'
        ELSE 'unknown'
    END AS identity
FROM (
    SELECT SPLIT(col, '##@@')[0] AS ip
        , SPLIT(col, '##@@')[1] AS uid
        , SPLIT(col, '##@@')[2] AS time
        , SPLIT(col, '##@@')[3] AS request
        , SPLIT(col, '##@@')[4] AS status
        , SPLIT(col, '##@@')[5] AS bytes
        , SPLIT(col, '##@@')[6] AS referer
        , SPLIT(col, '##@@')[7] AS agent
    FROM ods_raw_log_d
    WHERE dt = ${bdp.system.bizdate}
) a;
  • step2:点击保存

保存ODS

  • step3:点击返回,返回至工作流开发面板。

返回工作流任务

2)配置dw_user_info_all_d节点:

  • step1:双击dw_user_info_all_d节点,进入节点配置界面,编写处理逻辑。

DW

附SQL语句如下:

INSERT OVERWRITE TABLE dw_user_info_all_d PARTITION (dt='${bdp.system.bizdate}')
SELECT COALESCE(a.uid, b.uid) AS uid
    , b.gender
    , b.age_range
    , b.zodiac
    , a.region
    , a.device
    , a.identity
    , a.method
    , a.url
    , a.referer
    , a.time
FROM (
    SELECT *
    FROM ods_log_info_d
    WHERE dt = ${bdp.system.bizdate}
) a
LEFT OUTER JOIN (
    SELECT *
    FROM ods_user_info_d
    WHERE dt = ${bdp.system.bizdate}
) b
ON a.uid = b.uid;
  • step2:点击保存
  • step3:点击返回,返回至工作流开发面板。

配置rpt_user_info_d节点

  • step1:双击进入rpt_user_info_d节点进入配置界面。

rpt

附SQL代码如下:

INSERT OVERWRITE TABLE rpt_user_info_d PARTITION (dt='${bdp.system.bizdate}')
SELECT uid
    , MAX(region)
    , MAX(device)
    , COUNT(0) AS pv
    , MAX(gender)
    , MAX(age_range)
    , MAX(zodiac)
FROM dw_user_info_all_d
WHERE dt = ${bdp.system.bizdate}
GROUP BY uid;
  • step2:点击保存
  • step3:点击返回,返回至工作流开发面板。

提交工作流任务

  • step1:点击提交,提交已配置的工作流任务。

提交工作流

  • step2:在变更节点列表弹出框中点击确定提交

变更节点列表

提交成功后工作流任务处于只读状态,如下:

只读状态

通过补数据功能测试新建的SQL任务

鉴于在数据采集阶段已经测试了数据同步任务,本节中直接测试下游SQL任务即可,也保证了时效性。

  • step1:进入运维中心 > 任务列表,找到workshop工作流任务。

工作流任务

  • step2:单击名称展开工作流。

![进入节点试图]image

  • step3:选中ods_log_info_d节点,单击补数据

![选择补数据节点]image

  • step4:在补数据节点对话框中全选节点名称,选择业务日期,点击运行选中节点

补数据节点列表

自动跳转到补数据任务实例页面。

  • step5:输入字母‘d’,通过过滤条件刷新,直至SQL任务都运行成功即可。

展开子节点

确认数据是否成功写入MaxCompute相关表

  • step1:返回到create_table_ddl脚本文件中。
  • step2:编写并执行sql语句查看rpt_user_info_d数据情况。。

数据预览

附录:SQL语句如下。

---查看rpt_user_info_d数据情况
select * from rpt_user_info_d limit 10;
相关实践学习
简单用户画像分析
本场景主要介绍基于海量日志数据进行简单用户画像分析为背景,如何通过使用DataWorks完成数据采集 、加工数据、配置数据质量监控和数据可视化展现等任务。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
目录
相关文章
|
23天前
|
数据可视化 算法 数据挖掘
探索Python在数据分析中的应用
在这篇文章中,我们将深入探讨Python语言在数据分析领域的强大应用。Python,作为一门简洁、易学且功能强大的编程语言,已经成为数据科学家和分析师的首选工具之一。本文不仅会介绍Python在数据处理、清洗、分析和可视化方面的关键库,如Pandas、NumPy、Matplotlib和Seaborn,而且还会通过实际案例展示这些库如何被用于解决实际问题。我们的目标是为读者提供一个清晰的指南,帮助他们理解Python在数据分析中的潜力,并鼓励他们开始自己的数据分析项目。
|
23天前
|
机器学习/深度学习 数据可视化 数据挖掘
深入浅出:Python在数据分析中的应用
在当今数据驱动的时代,Python已经成为了数据分析不可或缺的工具之一。本文旨在探讨Python在数据分析领域的应用,通过介绍其在数据处理、数据可视化以及机器学习三个方面的实践应用,展现Python如何帮助数据分析师高效、灵活地处理数据,从而洞察数据背后的价值。我们将深入浅出地讲解Python各个功能库的使用方法,包括Pandas用于数据处理,Matplotlib和Seaborn用于数据可视化,以及Scikit-learn用于机器学习,旨在为读者提供一个全面、实用的Python数据分析指南。
|
1天前
|
数据挖掘 大数据 数据处理
Python在数据分析中的应用
【2月更文挑战第7天】传统的数据分析方法已经不能满足当今大数据环境下的需求,Python作为一种高效、灵活的编程语言,被广泛应用于数据分析领域。本文将介绍Python在数据分析中的优势以及其常用库和工具,并结合实际案例说明Python在数据分析中的应用。
|
1天前
|
机器学习/深度学习 数据可视化 数据挖掘
Python技术应用:数据分析与可视化的利器
【2月更文挑战第7天】在当今信息爆炸的时代,数据分析和可视化已经成为各行业的核心竞争力。Python作为一种简洁、高效的编程语言,为数据分析带来了全新的可能性。本文将介绍Python在数据分析和可视化领域的应用,探讨其在实际工作中的重要性和价值。
|
1天前
|
机器学习/深度学习 人工智能 数据挖掘
Python在数据分析中的应用及未来发展趋势
【2月更文挑战第7天】传统的数据分析方法已经无法满足当今大数据时代的需求,Python作为一种高效、灵活的编程语言,在数据分析领域扮演着越来越重要的角色。本文将探讨Python在数据分析中的应用现状,并对其未来发展趋势进行展望。
|
1天前
|
机器学习/深度学习 数据可视化 数据挖掘
Python在数据分析中的应用及其优势
【2月更文挑战第7天】 本文将探讨Python在数据分析领域的应用及其优势,着重介绍了Python在处理大规模数据、可视化分析和机器学习等方面的特点。通过实际案例和技术原理的介绍,帮助读者深入了解Python在数据分析中的价值和作用。
11 0
|
1天前
|
机器学习/深度学习 数据采集 数据可视化
Python在数据分析中的重要性与应用
【2月更文挑战第7天】随着数据量的爆炸式增长,数据分析在各行各业中扮演着越来越重要的角色。本文将探讨Python作为一种强大的数据分析工具在实际应用中的重要性,以及其在数据清洗、可视化和模型建立等方面的优势和应用。
|
1天前
|
机器学习/深度学习 数据采集 数据可视化
Python在数据分析中的应用与优势
【2月更文挑战第7天】随着大数据时代的到来,数据分析逐渐成为各行各业的重要工具。本文探讨了Python作为一种强大的数据分析工具在实际应用中的优势和特点,介绍了其在数据清洗、可视化、机器学习等方面的应用,展示了Python在数据分析领域的重要性和灵活性。
|
1天前
|
机器学习/深度学习 算法 数据挖掘
Python在数据分析中的应用与未来发展
【2月更文挑战第6天】 随着数据时代的到来,数据分析技术在各行各业中发挥着越来越重要的作用。Python作为一种高效、灵活的编程语言,被广泛运用于数据分析领域。本文将探讨Python在数据分析中的应用场景、优势以及未来发展趋势,旨在帮助读者更好地了解Python在数据分析领域的价值和潜力。
|
2天前
|
数据可视化 数据挖掘 大数据
Python数据分析中的数据可视化技术应用
数据可视化是数据分析中至关重要的一环,能够帮助分析师和决策者更直观地理解数据。本文将介绍Python数据分析中常用的数据可视化技术,包括Matplotlib、Seaborn和Plotly,并结合实际案例演示它们在数据分析中的应用。

相关产品

  • 云原生大数据计算服务 MaxCompute