数据开发:开发者

本文以使用MaxCompute数据源,在DataWorks上运行MaxCompute作业任务为例,为您介绍开发人员如何使用数据开发(DataStudio)创建一个周期调度任务,帮助您快速了解数据开发(DataStudio)模块的基本使用。

前提条件

已完成开发前的环境准备,详情请参见DataWorks准备工作流程

说明
  • 本文以创建ODPS SQL任务为例,因此,工作空间需绑定MaxCompute类型数据源。

  • 操作账号需拥有开发权限,即阿里云主账号,或拥有空间管理员开发角色权限的RAM用户。

背景信息

DataWorks的数据开发(DataStudio)面向各引擎(MaxCompute、Hologres、EMR、CDH等)提供可视化开发界面,包括智能代码开发、数据清洗加工、规范化任务开发与发布等,保证数据开发的高效与稳定。更多数据开发模块的使用,详情请参见数据开发概述

通常,写入原始业务数据至DataWorks,并加工为最终结果表的过程如下:

  1. 在DataWorks创建多个数据表。例如:

    • 源表:存储从其他数据源同步过来的数据。

    • 结果表:存储经DataWorks清洗加工过的数据。

  2. 创建同步任务,将业务数据同步至上述源表。

  3. 创建计算节点,对同步任务产出的表数据进行清洗、逐层加工,并将每层结果写入对应结果表。

您也可以在创建表后,使用直接上传方式,将本地数据上传至DataWorks的源表,再通过计算节点进行清洗加工,将加工后的数据存储至结果表。本文使用直接上传本地数据,并通过计算类型节点清洗该表数据为例进行说明。

进入数据开发

登录DataWorks控制台,切换至目标地域后,单击左侧导航栏的数据建模与开发 > 数据开发,在下拉框中选择对应工作空间后单击进入数据开发

操作流程

  1. 步骤一:新建业务流程

    数据开发基于业务流程组织与开发代码,您需要先新建业务流程,才可进行后续的开发工作。

  2. 步骤二:新建表

    DataWorks支持使用可视化方式创建表,并以目录结构方式在界面展示。数据开发前,您需先在引擎创建用于接收数据清洗结果的表。

  3. 步骤三:新建节点

    DataWorks基于节点进行任务开发,不同类型的引擎任务在DataWorks上被封装为不同类型的节点。您可根据业务需要,选择合适的节点进行引擎任务开发。

  4. 步骤四:编辑节点

    根据节点类型,在节点编辑页面通过对应数据库的语法编写业务代码。

  5. 步骤五:定义节点调度属性

    用于定义该节点的调度相关属性,周期性调度运行节点。

  6. 步骤六:调试代码

    您可使用DataWorks提供的代码片段快捷运行、运行、高级运行三种方式调试代码,验证代码逻辑是否正确。

  7. 步骤七:保存并提交节点

    节点调试无误后,您需要保存并提交节点。

  8. 步骤八:冒烟测试

    为保障生产任务高效运行,避免计算资源浪费。任务发布上线前,您可将任务提交至开发环境进行冒烟测试,保障任务的正确性。

  9. 步骤九:发布任务

    DataWorks仅支持自动调度发布至生产环境的任务,因此在冒烟测试无误后,您需将任务发布至生产环境调度系统进行周期调度。

步骤一:新建业务流程

DataWorks以业务流程为中心组织数据开发,通过各类型开发节点的容器看板,将相关工具、优化及管理操作围绕看板对象进行组织,使开发管理更加方便智能。您可根据业务需求,将同类型业务统一放置一个业务流程。

  1. 进入数据开发页面。

    登录DataWorks控制台,切换至目标地域后,单击左侧导航栏的数据建模与开发 > 数据开发,在下拉框中选择对应工作空间后单击进入数据开发

  2. 创建业务流程。

    您可使用如下两种方式创建:

    • 方式一:鼠标悬停至新建图标,单击新建业务流程

    • 方式二:右键单击数据开发左侧目录树的业务流程,选择新建业务流程

  3. 配置业务流程的名称及描述,单击新建

    本文示例创建名为创建第一个周期调度任务的业务流程。实际开发时,请根据您的业务进行规划。

    说明

    更多业务流程的使用,详情请参见创建及管理业务流程

