更新时间:2026-10-13 GMT+08:00
分享

补数据场景使用介绍

适用场景

在某项目搬迁场景下,当您需要补充以前时间段内的历史业务数据,需要查看历史数据的详细信息时,可以使用补数据特性。

补数据是指作业执行一个调度任务,在过去某一段时间里生成一系列的实例。用户可以通过补数据,修正历史中出现数据错误的作业实例,或者构建更多的作业记录以便调试程序等。

  • 补数据作业除了支持SQL脚本,其他节点也支持。
  • 如果SQL脚本的内容有变化,补数据作业运行的是最新版本的脚本。
  • 使用补数据功能时,如SQL中变量是DATE,脚本中就写${DATE},在作业参数中会自动增加脚本参数DATE,脚本参数DATE的值支持使用EL表达式。如果是变量时间,需要使用DateUtil内嵌对象的表达式,平台会自动转换成历史日期。EL表达式用法可参考EL表达式。
  • 补数据作业除了支持作业参数,脚本参数或者全局环境变量也支持。

约束条件

只有数据开发作业配置了周期调度,才支持使用补数据功能。

使用案例

案例场景

在某企业的产品数据表中,有一个记录产品销售额的源数据表A,现在需要把产品销售额的历史数据导入的目的表B里面,需要您配置补数据作业的相关操作。

需要导入的列表情况如表1所示。
表1 需要导入的列表情况

源数据表名

目的表名

A

B

