任务管理
当指标发布后,可以在「运维中心→任务管理」模块查看对应的指标任务,包含任务的基本信息。 常见的操作包括补数据、查看依赖视图、运行报告等
原子指标不需要落地计算结果,所以没有调度任务。
任务列表
点击「运维中心→任务管理」菜单,进入任务列表,包括任务名称、提交时间、任务类型、责任人等信息
支持如下基本操作:
- 任务名称搜索:默认为模糊搜索,点击搜索栏右侧的icon,可在「精确匹配」/「头部匹配」/「尾部匹配」3种模式中切换
- 基本过滤:包含任务责任人、是否是我的任务(即责任人为本人的任务)、今日修改、已冻结等条件
- 表头过滤:支持按照任务类型、调度周期进行过滤
- 修改:点击「修改」按钮,支持跳转会指标开发页面,进入任务对应指标的编辑页面
如果任务对应的指标已经发布,系统会给出对应的提示不支持修改,需要先下线对应的指标才能修改。
任务列表中仅展示当前所有指标任务,不包含任务实例信息
指标发布后,对应的任务会显示在任务管理列表中
指标下线后,指标对应的指标任务仍然存在,只不过状态变为「已冻结」
指标删除后,对应的任务会在任务管理列表中删除。
任务类型
平台的任务面向派生指标、复合指标、自定义指标三类指标,三类指标的任务生成规则会有所有不同,产品默认的计算引擎为Trino,所以任务类型均为「TrinoSQL」
指标类型 | 任务类型 | 任务名称 | 任务描述 |
---|---|---|---|
派生指标 | TrinoSQL | ‘index_’+'指标编码' | - 一个派生指标对应生成一个指标任务 - 任务的脚本格式固定由「create table if not exists…」+「insert into..select..」两部分组成 |
复合指标 | TrinoSQL | ‘index_’+'指标编码' | - 一个复合指标对应生成一个指标任务 - 任务的脚本格式固定由「create table if not exists…」+「insert into..select..」两部分组成 - 复合指标的任务,除了复合原子指标外,其他的一般都会存在上游任务依赖关系 |
自定义指标 | TrinoSQL | ‘index_’+'同一段sql第一个指标的编码' | - 一段自定义sql对应生成一个指标任务 - 任务的脚本格式固定由「create table if not exists…」+「insert into..select..」两部分组成 - 当一段自定义sql生成了多个指标的情况下,这几个指标都是同一个指标任务,同一张指标表 |
任务与实例
任务与实例是一对多的关系,在「指标开发」模块中开发完指标生成对应指标任务(job)后,一个任务每运行一次,被称作一个实例(Instance)。任务是固定的一个配置,将一个任务运行多次,每次的结果、数据产出都不一样,在概念上进行区分是很有必要的。
实例生成
平台会在 每天的22:00统一生成第二天所有需要的任务实例,基于以上设计,指标任务开发时需要注意任务的提交时间(即指标发布时间),这里以一个天指标调度任务A为例:
指标任务A基本信息:调度周期:天;具体调度时间:8:00,即每天8点
- 若在1月1日21:00提交A任务(即22:00前发布指标),将会在当天22:00产生A任务的实例,并会在1月2日8:00第一次运行
- 若在1月1日23:00提交A任务(即22:00后发布指标),由于已经在22:00产生了1月2日的所有实例,A任务在1月2日将不会运行,这时候A任务的实例将会在1月2日22:00产生,并在1月3日第一次运行
针对已经发布过的指标,如果已经有指标任务生成,那么将其下线后,对应的指标任务会对应 冻结 ,但是冻结的任务实例依然会生成,只不过不会运行删除指标后,如果该指标有对应指标任务,也会一并删除,但是已经生成的实例不会删除,会运行失败 | |
---|---|
针对已经发布过的指标,如果已经有指标任务生成,那么将其下线后,对应的指标任务会对应 冻结 ,但是冻结的任务实例依然会生成,只不过不会运行
删除指标后,如果该指标有对应指标任务,也会一并删除,但是已经生成的实例不会删除,会运行失败
任务依赖
在「任务列表」中,点击任务名称,会出来对应指标任务的依赖视图,依赖视图中,展现了指标任务与其上下游指标任务的依赖关系,默认展开当前任务及其下游1层任务
依赖视图
1.绘图区域:
- DAG图的拖拽:按住左键,可对DAG图进行整体拖拽移动
- DAG图的刷新:点击「刷新」icon,可对依赖视图整体刷新(通常用于回到最初选择的任务),需注意,刷新后,已经展开的上下有关系、缩放比例将会重置
- DAG图的放大、缩小:点击「放大」或「缩小」icon即可
2.右键菜单:在依赖视图中,在某个任务上点击鼠标右键,弹出右键菜单
- 展开上/下游(6层):以当前节点为基准,展开当前节点的上下游6层任务,与当前节点平行的任务将不会展现
- 补数据
- 查看实例:点击后跳转至「周期实例」页面,并按此任务名触发一次搜索,业务日期设置为当天
刷新DAG图后,已经展开的上下有关系、缩放比例将会重置
依赖关系
指标任务的依赖关系,默认会根据指标「调度信息」中配置的依赖属性进行自动生成展示,任务实例运行时,除了遵循时间规则外,同时还会遵循任务之间的依赖关系,在时间达到要求后,平台会去检查上游依赖任务的情况: 如果上游任务失败后,则下游任务不会运行,且下游任务实例的状态会被置为「上游失败」
复合指标A=派生指标B+派生指标C,当指标B,C的任务运行失败时,指标A的计算其实没有什么实际意义,通过任务依赖关系的设置,也能最大限制地避免这个问题,提高指标计算的准确性。
冻结与解冻
平台支持在任务列表里把指标任务进行冻结/解冻,已冻结的任务,将会在任务名称后标注「已冻结」,可对单个任务执行「冻结/解冻」操作,或在列表多选任务批量进行「冻结/解冻」
冻结与解冻操作是立即生效的,尚未提交至引擎的实例,将会被立即冻结/解冻。关于实例冻结的处理,请参考实例生命周期的描述
在平台中,如果您把 已经发布的指标进行下线,对应「任务管理」里的指标任务会自动冻结,只有重新发布后才会解冻
但是如果您在「任务管理」里对任务进行任务冻结/解冻操作,对应的指标并不会执行发布/下线的操作
所以会存在已经发布的指标,但是对应指标任务是冻结状态的情况
补数据
「补数据」是对历史数据的重刷,在平台,常见的场景举例如下:
- 指标的计算逻辑发生变化,对应的任务脚本发生改变,且这个月已经计算好的结果需要按照最新的逻辑计算,原来的逻辑不可用,需要按照最新的逻辑重新计算一下之前已经算好的结果时
- 新开发了一个指标,需要尽快输出最近一个月的计算结果时
具体操作
在「任务列表」中,找到要补数据的任务,点击「补数据」按钮,在弹窗中选择待补数据的任务及其下游任务,并指定「业务日期」即可
- 补数据名称: 自动生成,支持修改,对应「补数据实例」页面的「补数据名称」
- 业务日期: 补数据的时间范围,作为系统参数业务日期相当于时间的基准线,默认为计划运行日期的前一天,如2021年7月7日执行的周期实例业务日期为2021年7月6日,一个业务日期对应一个补数据实例
- 选择任务: 默认选中当前的任务,如果当前任务存在下游任务,也支持选择下游任务一起补数据,保证数据链路的完整性和准确性
基本原理
补数据的基本原理是「系统参数替换」,但在进行参数替换之前,还需在 指标结果表表结构设计 和 指标任务脚本设计 上进行配合,在平台上主要体现在以下几个地方:
1.动态参数: 除了自定义指标任务外,其他有调度任务的指标(派生指标任务、复合指标任务),系统均会根据统计周期里的规则配置,在任务脚本中的时间范围部分,用动态参数代入,并且提交对应的表达式到引擎,举例如下:
- 统计周期「当日」的开始时间表达式为「${bdp.system.bizdate}」,结束时间表达式为「${yyyyMMdd+1}」
- 派生指标「当日存款账户余额」选择了「当日」统计周期,试计算脚本中对应的sql条件开始时间自动用对应的动态参数填充
- 最终根据试计算的sql生成了对应的指标任务,这时候,假设需要补业务日期为2021年7月7日的数据,系统会自动完成动态参数的替换,核心逻辑部分相当于执行如下sql
2.指标结果落表: 目前指标任务执行完后,对应的计算结果都会落到对应的指标结果表中,而考虑到多方面的因素,平台在表结构的设计上也遵循了以下原则:
- 结果表默认为分区表,按照分区写入数据,且写入模式为 覆盖 ,保证就算多次计算同一天的数据,也不会出现数据重复的问题
- 分区字段的数据为系统变量业务日期(${bdp.system.bizdate}),按照业务日期进行补数据的时候,自动根据动态日期更新对应分区内的数据,完成参数替换
所以,在执行补数据时,用户只需指定需要补数据的指标任务以及业务日期起止范围,系统就会根据业务日期范围自动完成参数替换,实现历史数据的重刷,例如:对某指标任务执行补数据,业务日期选择20200305-20200307,则会自动生成3个实例,分别重刷了20200305、20200306和20200307分区的数据,实现了历史数据的重刷
自定义指标书写的自定义SQL中,动态参数是用户自行设置,所以如果没有设置动态参数,其实是没有办法达到补数据的目的的