570
魔兽
配置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任务如下图:
步骤2:配置节点依赖。根据前面的数据分析,中间表数据来自同步任务产出的源表,最终特征表数据来自两个中间表,因此,节点的依赖关系如下图:
步骤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}
参数配置如下图:
${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;
参数配置如下图:
${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:返回工作流设置器页面,点击保存。
到此,本示例的工作流配置算是已经完成,但是要想让工作流根据配置每天自动调度,还需要把工作流提交到调度系统,即在工作流设计页面(整体视图页面)点击提交,在变更节点列表中选择所有节点并点击确定提交,提交成功则成功的把工作流提交到调度服务。
最后更新:2016-11-23 16:04:08
上一篇:
配置数据导入任务__基础示例—完整数据开发_场景教程_大数据开发套件-阿里云
下一篇:
补数据__基础示例—完整数据开发_场景教程_大数据开发套件-阿里云
监控数据__监控_用户指南_负载均衡-阿里云
MapReduce开发插件介绍__Eclipse开发插件_工具_大数据计算服务-阿里云
报表管理__制作报表_Quick BI-阿里云
创建虚拟服务器组__实例管理_用户指南_负载均衡-阿里云
释放弹性公网 IP__网络相关接口_API 参考_云服务器 ECS-阿里云
下拉提示操作__JavaSDK手册_SDK参考手册_开放搜索-阿里云
产品概要__产品简介_云服务总线 CSB-阿里云
授权安全组规则__安全组_用户指南_云服务器 ECS-阿里云
普通云盘状态图__附录_API 参考_云服务器 ECS-阿里云
自适应方向__图片旋转_图片处理指南_对象存储 OSS-阿里云
相关内容
常见错误说明__附录_大数据计算服务-阿里云
发送短信接口__API使用手册_短信服务-阿里云
接口文档__Android_安全组件教程_移动安全-阿里云
运营商错误码(联通)__常见问题_短信服务-阿里云
设置短信模板__使用手册_短信服务-阿里云
OSS 权限问题及排查__常见错误及排除_最佳实践_对象存储 OSS-阿里云
消息通知__操作指南_批量计算-阿里云
设备端快速接入(MQTT)__快速开始_阿里云物联网套件-阿里云
查询API调用流量数据__API管理相关接口_API_API 网关-阿里云
使用STS访问__JavaScript-SDK_SDK 参考_对象存储 OSS-阿里云