全部产品
存储与CDN 数据库 安全 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网
DataWorks(数据工场)

步骤6:配置SQL任务产出特征表

更新时间:2017-09-25 11:00:27

本示例为了更形象的说明工作流配置,一个 MaxCompute SQL 节点产出一个表。经分析需要创建 3 个 MaxCompute SQL 节点。

操作步骤

  1. 工作流(tmall_ub_features_demo)设计器的节点组件中向画布拖拽 3 个 MaxCompute SQL 节点组件,进行创建。

    • 节点名称分别为:b_cvr_demo、ub_action_demo、ub_features_demo。

    • 描述:对应上面的节点名称分别为:产出品牌转化率表、产出用户偏好表、产出用户-品牌所有特征表。

    此时看到工作流设计器上有 4 个 节点:1 个同步任务,3 个 MaxCompute SQL 任务,如下图所示:

  2. 配置节点依赖。

    根据前面的数据分析,中间表数据来自同步任务产出的源表,最终特征表数据来自两个中间表,因此,节点的依赖关系如下图所示:

  3. 编辑 MaxCompute SQL 节点代码,与参数配置(内置调度时间参数说明请参见 数据开发手册 > 系统调度参数)。

    分别双击 SQL 节点进入代码编辑页面进行代码编辑,代码如下:

    • 节点 b_cvr_demo 代码与参数配置

      1. --产出品牌转化率表,前3个月品牌的购买用户数/点击数
      2. INSERT OVERWRITE TABLE b_cvr_demo PARTITION (dt=${bdp.system.bizdate})
      3. SELECT brand_id
      4. , CASE
      5. WHEN click_cnt > 0 THEN buy_cnt / click_cnt
      6. ELSE 0
      7. END AS cvr
      8. FROM (
      9. SELECT brand_id
      10. , COUNT(DISTINCT CASE
      11. WHEN type = '1' THEN user_id
      12. ELSE NULL
      13. END) AS buy_cnt
      14. , COUNT(DISTINCT CASE
      15. WHEN type = '0' THEN user_id
      16. ELSE NULL
      17. END) AS click_cnt
      18. FROM s_user_brand_demo
      19. WHERE dt >= ${before3mont}
      20. GROUP BY brand_id
      21. ) t1;

      产出表分区表达式与前面数据同步任务分区表达式一致,每次运行读源表分区为前三个月分区,源表分区过滤条件 dt>=${before3mont}

      参数配置如下图:

      • ${bdp.system.bizdate} 变量在调度的时候会自动替换成业务日期,所以不需要赋值。

      • ${before3mont} 自定义变量需要在此赋值,因为是取前 3 个月的数据,所以可以去当前节点实例定时时间减 3 个月,即 $[add_months(YYYYMMDD,-3)]。

    • 节点 ub_action_demo 代码与参数配置

      1. --产出用户偏好表,这里统计用户最近7天和最近3天的行为次数
      2. INSERT OVERWRITE TABLE ub_action_demo PARTITION (dt=${bdp.system.bizdate})
      3. SELECT user_id
      4. , brand_id
      5. , SUM(CASE
      6. WHEN type = '1' THEN 1
      7. ELSE 0
      8. END) AS buy_cnt
      9. , SUM(CASE
      10. WHEN type = '0'
      11. AND dt > '${before7days}' THEN 1
      12. ELSE 0
      13. END) AS click_d7
      14. , SUM(CASE
      15. WHEN type = '2'
      16. AND dt > '${before7days}' THEN 1
      17. ELSE 0
      18. END) AS collect_d7
      19. , SUM(CASE
      20. WHEN type = '3'
      21. AND dt > '${before7days}' THEN 1
      22. ELSE 0
      23. END) AS shopping_cart_d7
      24. , SUM(CASE
      25. WHEN type = '0'
      26. AND dt > '${before3days}' THEN 1
      27. ELSE 0
      28. END) AS click_d3
      29. , SUM(CASE
      30. WHEN type = '2'
      31. AND dt > '${before3days}' THEN 1
      32. ELSE 0
      33. END) AS collect_d3
      34. , SUM(CASE
      35. WHEN type = '3'
      36. AND dt > '${before3days}' THEN 1
      37. ELSE 0
      38. END) AS shopping_cart_d3
      39. FROM s_user_brand_demo
      40. WHERE dt >= ${before7days}
      41. and dt <= ${bdp.system.bizdate}
      42. GROUP BY user_id,
      43. brand_id;

      参数配置如下图:

      • ${bdp.system.bizdate} 变量在调度的时候会自动替换成业务日期,所以不需要赋值。

      • ${before7days} 和 ${before3days} 需要的是业务日期的前7天和前3天,所以可以用调度时间参数 $[yyyymmdd-8] 和 $[yyyymmdd-4],即当前节点实例定时时间年月日减 8 天/减 4 天。

    • 节点ub_features_demo代码与参数配置

      1. INSERT OVERWRITE TABLE ub_features_demo PARTITION (dt=${bdp.system.bizdate})
      2. SELECT t1.user_id
      3. , t1.brand_id
      4. , t1.buy_cnt
      5. , t1.click_d7
      6. , t1.collect_d7
      7. , t1.shopping_cart_d7
      8. , t1.click_d3
      9. , t1.collect_d3
      10. , t1.shopping_cart_d3
      11. , t2.cvr
      12. FROM ub_action_demo t1
      13. LEFT OUTER JOIN b_cvr_demo t2
      14. ON t1.brand_id = t2.brand_id
      15. AND t1.dt = ${bdp.system.bizdate}
      16. AND t2.dt = ${bdp.system.bizdate};

      ${bdp.system.bizdate}变量在调度的时候会自动替换成业务日期,所以不需要赋值,代码中没用到其他自定义变量名,所以不需要配置参数。

  4. 返回工作流设置器页面,单击 保存

    至此,已完成本示例的工作流配置,但要想让工作流根据配置每天自动调度,还需要把工作流提交到调度系统,即在工作流设计页面(整体视图页面)单击 提交,在变更节点列表中选择所有节点并单击 确定提交,提交成功则成功的把工作流提交到调度服务。

后续步骤

现在,您已经学习了如何通过 MaxCompute SQL 对数据进行加工处理,并产出最终目标表,您可以继续学习下一个教程。在该教程中您将学习如何测试工作流。详情请参见 测试任务

本文导读目录