步骤二:新建表

DataWorks的数据开发节点会对您的源数据进行清洗加工,因此,您需先在引擎创建用于接收数据清洗结果的表,并定义表结构。

  1. 创建表。

    1. 在步骤一创建的业务流程中,展开子目录,右键单击MaxCompute > ,选择新建表

    2. 配置表名称、引擎实例等信息。

    本文示例分别创建如下两种表。

    表名称

    描述

    bank_data

    用于存储原始业务数据。

    result_table

    用于存储数据清洗后的结果。

    说明
    • 建表语句请参考建表语句

    • 更多引擎的可视化建表操作,如创建MaxCompute表、创建EMR表等,详情请参见创建表

  2. 配置表结构。

    进入表编辑页面,切换至DDL模式,通过DDL语句配置表结构。生成表结构后,在基本属性区域输入表的中文名,并将其提交至开发环境与生产环境,提交成功后可在对应环境的数据源项目查看该表。查看各环境绑定的数据源信息,详情请参见创建MaxCompute数据源

    说明
    • 表的新增、更新等操作均需要提交至对应环境后,才会在引擎侧生效。

    • 您也可以使用可视化方式,根据业务需求及界面引导配置所需表结构。可视化建表,详情请参见创建并使用MaxCompute表

    生成表结构。生成bank_data表结构的参考语句如下。

    CREATE TABLE IF NOT EXISTS bank_data
    (
     age             BIGINT COMMENT '年龄',
     job             STRING COMMENT '工作类型',
     marital         STRING COMMENT '婚否',
     education       STRING COMMENT '教育程度',
     default         STRING COMMENT '是否有信用卡',
     housing         STRING COMMENT '房贷',
     loan            STRING COMMENT '贷款',
     contact         STRING COMMENT '联系途径',
     month           STRING COMMENT '月份',
     day_of_week     STRING COMMENT '星期几',
     duration        STRING COMMENT '持续时间',
     campaign        BIGINT COMMENT '本次活动联系的次数',
     pdays           DOUBLE COMMENT '与上一次联系的时间间隔',
     previous        DOUBLE COMMENT '之前与客户联系的次数',
     poutcome        STRING COMMENT '之前市场活动的结果',
     emp_var_rate    DOUBLE COMMENT '就业变化速率',
     cons_price_idx  DOUBLE COMMENT '消费者物价指数',
     cons_conf_idx   DOUBLE COMMENT '消费者信心指数',
     euribor3m       DOUBLE COMMENT '欧元存款利率',
     nr_employed     DOUBLE COMMENT '职工人数',
     y               BIGINT COMMENT '是否有定期存款'
    );

    生成result_table表结构的参考语句如下。

    CREATE TABLE IF NOT EXISTS result_table
    (
    education STRING COMMENT '教育程度',
    num BIGINT COMMENT '人数'
    )
    PARTITIONED BY
    (
    day STRING,
    hour STRING
    );
  3. 上传数据。

    将原始业务数据存储至DataWorks的表(本文示例为bank_data表)中。本文示例采用直接上传方式,导入本地文件banking.txt至DataWorks,通过上传数据模拟实际数据写入情况。操作图示如下。上传数据更多上传数据内容,请参考本地数据上传至bank_data

步骤三:新建节点

根据业务需求,选择合适的节点类型进行开发。

说明

