API调度
平台API调度为API查询提供数据支撑,包括调度任务、调度依赖、调度周期三部分内容
调度任务
一方面,针对Trino引擎而言,基于API服务的使用特性,我们需要将指标数据落地到hbase中,然后作为API查询的数据来源。而目前平台中指标结果信息都是落在hive中,所有要使API正常使用获取到数据,我们需要把指标结果数据及时同步到habse中,所以这里就需要一个 数据同步 任务 另一方面,实际配置API的过程中,一个API不可能只提供单个指标的调用服务,所以就出现了「API管理」中提到的选取多个指标生成API的情况,目前「指标中心」中所有开发完成的指标,默认都是采用一个指标的一个维度组合对应一张表(自定义指标除外)的形式,所以当API选取了多个维度一样的指标时,我们需要先把分散的指标表通过关联形成宽表,然后再做数据同步,这个就又衍生了一个 宽表聚合任务 ,此任务需要通过sql脚本将指标表聚合成宽表。
此外,因一个API会有多个维度组合可用,因此每个维度组合会生成自己的一套任务。
所以,每个API的创建,针对Trino引擎,都会对应生成N个宽表聚合任务(trinosql)和N个数据同步任务(hive到hbase),先通过宽表聚合任务将数据聚合落地,然后通过数据同步任务将数据同步至hbase数据库中,针对Doris引擎,则只涉及N个宽表聚合任务
目前的宽表/API源表均是每天生成一张表,通过表中的时间做区分。表名可通过API详情查看。
宽表聚合任务
宽表聚合任务,主要通过sql脚本的形式将分散的指标表进行聚合落地,脚本示例如下,包括删除表、创建表、插入表三部分:
- 删除表(drop table):执行之前先确保数据库中原来历史表的存在情况,先将表删除
- 创建表(create tabe):创建宽表的脚本,表名根据API名称生成不可修改,表结构由API中选择的指标决定,包括所有维度列+所有指标列+业务日期列,如选择了产品维度、地区维度的销售金额指标和销售利润指标,这时候表结构则主要包括产品、地区、销售金额、销售利润、业务日期五个核心字段
- 插入表(insert into):建好表之后,往表里插入数据,多个指标之间关联通过维度列和业务日期列作为关联键信息
考虑到当API中包括多个指标时,一次性关联带来的资源占用和效率问题,当需要关联的指标数据超过一定数量时,脚本上会采用分布关联的方式提高运行效率,降低资源占用率。
API配置过程中,可以通过预览先查看系统生成的宽表聚合任务脚本信息,配置完成后,您也可以通过查看API调度信息部分时,点击任务名称旁边的预览按钮,预览脚本信息,点击表名称旁边的预览按钮,预览生成的表结构和落地的数据。
数据同步任务
将上面宽表聚合任务产生的宽表数据同步至API数据源中,按照分区格式,每天存一张对应的表
数据同步任务暂时不提供脚本的预览,但是落地的结果表,配置完成后,您同样可以通过查看API调度信息部分时,点击表名称旁边的预览按钮,预览最新一个业务日期的表。
不同的计算引擎决定了sql脚本的类型,采用trino作为计算引擎的,脚本任务均为TrinoSQL类型;采用Doris作为计算引擎的,脚本任务均为DorisSQL类型。
调度依赖
上节「调度任务」中提到的宽表聚合任务和数据同步任务,加上指标发布后生成的指标任务,目前平台上,从任务属性来看有指标任务、宽表聚合任务、数据同步任务,从任务类型来看,有trinosql/DorisSQL任务和数据同步任务两种,这些任务之间主要存在以下关系:
- 指标任务落地指标的计算结果数据,派生指标、复合指标一个指标一张表,自定义指标一段sql一张表;
- 宽表聚合任务那指标任务落地的结果,关联落地宽表数据;
- 数据同步任务将宽表聚合任务落地的结果同步至hbase中;
所以,为了保证数据的一致性和及时性,这三种任务之间需要形成一定的依赖关系,即调度任务依赖,「指标任务>>>宽表聚合任务>>>数据同步任务」,同一个API的宽表聚合任务和数据同步任务自动形成上下游依赖关系,API中包括的指标对应的指标任务作为宽表聚合任务的上游形成上下游依赖关系
依赖关系举例说明:
调度周期
基于上一节描述的调度任务之间的依赖关系,系统会走动生成API调度任务的调度周期:
- 宽表聚合任务的上游任务是指标任务,只有当指标任务执行完且成功时,宽表聚合任务的数据落地才有意义,宽表聚合任务的调度信息取决于其中包含的指标任务
- 同一个API的宽表聚合任务和数据同步任务自动形成上下游依赖关系,所以数据同步任务的调度信息和宽表聚合任务的保持一致
所以,API的两个调度任务的调度周期,直接取决于API中指标任务的调度周期,主要遵循以下原则:
- 如果指标任务全都是一样的调度类型(天/周/月),那就采用一致的调度类型+调度时间的并集+最晚的调度时间,如三个周类型的指标任务分别是每周一5点、每周二6点、每周三7点,这时候API任务的调度周期即就是周任务的周一、周二、周三的7点
- 如果指标任务的调度类型存在不一致的调度类型,这时候统计采用天调度类型+最晚的调度时间,如一个每周一5点的任务和一个每天4点的任务,这时候调度属性就是每天的5点
调度周期只有在API运行方式为「自动运行」时才生效,如果手动运行的API,平台不会去执行对应调度任务。