本文介绍在数据管理DMS任务编排中,创建一个基于数据库网关的脚本任务。

背景信息

下列任务多以脚本的方式存在于服务器中,DMS任务编排结合数据库网关,可以实现这些脚本的统一调度。
  • 使用高级的工具(例如:Python的Numpy库、Sklearn库,Spark的MLlib库)加工数据,产出各种业务模型。例如应用到搜索系统的精排、推荐系统。
  • 数据消费场景。例如读取数据生成的Excel脚本,读取数据发邮件的脚本等。

创建数据库网关

本章节介绍在脚本文件所在设备上创建数据库网关。

  1. 在目标设备上安装数据库网关。当前只支持Linux系统,且不允许使用Root账号安装启动。详细操作,请参见新建数据库网关(只需执行前三个步骤)。
    说明 若设备为阿里云ECS,在安装网关时建议勾选 通过阿里云VPC内部地址接入(ECS自建库/专线/云企业网/VPN网关)
    安装网关
  2. 在Linux安装网关的用户目录下创建dg_scripts目录。例如当前用户为xiaoming,则需要在/home/xiaoming目录下执行命令mkdir dg_scripts,创建dg_scripts目录。
  3. 将需要执行任务的Shell脚本文件移动至dg_scripts目录下。例如脚本文件名为demo.sh,则在脚本文件所在的目录下,执行命令mv <demo.sh> /home/xiaoming/dg_scripts
    说明 脚本文件名只能包含字母、数字、下划线(_)和半角句号(.)。

    本文采用的示例脚本内容如下:

    echo helloworld
    echo {"hello": "world"}

创建脚本任务

本章节介绍在DMS创建脚本任务。

  1. 登录新版DMS控制台
  2. 在页面顶部,选择全部功能 > 数据工厂 > 任务编排(新)
  3. 任务编排(新)页面,左侧导航栏单击开发空间开发空间,单击新建任务流
  4. 新建任务流对话框,自定义填写任务流名称描述后,单击确认
  5. 将左侧任务类型区域的脚本代码拖拽到页面中的空白区域。
    新建脚本任务
  6. 单击新建的脚本任务,单击图标任务重命名图标,进行重命名。
  7. 单击目标脚本任务,在界面左下角区域输入脚本任务的目标数据库网关信息。
    脚本任务设置
    配置项 说明
    地区 选择目标数据库网关所属的地区。
    网关ID 选择目标数据库网关的名称,网关ID会自动获取。
    说明 网关ID和网关名称在控制台 网关列表页面查看。
    网关实例ID 选择目标数据库网关的网关节点ID。
    说明 网关节点ID在目标网关的 网关详细页面查看。
    文件名 输入目标数据库网关安装目录dg_scripts下的脚本文件名。例如数据库网关中存放脚本文件的完整目录为/home/xiaoming/dg_scripts/demo.sh,则文件名输入demo
    运行参数 输入或选择脚本变量。脚本变量分为三种:系统变量、自定义时间变量和脚本输出变量,均通过脚本插件的运行参数传递。详情请参见脚本变量
  8. 单击任务编排页面左上角的试运行,在执行日志中可以看到脚本的标准输出打印。

    下图为试运行示例脚本的输出内容:

    试运行
  9. 将脚本任务配置至任务流。详细操作,请参见配置任务流

脚本变量

  • 系统变量。
    变量名 意义 例子
    sys.flow.start.timestamp 运行时间的时间戳。 2021-05-24T11:20:07.562+08:00
    sys.flow.start.year 运行时间的年份。 2021
    sys.flow.start.month 运行时间的月份。 5
    sys.flow.start.day 运行时间的日期。 24
    sys.flow.start.hour 运行时间的小时。 11
    sys.flow.start.minute 运行时间的分钟。 20
    sys.flow.start.second 运行时间的秒。 7
    sys.flow.start.milliseconds 运行时间的毫秒数。 562
    sys.flow.start.timezone 运行时间的时区。 Asia/Shanghai
    sys.flow.biztime 业务时间,默认为运行时间减一天。 1621740007562
    sys.flow.name 任务流名称。 dwd_activity日pv
    sys.node.name 任务名称。 单实例SQL-1
  • 自定义时间变量。请参见配置变量
  • 脚本输出变量。脚本输出的最后一行如果为JSON字符串,脚本任务会解析对应的Key -> Value值作为输出变量传递到下一个节点。

    例如,脚本为echo '{"key":"hello"}',那么脚本任务会解析出变量为key,值为hello的输出变量,下一个节点可通过${key}获取。

后续步骤

发布任务流