目前DataWorks的节点分为数据同步类型节点与计算类型节点两大类,实际开发过程中,您通常需要先通过离线同步任务将业务数据库中的数据同步至数仓中,再通过DataWorks计算节点对数仓中的表数据进行清洗加工。

  1. 创建节点。

    您可通过如下两种方式创建:

    • 方式一:基于目录树创建。

      1. 在目录树的业务流程中找到步骤一创建的业务流程。

      2. 右键单击所需引擎,在新建节点下选择合适节点。

    • 方式二:基于业务流程面板创建。

      1. 在目录树的业务流程中找到步骤一创建的业务流程。

      2. 双击该业务流程,进入业务流程面板。

      3. 在面板左侧导航栏单击所需节点,或将所需节点拖拽至面板。

  2. 配置节点引擎实例、名称等信息。

    本文示例创建名为result_table(与步骤二创建的结果表名称相同)的ODPS SQL节点。

    说明

    使用DataWorks节点进行数据开发时,通过开发节点清洗数据,再将清洗结果存放至结果表。建议您将结果表名称作为节点的名称,以便快速定位该节点产出的表数据。

    创建节点

步骤四:编辑节点

在业务流程目录树或业务流程面板中找到步骤三创建的节点,双击进入节点编辑页面。根据节点类型,通过对应数据库的语法编写业务代码。

本文示例在result_table节点中,将bank_data表中指定分区的数据写入result_table表对应的分区中,并通过变量(dayhour)定义写入的分区。

说明
  • 代码开发过程中,若需使用变量动态替换调度场景下的参数,可在代码中使用${自定义变量名}方式先定义变量,并在步骤五配置调度属性时为该变量赋值。

  • 调度参数的使用,详情请参见调度参数支持的格式

  • 不同类型节点任务的开发语法,详情请参见创建及使用节点

编辑代码代码参考如下。

INSERT OVERWRITE TABLE result_table partition (day='${day}', hour='${hour}')
SELECT education
, COUNT(marital) AS num
FROM bank_data
GROUP BY education;

步骤五:定义节点调度属性

通过定义节点的调度相关属性,实现周期调度运行目标节点。在节点编辑页面右侧导航栏的调度配置,根据业务需求配置相关属性。

参数

描述

基础属性

节点的名称、ID、类型、责任人会自动展示,此处无需单独配置。

说明
  • 责任人默认为当前登录用户,您可根据实际需求修改。仅支持选择当前工作空间中的成员为责任人。

  • 节点提交后会自动生成ID。

参数

用于定义节点调度时使用的参数。

DataWorks提供内置参数及相关自定义参数,可供任务调度时实现参数动态赋值。若步骤四编辑代码时定义了变量,您可在此处对该变量进行赋值。

本文示例为步骤四的如下变量赋值,用于将bank_data表中业务时间(即昨天)对应的小时数据写入result_table对应的小时分区:

  • day赋值${yyyymmdd}

  • hour赋值$[hh24]

参数赋值

时间属性

通过调度配置的时间属性,配置节点生成周期实例的方式,实例调度周期与执行时间,是否支持重跑,任务执行超过多长时间自动退出等。

说明
  • 您需配置节点的重跑属性后才可提交节点。

  • 任务定时时间为单个节点维度,但任务实际运行时间与节点依赖的上游节点其定时时间有关,所以即便当前节点定时时间早于上游节点,当前节点仍需要等待上游节点定时时间到并且执行成功后,下游节点才会执行。

本文示例设置result_table节点00:00开始运行,每小时调度一次,即每小时将bank_data表中业务时间(即昨天)对应的小时数据写入result_table表对应的小时分区中。时间周期

资源属性

用于配置任务发布至生产调度时使用的调度资源组。本文示例使用开通DataWorks时默认提供的Serverless资源组。详情请参见新增和使用Serverless资源组

调度依赖

用于定义节点调度的上下游依赖关系。建议您根据血缘关系来设置节点依赖,通过上游任务执行成功来确定当前节点依赖的表数据已顺利产出,当前节点可正常查询该上游表数据。

说明
  • 若当节点查询(即使用select语句)非DataWorks调度节点产出的表数据,您可选择自动解析为否,并使用工作空间根节点来调度当前节点运行。

  • 若当前节点查询(即使用select语句)其他任务产出的表数据,您可通过以下方式配置当前节点依赖的上游节点(用于产出当前节点查询的表数据),由该上游节点调度当前节点运行。

    • 上游节点非当前业务流程或非当前工作空间中的节点:在当前节点依赖的上游节点中输入该上游节点的节点输出名称

    • 上游节点为当前业务流程中的节点:在业务流程面板通过拖拽连线方式配置。

