阅读570 返回首页    go 魔兽


配置sql任务产出特征表__基础示例—完整数据开发_场景教程_大数据开发套件-阿里云

根据分析,产出特征表还需要两个中间表,且每个表产出都以ODPS SQL即可完成。本示例为了更形象的说明工作流配置,我们一个ODPS SQL节点产出一个表。所以需要创建3个ODPS SQL节点。具体操作如下:

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

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

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

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

tm_demo_workflow_1.JPG

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

tm_demo_workflow_2.JPG

步骤3:编辑ODPS SQL节点代码,与参数配置(内置调度时间参数说明请看章节数据开发手册 > 系统调度参数)。

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

1)节点b_cvr_demo代码与参数配置

--产出品牌转化率表,前3个月品牌的购买用户数/点击数
INSERT OVERWRITE TABLE b_cvr_demo PARTITION (dt=${bdp.system.bizdate})
SELECT brand_id
    , CASE 
        WHEN click_cnt > 0 THEN buy_cnt / click_cnt
        ELSE 0
    END AS cvr
FROM (
    SELECT brand_id
        , COUNT(DISTINCT CASE 
            WHEN type = '1' THEN user_id
            ELSE NULL
        END) AS buy_cnt
        , COUNT(DISTINCT CASE 
            WHEN type = '0' THEN user_id
            ELSE NULL
        END) AS click_cnt
    FROM s_user_brand_demo
    WHERE dt >= ${before3mont}
    GROUP BY brand_id
) t1;

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

参数配置如下图:

b_cvr_demo_param.JPG

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

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

2)节点ub_action_demo代码与参数配置

--产出用户偏好表,这里统计用户最近7天和最近3天的行为次数
INSERT OVERWRITE TABLE ub_action_demo PARTITION (dt=${bdp.system.bizdate})
SELECT user_id
    , brand_id
    , SUM(CASE 
        WHEN type = '1' THEN 1
        ELSE 0
    END) AS buy_cnt
    , SUM(CASE 
        WHEN type = '0'
        AND dt > '${before7days}' THEN 1
        ELSE 0
    END) AS click_d7
    , SUM(CASE 
        WHEN type = '2'
        AND dt > '${before7days}' THEN 1
        ELSE 0
    END) AS collect_d7
    , SUM(CASE 
        WHEN type = '3'
        AND dt > '${before7days}' THEN 1
        ELSE 0
    END) AS shopping_cart_d7
    , SUM(CASE 
        WHEN type = '0'
        AND dt > '${before3days}' THEN 1
        ELSE 0
    END) AS click_d3
    , SUM(CASE 
        WHEN type = '2'
        AND dt > '${before3days}' THEN 1
        ELSE 0
    END) AS collect_d3
    , SUM(CASE 
        WHEN type = '3'
        AND dt > '${before3days}' THEN 1
        ELSE 0
    END) AS shopping_cart_d3
FROM s_user_brand_demo
WHERE dt >= ${before7days} 
    and dt <= ${bdp.system.bizdate}
GROUP BY user_id, 
    brand_id;

参数配置如下图:

ub_action_demo_param.JPG

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

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

3)节点ub_features_demo代码与参数配置

INSERT OVERWRITE TABLE ub_features_demo PARTITION (dt=${bdp.system.bizdate})
SELECT t1.user_id
    , t1.brand_id
    , t1.buy_cnt
    , t1.click_d7
    , t1.collect_d7
    , t1.shopping_cart_d7
    , t1.click_d3
    , t1.collect_d3
    , t1.shopping_cart_d3
    , t2.cvr
FROM ub_action_demo t1
LEFT OUTER JOIN b_cvr_demo t2
ON t1.brand_id = t2.brand_id
    AND t1.dt = ${bdp.system.bizdate}
    AND t2.dt = ${bdp.system.bizdate};

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

步骤4:返回工作流设置器页面,点击保存QK_6_8

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

>>>下一步:测试任务>>>

最后更新:2016-11-23 16:04:08

  上一篇:go 配置数据导入任务__基础示例—完整数据开发_场景教程_大数据开发套件-阿里云
  下一篇:go 补数据__基础示例—完整数据开发_场景教程_大数据开发套件-阿里云