Skip to main content

任务开发

任务基本管理

新建任务

任何任务都具备如下3个基础属性:

  • 任务名称:需输入英文字母、数字、下划线组成,不超过64个字符,项目范围内唯一。
  • 任务类型:支持的任务类型请参考 任务类型
  • 存储位置:在页面左侧的任务存储结构中的位置。
  • 描述:长度不超过200个的任意字符。

目录管理

在「任务管理」上方的面板中,hover在「操作」icon上,展开操作菜单,点击"新建文件夹"可创建目录,任务保存目录可以以树形结构(文件夹)进行组织,可按多层级的方式进行任务管理与查看。

  • 每个目录名称不超过20个字符,支持任意字符
  • 同一层级的目录名称不能重复,不同层级的可以重复
  • 支持至少5层目录,每一层目录下的直接对象不超过2000个

编辑基本信息

需要修改任务的保存目录时,可在指定任务上点击右键,选择「编辑」,在弹窗中可修改任务的所在目录,同时可以修改任务名称、描述等内容

克隆

在任务右键菜单上,可对任务执行「克隆」或「克隆至工作流」操作:

  • 克隆:复制任务,包含代码、各类参数配置,但需注意,目前克隆任务时不会克隆依赖关系;
  • 克隆至工作流:将当前任务克隆为某个工作流中的节点(包含代码、各类参数配置,不包含依赖关系)。离线开发不支持将任务直接转换为工作流节点,但可基于此功能进行克隆任务。

任务锁

离线开发通过任务锁的机制防止2个用户同时编辑造成的相互覆盖,具体表现如下:

  • 「锁」是按任务划分的,同一时刻的某个任务,只有唯一的一个用户拥有「锁」
  • 用户编辑任务之前需要拿到锁,拥有锁的用户才可以编辑任务
  • 没有锁的用户,打开任务之后,任务的代码与配置只能查看,不能编辑
  • 用户对任务解锁后,他自己获得了此任务的「锁」
  • 锁与权限无关,某项目内,除「访客」角色之外的任何用户,可以解锁任何任务

删除

如果在编辑过程中想要放弃一个任务编辑版本,或者周期任务提交后想从调度系统中去掉该任务的自动运行,可在任务的右键菜单中点击「删除」。

  • 如果此任务被其他任务依赖(是其他任务的上游任务),则此任务不能被删除,需要先解除依赖关系再进行删除
  • 任务删除后,已生成的任务实例不会被删除,但会运行失败

其他操作与功能

  • 搜索任务

点击任务编辑栏的「搜索」按钮,或按下Ctrl+P快捷键,通过输入任务名称可搜索并打开任务

  • 定位任务

当任务数量很多时,可能在左侧的「任务管理」面板中难以找到当前打开的任务,此时可在「任务管理」上方的面板中,点击「定位」icon,树形结构可快速定位到当前打开的任务所在的位置

  • 任务提交状态

在「任务管理」的树形结构中会自动显示任务的提交状态,未提交的任务前部会显示为黄色圆形icon,如下图所示:

renwutijiao

运行任务

  • 普通运行

单击一个SQL任务打开编辑区,选择想要执行的部分语句,然后在操作区单击运行按钮即可触发选定代码执行。如果不选择部分代码,而是直接单击「运行」,则会默认运行当前任务的全部代码。 仅SQL任务支持选定部分代码运行,不支持其他任务类型。

运行侧新增「限制查询条数」输入框,可以对SQL任务的临时查询的查询条数进行限制,如图所示

image-20221205200320389

  • 整段运行

高级运行是将选定运行的SQL放在一个session(会话)中运行,即前后的SQL语句存在一定的关联性或参数上的延续性,这样的SQL必须在一个session中运行,例如:set参数(HiveSQL/SparkSQL)、创建临时表等场景。

tip

仅SQL任务支持整段运行、选定部分代码运行

tip

在页面通过按钮点击运行任务时,请勿执行刷新页面跳转到其他页面的操作,刷新或跳转后。若执行了此操作,将会导致正在运行的SQL的状态丢失,无法查看运行状态或日志/结果,且系统会自动将运行的SQL杀死。

  • 分段运行

分段运行时将选定运行的SQL按‘;’进行切割,每一段SQL会单独放在一个session(会话)中进行,目前所有SQL任务的默认运行方式都为整段运行。

  • 查看日志与结果

任务触发运行后,在编辑区下方会显示日志页,如果有语句的运行结果返回了数据集,则在日志页旁显示结果集的预览,最多可查看1000条查询结果。

无论运行几次,日志页只有一个,仅显示最近一次触发运行的日志信息,之前的日志会被覆盖。结果页可以存在多个,按语句执行顺序依次显示,最多可以显示20个结果页,方便您进行对比数据等操作。

多个语句触发执行时,这些语句将串行执行,日志内容依次显示在日志页中,结果则按每个语句的执行顺序分别显示在不同的结果页中。

Spark SQL、Hive SQL、数据同步任务的临时运行支持实时打印日志,并展示任务执行进度,如图所示

image-20230130165442279

  • 同步任务脏数据

页面运行同步任务时,暂时不支持将脏数据写入脏数据表,必须补数据运行才会写入脏数据。

保存与提交

完成任务编辑后,续点击「保存」按钮,保存任务参数。但保存之后并不会在调度系统中生效必须点击右上角的「提交」按钮,才会实际生效。提交,是将创建/修改后的任务参数提交至调度引擎生效。

  • 任务提交和页面运行权限判断 当前用户在进行任务的页面运行和任务提交时后台将校验用户对于任务中涉及的表的操作是否有对应的全部权限,若否,则将运行或提交失败。 例如,假设任务中有一张表table1,用户A对于这张表只有DQL(查询)权限,但任务中table1相关的操作包含数据的写入或表结构变更,那么用户A在进行该任务的页面临时运行或提交任务时将提示权限不足。 目前仅支持Hive SQL和Spark SQL任务;