配置方法

  1. 准备源表和目的表。为了便于后续作业运行验证,需要先创建DWS源数据表和目的表,并给源数据表插入数据。
    1. 创建DWS表。您可以在DataArts Studio数据开发中,新建DWS SQL脚本执行以下SQL命令:
      /* 创建数据表 */
      CREATE TABLE A (PRODUCT_ID INT, SALES INT, DATE DATE);
      CREATE TABLE B (PRODUCT_ID INT, SALES INT, DATE DATE);
    2. 给源数据表插入示例数据。您可以在DataArts Studio数据开发模块中,新建DWS SQL脚本执行以下SQL命令:
      /* 源数据表插入示例历史数据 */
      INSERT INTO A VALUES ('1','60', '2022-03-01');
      INSERT INTO A VALUES ('2','80', '2022-03-01');
      INSERT INTO A VALUES ('1','50', '2022-02-28');
      INSERT INTO A VALUES ('2','55', '2022-02-28');
      INSERT INTO A VALUES ('1','60', '2022-02-27');
      INSERT INTO A VALUES ('2','45', '2022-02-27');
  2. 开发一个补数据的脚本。开发脚本时,脚本表达式里面必须包含时间变量(例如,SQL中变量是DATE,脚本中就写${DATE})。在作业参数配置里面,您可以在3中编写脚本参数DATE的语句表达式。
    在“脚本开发”界面,在编辑器中输入开发语句。
    INSERT INTO B SELECT * FROM A WHERE DATE = ${DATE};
    图1 开发脚本

    脚本编写完成后,保存并提交此脚本的最新版本。

  3. 开发一个补数据的批处理作业。开发作业时,您需要配置节点属性参数和调度周期。

    在数据开发主界面的左侧导航栏,选择“数据开发 > 作业开发”。

    图2 节点参数

    • 如果作业所关联的SQL脚本使用了参数,此处显示脚本参数名称(例如DATE),请在参数名称后的输入框配置参数值。参数值支持使用EL表达式,EL表达式用法可参考EL表达式。

      如果参数是时间,请您查看下DateUtil内嵌对象的表达式例子,平台会自动替换成补数据的历史日期(由补数据的业务日期所决定)。

      您也可以直接编写SQL语句,编写SQL表达式。

    • 若关联的SQL脚本,脚本参数发生变化,可单击刷新按钮同步,也可以单击进行编辑。
    • 脚本参数的举例如下所示。
      例如:#{DateUtil.format(DateUtil.addDays(Job.planTime,-1),'yyyy-MM-dd')}
      • Job.planTime表示作业计划时间,yyyy-MM-dd表示时间格式。
      • 如果作业计划时间三月二号,减去一天就是三月一号。补数据时,配置的补数据的业务日期就会替换作业计划时间。
      • Job.planTime会把作业计划时间通过表达式转化为yyyy-MM-dd格式的时间。

    配置补数据作业的调度周期。单击界面右侧的调度配置,配置补数据作业的调度周期,该使用指导配置周期设置为天。

    图3 配置调度周期

    • 作业调度周期设置为天,每天会进行作业调度,并生成一个调度实例。您可以在“实例监控”页面中,查看补数据实例的运行状态。用户可以在该页面中查看作业的实例信息,并根据需要对实例进行更多操作。
    • 该作业调度时间从2023/03/09开始生效,每天2点调度一次作业。
    • 执行以下SQL命令,查询目的表B里面是否存在源表A的数据。

      SELECT * FROM B

    参数配置完成后,保存并提交此作业的最新版本,测试运行该作业。

    单击“执行调度”,让该作业运行起来。

  4. 创建补数据。
    您创建一个周期调度作业后,需要为该任务进行补数据的操作。
    1. 在数据开发主界面的左侧导航栏,选择“运维调度 > 作业监控”。
    2. 单击“批作业监控”页签,进入批作业的监控页面。在该作业的“操作”列,选择“更多 > 补数据”。进入“补数据”页面。
      如果您需要补充2023-02-27至2023-03-01之间的历史数据,补数据的业务日期需要设置为2023-02-28至2023-03-02,该业务日期系统会自动传给作业计划时间,脚本时间变量DATE的表达式中,定义的时间为作业计划时间减去一天,即作业计划时间的前一天时间为补数据的时间范围(2023-02-27至2023-03-01)。
      图4 补数据
      表2 参数说明

      参数

      说明

      补数据名称

      系统自动生成一个补数据的任务名称,允许修改。

      作业名称

      系统自动显示需要补数据的作业名称。

      调度时间方式

      • 单段连续业务日期

        补数据的时间是连续的业务日期时间段。

      • 多段离散业务日期

        补数据的时间是不连续的离散的业务日期时间段。

      补数据时间段(业务日期)

      当“调度时间方式”选择为“单段连续业务日期”:

      选择需要补数据的时间段。业务日期不能大于当前时间,大于当前时间系统会默认显示当前时间。

      说明:

      一个作业可进行多次补数据。但多次补数据的业务日期需要避免交叉重叠,否则可能导致数据重复或混乱,用户请谨慎操作。

      如果勾选了“按日期倒序补数据”,则系统按照日期倒序补跑,每日内的补数顺序仍是正序。

      说明:
      • 该功能适合在各日数据不耦合的条件下使用。
      • 为保证补数据可以倒序进行,补数据作业对更早日期作业实例的依赖关系将被忽略。

      当“调度时间方式”选择为“多段离散业务日期”:

      除了配置上面的业务日期参数,还需要配置以下补数据的参数:

      单击“添加多段业务日期”可以添加多个离散的补数据的业务日期。您至少需要配置一个业务日期范围。

      单击“删除”可以删除已添加的离散业务日期。

      说明:

      因为DataArts Studio不支持底层服务(例如,以前的CDM、DLI等服务)的补数据实例和周期调度作业实例并发运行,为了保证补数据实例不影响周期调度作业实例运行,两种类型作业实例不会抢占并发,所以,作业的周期调度的日期与该作业补数据的业务日期不能重合,周期调度和补数据不能同时运行,避免出现运行异常问题。

      是否设置周期补数据

      • 是,补数据时会按照设置的周期进行补数据任务。

        第一个值表示具体的值。

        第二个值表示按指定周期补数据,例如:小时、天,周、月。

        说明:

        设置周期后,将会按照周期进行补数据任务调度。对于调度周期为分钟,间隔小时以及天的任务,将按照新设置的周期去调度补数据任务,起始点为业务日期的第一个时间点。例如任务为每天1:00开始的小时任务,需要对2023/01/01 00:00 - 2023/02/01 00:00进行补数据操作,周期为2天,则将调度2023/01/01 00:00,2023/01/03 00:00,2023/01/05 00:00……等任务。此外,当调度周期为月时候,如果第一个节点为月末最后一天,将默认调度每月最后一天。

      • 否,补数据时不会按照周期进行补数据任务,默认原有的补数据规则进行补数据任务。

      指定周期

      当“调度时间方式”选择为“多段离散业务日期”时,需要配置此参数。

      指定补数据的时间周期

      通过“查看调度信息”可以查看当前时间段下任务实例执行时间。

      说明:

      只有调度周期是小时调度和分钟调度时,进行离散补数据的时候才会有指定周期。

      并行周期数

      设置同时执行的实例数量,最多可同时执行5个实例。

      说明:

      请根据实际情况配置并行周期数,例如CDM作业实例,不可同时执行补数据操作,并行周期数只可设置为1。

      需要补数据的上下游作业

      可选。选择需要补数据的上下游作业(指当前作业的上下游作业),支持多选。

      是否按天粒度补数据

      如果选择了按天粒度去补数据,表示在同一天内单个作业补数据的实例可以并行去跑,不在同一天内的单个作业补数据的实例不能并行去跑。例如小时任务可以5点和6点的作业实例并行跑,而1号和2号的作业实例不能并行跑。

      是:按天粒度补数据

      否:不按天粒度补数据

      失败后是否停止

      如果“是否按天粒度补数据”选择“是”,需要配置此参数。

      是:按天粒度补数据如果失败后,后面的补数据任务立即停止。

      否:按天粒度补数据如果失败后,后面的补数据任务继续执行。

      说明:

      按天粒度补数据,前面一天任务执行失败后,第二天补数据任务不再执行。系统仅支持按天维度的补数据状态进行判断,不支持同一天内小时任务的多批次场景。

      优先级

      选择补数据的优先级。默认“不设置优先级”。您也可以通过默认项配置可以设置工作空间级的补作业的优先级。

      设置补数据作业的优先级后,当系统资源不充足时,可以优先满足优先级较高的作业的计算资源,数字越大优先级越高。

      说明:

      补数据的优先级高于工作空间的补数据优先级。

      当前只支持对DLI SQL算子设置优先级。

      补数据优先级设置和DLI的spark.sql.dli.job.priority优先级的映射关系如下:

      • 补数据的优先级设置为1时,映射到DLI优先级spark.sql.dli.job.priority=1。
      • 补数据的优先级设置为2时,映射到DLI优先级spark.sql.dli.job.priority=3。
      • 补数据的优先级设置为3时,映射到DLI优先级spark.sql.dli.job.priority=5。
      • 补数据的优先级设置为4时,映射到DLI优先级spark.sql.dli.job.priority=8。
      • 补数据的优先级设置为5时,映射到DLI优先级spark.sql.dli.job.priority=10。

      是否忽略OBS监听

      • 是,补数据场景下,系统会忽略OBS监听。
      • 否,补数据场景下,系统会监听OBS路径。

      是否设置运行时间段

      设置补数据任务的运行时间段。

      • 是

        可以设置补数据任务每天运行的时间段。

      • 否
    3. 单击“确定”,系统会根据作业的调度周期开始补数据。
    4. 在“补数据监控”页面中,查看补数据的任务状态、业务日期、并行周期数、补数据作业名称,以及停止运行中的任务,同时您可以查看补数据的详细日志信息。
      图5 补数据详细信息

    5. 执行以下SQL命令,查询目的表B里面是否存在源表A的历史数据。
      SELECT * FROM B

相关文档