自定义指标
概述
自定义指标指基于自定义sql语句生成的指标,平台给用户提供了自定义编辑sql的入口,以适应实际业务场景中复杂的指标配置逻辑,在自定义指标配置过程中,平台会自动识别到sql中输出的字段信息,提供在线维护的方式,集中管理所有通过自定义sql生成的指标。
不同于其他类型的指标,自定义指标的sql脚本基本都是用户自己写的,所以相对来说需要用户具备更高的技术水平。
因为sql不限制输出字段的数量,所以允许存在一段sql一次性生成多个指标的情况。
配置自定义指标的步骤整体包括「编辑sql」、「设置字段信息」、「设置指标信息」、「设置调度信息」、「生成指标」五步。
编辑sql
提供sql编辑器页面,支持在线编辑sql脚本;
- 表目录:展示当前schema下所有的表目录列表
- 编辑sql:sql编辑页面,支持自定义输入sql语句
- 操作:包括「编写提示」、「参数配置」、「格式化」、「测试」四个操作
- 编写提示:包括示例语句以及编写的注意点,平台会根据注意点对sql进行校验,需要按照TrinoSQL语法进行sql编辑
- 参数配置:支持在sql中设置动态参数进行动态传参,如下图中的「AND t0.upd_time >= '${bdp.system.bizdate}'」其中「${bdp.system.bizdate}」为动态参数,具体规则可以点击参数配置进行查看,支持系统参数和自定义参数
- 格式化:点击对sql进行格式化
- 测试:点击执行编辑框内的sql,可在线查看日志信息和部分执行结果,如下图
因为是统计指标,所以编辑的sql一般至少要包括指标结果列和维度列两个字段。
设置维度信息
编辑完sql后,下一步需要对sql中的输出字段进行设置,需要用户针对输出的字段,指定字段类型是「维度列」还是「指标列」
指标列
- 即sql输出字段中的指标计算结果列,平台会自动识别输出字段的字段类型,只有 数值型 的字段才能被指定成指标列
- 指标列至少需要指定一个,同时也可以指定多个
- 因一个指标可对接多个结果表,字段定义为指标列后,需要指定是生成新指标还是对接已有指标,以表示是指标的扩展,还是指标新聚合维度的扩展。(通过指标对接列设置)
维度列
- 即sql中输出字段中的维度列,维度列不限制字段类型
- 维度列需要同样至少需要指定一个,同时也可以指定多个
- 维度列支持下拉选择对应的维度对象、维度属性,用户自主将sql输出字段与当前已有维度对象、维度属性进行关联,方便后续复合指标判断公共维度
因为自定义sql具有不确定性和多样性,当前平台暂时不支持解析复杂的sql,所以需要用户根据sql的逻辑自行执行关联维度,方便后续复合指标的配置。
场景举例
- 字段别名:默认等于字段名称,支持在线修改,仅支持数字、英文大小写、下划线,不支持中文,平台会自动拿指标列的字段别名,作为下一步对应指标的指标编码
- 字段描述:默认为空,支持在线编辑,需要包含中文,平台会自动拿指标列的字段描述作为下一步指标的名称,拿维度列的字段描述作为维度名称
- 字段类型:下拉选择指标列和维度列
- 对应维度:当字段类型是「维度列」的时候,支持选择维度对象、维度属性
设置指标信息
定义为指标列的指标,需要进一步定义指标基本信息,此外,需要进一步定义聚合函数,用于后续维度聚合的函数。因系统无法判断SQL取数规则,若未定义聚合函数,后续复合指标使用到该指标进行结果计算时,若所需维度未定义SQL,则无法正常计算。
设置调度信息
不同于派生、复合指标,自定义指标只能通过平台落表。
自定义指标同样需要对其计算结果进行定期落地,平台通过调度信息的配置,生成对应的调度任务提交到【运维中心】,然后通过调度任务的执行,实现指标计算结果的周期性落地
不同于其他有调度信息的指标,自定义指标的调度任务脚本,主要是以自定义sql为主,而一段自定义sql中也许会存在多个指标的输出,出于对计算资源以及自定义sql完整性的考虑,平台不会对这些sql进行拆分,调度任务还是以sql为维度进行执行,一段sql对应一个调度任务,所以最终输出的自定义指标,会存在多个自定义指标对应同一个调度任务
其他调度信息项的配置规则和派生指标一致,具体可参考派生指标里的调度信息。
点击「预览」,同样可以在线查看调度任务的sql脚本,不同的是,自定义指标是 一段sql一个任务,一段sql一张指标表。
自定义指标添加上游任务时,当前sql生成的指标均不支持添加。
保存与发布
配置完自定义指标相关信息,进入最后一步【完成】步骤,同样可以选择「保存」或者「保存并发布」操作,和其他类型的指标一样, 如果只是保存的话,自定义指标不会在【指标市场】中发布展示,且不会提交对应的调度任务到【运维中心】,其他指标也无法使用此自定义指标,此时的指标是未发布的状态, ,只有 选择保存并发布后,相应的自定义指标才会在【指标市场】中发布展示,此时自定义指标就也被其他指标使用了,同时也会提交对应的调度任务到【运维中心】更新调度任务 :
- 每发布一次,均会生成一个新的版本,在指标对应的【变更记录】模块中可以查看到对应指标所有的历史版本,支持在线进行 版本对比,具体的变更规则见版本变更
- 如果仅仅只是保存后的的自定义指标,会在指标定义列表中展示,此时的自定义指标因为是未发布的,所以不会产生新版本
- 和其他类型指标不同的是,自定义指标 以sql为对象,以sql的输出字段为指标和维度,所以它可以 通过sql输出字段的修改,来实现指标的新增、编辑和删除,具体规则见下一节
- 为了保证sql的完整性,同一段sql生成的自定义指标发布后,就一直在线上,不支持下线
配置完生成自定义后,即生成对应的自定义指标元数据信息,包括:
- 基本属性:包括基本信息、发布信息、技术信息;
- 血缘关系:当前指标的上下游关系及应用版本信息(仅显示已发布指标),并可根据时间范围和维度筛选进行结果记录查询;
- 变更记录:当前指标的全部历史版本信息,可进行版本间对比,每次最多支持2个版本间进行对比;
- 应用信息:当前指标的应用信息,包括上游引用指标信息、指标共享信息、API信息、数据权限及告警规则信息;
其中技术信息为系为编辑sql,整体还是‘select from…’的格式。
指标变更
因自定义指标一个指标会对应多个结果SQL,编辑指标时需要先指定SQL再进行编辑;删除指标时,需选择删除整个指标,或仅删除某个SQL,但若该SQL或该指标正在被下游应用,则不可删除。
因为自定义指标是以sql为维度进行生成的,指标的计算结果列和维度列均为自定义sql中的字段,所以当字段发生改变时,会发生指标删除、变更和新增的情况。 所以为了更好地维护自定义指标的变更记录,保证指标计算逻辑的准确性,平台制定了相关规则来规范化自定义指标的变更流程:当编辑自定义指标时,平台默认根据输出字段的名称进行匹配 :
已知:原来sql输出字段名称为「a」、「b」、「c」、「d」,其中「a」、「b」为指标列生成了a、b两个自定义指标,「c」、「d」为维度列
指标删除、新增、编辑举例
- 将字段「a」去掉:相当于 删除了a指标
- 将字段「a」名称以别名的形式改成「a1」,其他逻辑不变:相当于 删除了指标a,新增了「a1」对应的指标
- 将字段「a」去掉,重新写了一个逻辑不一样的字段,名称也叫「a」:a指标依然存在,相当于 编辑了a指标
- 在原来字段的基础上,新增了一个名称不一样的字段指定为指标列:相当于 新增了一个指标
平台会在「完成」页面对自定义指标的编辑结果进行展示,包括新增了什么指标、编辑了什么指标、删除了什么指标。