提交任务操作,使得一个周期任务的代码和周期配置进入调度系统,从第二天开始,调度系统将根据该任务的周期配置每天生成实例并定时运行,直到该任务被删除,调度系统才会停止为该任务生成实例并运行。

tip

新增或修改任务时,如果当天22:00前发布成功,则在第二天的实例中即可看到结果;如果当天22:00后发布成功,则在第三天的实例中才会看到结果。

tip

一个周期任务只有提交成功后才会进入调度系统,从而使得调度系统按配置周期定时产生实例并运行。

s

当浏览器异常登出/自动登出时,系统会自动保存IDE当前版本。

编辑任务代码

WindowsMac
搜索任务Ctrl+P
保存任务Ctrl+S
运行Ctrl+Enter

其他快捷键请参考「编辑器->编辑->命令面板

代码检查规则

info

该功能仅专业版、旗舰版支持

概述

代码检查规则作用于任务提交等事前环节,用于预防引入需要治理的问题。在平台中开启代码检查规则,将会过滤到部分低质量的SQL代码。

目前在数栈中,在「数据资产」子产品中配置代码规则,在「离线开发」子产品中进行引用。在「数据资产」中配置的的代码规则,租户下「离线开发」中所有项目都可以进行对接,实际流程如下图。

image-20230412205752823

在资产中已经内置了以下几种规则,其他自定义规则需要通过上传jar包的方式来实现,下文中会详细介绍

检查规则检查项描述判断规则影响(默认,可配)处理指南校验结果
分区表查询必须带分区对于meta数据源的分区表,如果查询语句中不给定分区,全表扫描(即暴力扫描)会带来非常大的计算开销。对分区表执行Select语句,WHERE条件中没有给定分区条件。阻断添加分区范围限制。XXXX表为分区表,分区表查询必须带分区
禁止大表查询带 DISTINCT对于存储较大的表,性能考虑,建议禁用DISTINCT查询,改用GROUP BY替换。同时满足以下两个条件: 1.表大小超过10G 2.SELECT区使用了DISTINCT阻断改用GROUP BY写法替换掉DISTINCT。XXX表大小为XXXG,SELECT区使用了DISTINCT
SQL文件大小不超过阈值SQL代码长度过长,在任务发布阶段和运行阶段,均有可能超过系统处理限制而失败SQL文件大小超过12MB。提示将代码逻辑精简或者拆分成多个任务。SQL文件大小为XXXMB,超过12MB
禁止使用 SELECT *SQL语句中简单使用 SELECT * 查询数据,在上游数据字段发生新增等变化时,可能会带来意料之外的数据质量问题,所以需要禁止代码中含有SELECT * 查询阻断将 SELECT * 展开,改写成真正用到的具体字段。代码中含有SELECT * 查询
代码里面不允许包含对表、分区、列的DDL 语句,除了新增或删除分区SQL语句中使用DDL语句时,对数据库对象(数据库、表、列、索引等)进行创建、删除、修改,可能会带来意料之外的数据质量问题,所以需要提示包含DDL关键字:create、drop、alter等,除了新增或删除分区提示谨慎操作,关注当前表的任务运行状况及下游表是否收到影响。代码中包含了DDL关键字:XXXX

代码检查规则配置

在「数据资产」->「数据治理」->「代码检查」中可以进行检查规则的查看和新建,如下图

image-20230412210326819

需要通过上传jar包的方式,完成自定义规则的新建,如下图。再填写规则名称、规则描述、规则判断、处理指南等信息后,选择影响方式(阻断 or 提示)和影响的任务类型,就能完成自定义规则的创建。具体详情,可以查看数据资产帮助手册中的代码检查规则创建。

image-20230412210355840

离线对接代码检查规则

目前资产仅支持创建Hive SQL、Spark SQL、Impala SQL、Inceptor SQL四种任务的代码检查规则,离线都支持对接。

开启

在「项目设置->操作设置」中,勾选「SQL规范性」检查,并编辑SQL规范性检查生效的规则(资产中配置的所有代码校验规则都可选中)、作业类型(周期任务、手动任务和临时查询)和SQL类型(Hive SQL、Spark SQL、Impala SQL、Inceptor SQL),如图所示

image-20230412210427784

image-20230412210454881

检查

当代码校验规则成功开启后,会在中对应的作业类型和SQL类型的IDE界面上展示「SQL规范性检查」按钮,如图

image-20230412210521092

点击「SQL规范性检查」,任务立即执行SQL规范性检查校验,并在日志中打印校验结果。

临时运行

点击「运行」,任务会立即执行SQL规范性检查校验,并在日志中打印校验结果。任务继续运行时,可能存在以下三种情况

  • 如果结果中不存在阻断项,则任务继续运行,并打印任务运行日志。
  • 如果结果中存在阻断项且用户不是项目管理员及以上角色,则任务终止
  • 如果结果中存在阻断项且用户是项目管理员及以上角色,则会进行弹窗提示,用户可以决定任务是否继续执行。

image-20230412210118036

提交

提交时的流程和临时运行时一致,如下图

image-20230412210211385

对发布的影响

导入导出式发布/一键发布,若目标项目开启了SQL规范性校验,发布包中的SQL任务按目标项目的规则校验不通过。并会在发布校验弹窗中体现,具体可以参考任务发布