本文示例,假设result_table节点查询的bank_data表为非当前业务流程产出的表数据,则需将工作空间根节点配置为result_table节点依赖的上游节点,由根节点调度result_table节点运行。

(可选)节点上下文

用于定义节点上下游间的参数传递,实现下游节点通过参数获取上游节点传递过来的取值。

说明

该功能通常与赋值节点或赋值参数配合使用。

步骤六:调试代码

您可使用如下方式调试代码逻辑,保障代码编写的正确性。

方式

使用说明

选择建议

代码行:快捷运行

用于快速运行选中的代码片段。

需要快捷运行代码片段时,可选择此方式。

工具栏:运行运行

支持为代码指定测试场景下的变量赋值常量。

说明

新建的节点第一次单击运行时,需要您在弹框中手动为代码中变量赋值常量,此次赋值会被记录,下次操作无需再重复赋值。

若您需要频繁调试全量代码,可选择此方式。

工具栏:高级运行高级运行

每次单击此按钮都需为指定测试场景下的变量赋值常量。

若您需要修改代码中的变量赋值,可选择此方式。

本文示例使用高级运行测试2022.09.07 14:00的运行结果。高级运行

步骤七:保存并提交节点

节点配置并测试完成后,您需要保存节点配置,并提交节点至开发环境。

说明

仅当节点在步骤五中配置了重跑属性依赖的上游节点后才可提交。

  1. 单击工具栏的保存图标,保存节点配置。

  2. 单击工具栏的提交图标,提交节点至开发环境。

步骤八:冒烟测试

为保障生产任务高效运行,避免计算资源浪费,建议您在任务发布前先对任务进行冒烟测试。冒烟测试需在开发环境执行,因此您需将节点提交至开发环境,提交后:

  1. 单击工具栏中的冒烟测试图标,在冒烟测试弹框配置业务日期。

  2. 冒烟测试执行完成后,单击工具栏的查看冒烟测试结果图标,查看测试结果。

本文示例测试调度参数配置是否符合预期。result_table调度节点00:0023:59每小时执行一次,因此下图配置中将生成两个小时实例,实例定时运行时间分别为00:0001:00

说明
  • 实例是周期任务根据调度周期运行时生成的任务快照。

  • 由于result_table节点设置为小时调度任务,除配置冒烟测试的业务日期外,您还需选择运行哪一时间段的实例。

  • 更多冒烟测试介绍,详情请参见执行冒烟测试

冒烟测试

步骤九:发布任务

若当前工作空间为简单模式工作空间,任务提交后便可周期性调度;若当前工作空间为标准模式工作空间,任务提交后仅处于待发布状态,您需参考该步骤将任务发布生产,发布后该任务才可进行周期性调度。

说明
  • DataWorks仅支持自动调度发布生产环境的任务。因此,在冒烟测试无误后,您需将任务发布至生产环境调度系统进行周期调度。

  • 关于简单模式与标准模式工作空间的说明,详情请参见必读:简单模式和标准模式的区别

在标准模式工作空间下,数据开发(DataStudio)界面提交的操作(包括数据开发节点、资源、函数的新增、更新、删除等)都将进入任务发布界面等待发布。您需进入任务发布 > 创建发布包将相关操作通过发布流程发布至生产环境,发布后才可生效。发布详情请参见发布任务

发布流程相关说明如下。

发布相关

说明

发布流程管控

发布操作受角色权限和流程控制约束,执行发布操作后请确保发布包状态为成功。

说明
  • 发布后,请在发布包列表查看发布包状态。

  • 开发人员仅支持创建发布包,实际发布则需拥有运维权限。

发布生效时间控制

全量转实例时间(23:30~24:00)执行的发布操作第三天周期实例才会生效。

说明

该限制针对T+1次日生成发布后即时生成实例生成方式均生效。实例生成方式,详情请参见实例生成方式

后续步骤

您可进入运维中心 > 周期任务运维查看发布至生产环境的离线调度任务,并执行相关运维操作。详情请参见周期任务基本运维操作