使用dataworks投递日志服务数据到MaxComputer

1. 为什么使用dataworks投递数据

日志服务提供了多种投递数据的方式,如: 在控制台直接配置投递任务,通过消费组获取数据然后再投递,以及使用dataworks配置投递任务等方式。
控制台直接投递配置方式与dataworks类似,不过配置项更少,更容易操作。消费组方式是先将数据通过消费组拖拽到本地,之后再调用MaxComputer的写入接口完成投递,相比较另外两种在页面上配置任务的方式更加复杂。

复杂度 投递系统字段 是否能够投递历史数据 周期设置 跨region投递
直接投递 不支持 不支持 30或60分钟 不支持
dataworks投递 支持 支持 5分钟 -- 1月 支持
消费组投递 非常高 支持 支持 实时 支持

参考如上表格内容,使用dataworks进行日志投递功能比较强大,而且配置比较方便。

2. 投递流程

2.1 总览

首先,需要确定日志服务中存在可供投递的数据;
然后,在dataworks中创建工作空间,以及日志服务、MaxComputer的数据源;
在MaxComputer中创建目标表;
最后创建投递任务、配置周期任务参数。

2.2 详细步骤

2.2.1 创建LogHub数据源

使用dataworks投递日志服务数据到MaxComputer  
使用dataworks投递日志服务数据到MaxComputer
配置中需要指定project、endpoint等信息,由于日志服务是不区分环境的,所以可以同时创建dataworks中开发、生产两个环境的数据源。
配置完成之后点击测试连通性,出现弹窗测试连通性成功,则表示可以在dataworks使用了,如果有其他报错,根据具体的报错信息修改配置信息。

2.2.2 创建MaxComputer目标表

使用dataworks投递日志服务数据到MaxComputer
如图,需要创建分区表。由于日志服务中字段存储多为text类型,所以目标表字段类型建议设置为String;
测试字段如下: 
使用dataworks投递日志服务数据到MaxComputer使用dataworks投递日志服务数据到MaxComputer

2.2.3 投递任务及字段映射

下图中配置的开始、结束时间是测试时使用的,也可以将日志服务中的历史数据导入到odps中。
使用dataworks投递日志服务数据到MaxComputer

投递配置中日志服务系统字段的映射情况如下图,__tag__:开头的字段使用冒号后面的内容,__time__、__source__、__topic__则分别使用C_LogTime、C_Source、C_Topic代替。其他业务字段不变。
使用dataworks投递日志服务数据到MaxComputer

日志服务中的数据:
使用dataworks投递日志服务数据到MaxComputer

投递到maxComputer之后的效果如下图,日志服务中没有的字段投递过来之后值为N 空的意思,下图进行折叠:
使用dataworks投递日志服务数据到MaxComputer

2.2.4 周期任务参数示例

下图中设置了三个参数,分别是日志开始时间、结束时间、分区信息。
赋值: -p"startTime=$[yyyymmddHH24 - 1/24] endTime=$[yyyymmddHH24] dt=$[yyyymmddHH24 - 1/24]"
参数的配置可以参考文档
参数中运算的 - 1/24 是将当前运行任务时间减去1小时,所以配置下面的调度周期间隔改为了1小时。
使用dataworks投递日志服务数据到MaxComputer
使用dataworks投递日志服务数据到MaxComputer

配置完成之后保存、提交即可。
使用dataworks投递日志服务数据到MaxComputer

2.3 投递配置周期参数

2.3.1 参数含义

该文档介绍周期任务中常用的两个参数 $bizdate( ${…} ) 以及 $cyctime( $[…] )
$bizdate( ${…} ) 是调度时间,精确度为天,假如任务是2020-02-20执行,调度时间就是 2020-02-19 ,比任务执行时间提前一天;例: ${yyyymmdd}
$cyctime($[…]) 是任务执行时间,精确度为秒,是定时任务理论上执行的时间,假如由于任务较多导致延迟,依然按照定时时间,而不是真实的运行时间测算;例: $[yyyymmddhh24miss]

2.3.2 示例

例如,当前时间为2020年2月20日,任务定时每天00:00运行,下表为各自定义参数赋值情况的对比。

参数类型 调度参数赋值 调度替换值
${yyyymmdd} datetime1=${yyyymmdd} datetime1=20200219
$[yyyymmddhh24miss] datetime2=$[yyyymmddhh24miss] datetime2=20200220000000

2.3.3 注意事项

dataworks 周期参数中不支持空格,如果有空格需要设置两个变量,投递配置中使用空格将两个参数隔开;
$bizdate(${…})$cyctime($[…])在计算周期范围时,参数内部运算时的数值不同。

2.4 常见问题

2.4.1 投递后数据为空常见原因

  1. 检查原始数据中是否存在该字段(只能投递日志服务中的字段,不支持json嵌套字段投递)
  2. 日志服务的字段名称填写是否正确
  3. MaxComputer侧的字段类型是否正确,日志服务中类型与MaxComputer不一样,所以建议在MaxComputer中创建String类型字段重新投递

3. 视频演示

视频链接: https://v.youku.com/v_show/id_XNDU3NjI2NDk1Ng==.html

上一篇:使用SELECT和OPEN CURSOR读取product数据的一些讨论


下一篇: