本文将为您介绍如何通过DataWorks,将已经采集至MaxCompute的日志数据进行加工并进行用户画像。

前提条件

开始本实验前,请首先完成数据采集:日志数据上传中的操作。

新建数据表

  1. 右键单击业务流程下的,选择新建表
  2. 新建表对话框中填写表名,单击提交

    此处需要创建3张表,分别为ODS层表(ods_log_info_d)、DW层表(dw_user_info_all_d)和RPT层表(rpt_user_info_d)。

  3. 打开创建的表,单击DDL模式,分别填写以下相应的建表语句。
    --创建ODS层表
    CREATE TABLE IF NOT EXISTS 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
    );
    --创建DW层表
    CREATE TABLE IF NOT EXISTS 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
    );
    --创建RPT层表
    CREATE TABLE IF NOT EXISTS 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
    );
    					
  4. 建表语句输入完成后,单击生成表结构确认覆盖当前操作。
  5. 返回建表页面后,在基本属性中输入表的中文名。
  6. 完成设置后,分别单击提交到开发环境提交到生产环境

设计业务流程

业务流程workshop及依赖关系的配置可以参见数据采集。向画布中拖入三个ODPS SQL节点,依次命名为ods_log_info_d、dw_user_info_all_d和rpt_user_info_d,并配置如下图所示的依赖关系。

创建用户自定义函数

  1. 下载ip2region.jar
  2. 右键单击资源,选择新建资源 > JAR

  3. 单击选择文件,选择已经下载到本地的ip2region.jar,单击提交

  4. 资源上传至DataWorks后,单击提交

  5. 右键单击函数,选择新建函数

  6. 输入函数名称getregion,选择所属的业务流程,单击提交

  7. 填写注册函数对话框的配置,单击保存提交

    配置 说明
    函数类型 选择函数类型。
    函数名 填写getregion。
    责任人 选择责任人。
    类名 填写org.alidata.odps.udf.Ip2Region。
    资源列表 填写ip2region.jar。
    描述: 填写IP地址转换地域。
    命令格式 填写getregion(‘ip’)。
    参数说明 填写IP地址。

配置ODPS SQL节点

  • 配置ods_log_info_d节点。
    1. 双击ods_log_info_d节点,进入节点配置页面。
    2. 编写处理逻辑。

      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;
    3. 单击左上角的保存按钮。
  • 配置dw_user_info_all_d节点。
    1. 双击dw_user_info_all_d节点,进入节点配置页面。
    2. 编写处理逻辑,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;
    3. 单击左上角的保存按钮。
  • 配置rpt_user_info_d节点。
    1. 双击rpt_user_info_d节点,进入节点配置页面。
    2. 编写处理逻辑,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;
    3. 单击左上角的保存按钮。

提交业务流程

  1. 单击提交按钮,提交业务流程中已配置完成的节点。

  2. 选择提交对话框中需要提交的节点,勾选忽略输入输出不一致的告警

  3. 单击提交

运行业务流程

  1. 单击运行,验证代码逻辑。

  2. 待所有任务运行完成显示绿色箭头后,单击左侧导航栏中的临时查询,进入临时查询面板。
  3. 右键单击临时查询,选择新建节点 > 临时查询

  4. 编写并执行SQL语句,查询任务运行结果,确认数据产出。

    查询语句如下所示:
    ---查看rpt_user_info_d数据情况。
    select * from rpt_user_info_d where dt=业务日期 limit 10;

发布业务流程

提交业务流程后,表示任务已进入开发环境。由于开发环境的任务不会自动调度,您需要将配置完成的任务发布至生产环境。
说明
  • 将任务发布至生产环境前,您需要对代码进行测试,确保其正确性。
  • 如果您使用的是简单模式的工作空间,则没有发布按钮,您可以直接前往运维中心
  1. 单击发布,进入发布页面。

  2. 选择待发布任务,单击添加到待发布

  3. 进入待发布列表,单击全部打包发布

  4. 发布包列表页面查看已发布内容。

在生产环境运行任务

  1. 任务发布成功后,单击运维中心
  2. 选择任务列表中的workshop业务流程。

  3. 右键单击DAG图中的workshop_start节点,选择补数据 > 当前节点及下游节点

  4. 勾选需要补数据的任务,输入业务日期,单击确定

    单击确定后,自动跳转至补数据任务实例页面。

  5. 单击刷新,直至SQL任务都运行成功即可。

后续步骤

现在,您已经学习了如何创建SQL任务、如何处理原始日志数据。您可以继续学习下一个教程,学习如何对开发完成的任务设置数据质量监控,保证任务运行的质量。详情请参见数据质量监控