
# 补数据场景使用介绍
#### 适用场景
在某项目搬迁场景下，当您需要补充以前时间段内的历史业务数据，需要查看历史数据的详细信息时，可以使用补数据特性。
补数据是指作业执行一个调度任务，在过去某一段时间里生成一系列的实例。用户可以通过补数据，修正历史中出现数据错误的作业实例，或者构建更多的作业记录以便调试程序等。
![](https://support.huaweicloud.com/bestpractice-dataartsstudio/public_sys-resources/note_3.0-zh-cn.png)
- 补数据作业除了支持SQL脚本，其他节点也支持。
- 如果SQL脚本的内容有变化，补数据作业运行的是最新版本的脚本。
- 使用补数据功能时，如SQL中变量是DATE，脚本中就写${DATE}，在作业参数中会自动增加脚本参数DATE，脚本参数DATE的值支持使用EL表达式。如果是变量时间，需要使用DateUtil内嵌对象的表达式，平台会自动转换成历史日期。EL表达式用法可参考[EL表达式](https://support.huaweicloud.com/usermanual-dataartsstudio/dataartsstudio_01_0494.html)。
- 补数据作业除了支持作业参数，脚本参数或者全局环境变量也支持。
 
#### 约束条件
只有数据开发作业配置了周期调度，才支持使用补数据功能。
#### 使用案例
**案例场景**
在某企业的产品数据表中，有一个记录产品销售额的源数据表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开发脚本   
   ![](https://support.huaweicloud.com/bestpractice-dataartsstudio/zh-cn_image_0000001537256629.png "点击放大")
   脚本编写完成后，保存并提交此脚本的最新版本。
   
3. 开发一个补数据的批处理作业。开发作业时，您需要配置节点属性参数和调度周期。
   在数据开发主界面的左侧导航栏，选择"数据开发 \> 作业开发"。
   图2节点参数   
   ![](https://support.huaweicloud.com/bestpractice-dataartsstudio/zh-cn_image_0000001536976737.png "点击放大")
   
   ![](https://support.huaweicloud.com/bestpractice-dataartsstudio/public_sys-resources/note_3.0-zh-cn.png)
   - 如果作业所关联的SQL脚本使用了参数，此处显示脚本参数名称（例如DATE），请在参数名称后的输入框配置参数值。参数值支持使用EL表达式，EL表达式用法可参考[EL表达式](https://support.huaweicloud.com/usermanual-dataartsstudio/dataartsstudio_01_0494.html)。
     如果参数是时间，请您查看下DateUtil内嵌对象的表达式例子，平台会自动替换成补数据的历史日期（由补数据的业务日期所决定）。
     您也可以直接编写SQL语句，编写SQL表达式。
     
   
   - 若关联的SQL脚本，脚本参数发生变化，可单击刷新按钮![](https://support.huaweicloud.com/bestpractice-dataartsstudio/zh-cn_image_0000001536816849.png)同步，也可以单击![](https://support.huaweicloud.com/bestpractice-dataartsstudio/zh-cn_image_0000001485776950.png)进行编辑。
   
   - 脚本参数的举例如下所示。
     例如：#{DateUtil.format(DateUtil.addDays(Job.planTime,-1),'yyyy-MM-dd')}
     - Job.planTime表示作业计划时间，yyyy-MM-dd表示时间格式。
     
     - 如果作业计划时间三月二号，减去一天就是三月一号。补数据时，配置的补数据的业务日期就会替换作业计划时间。
     
     - Job.planTime会把作业计划时间通过表达式转化为yyyy-MM-dd格式的时间。
       
    
   配置补数据作业的调度周期。单击界面右侧的调度配置，配置补数据作业的调度周期，该使用指导配置周期设置为天。
   图3配置调度周期   
   ![](https://support.huaweicloud.com/bestpractice-dataartsstudio/zh-cn_image_0000001486096710.png "点击放大")
   
   ![](https://support.huaweicloud.com/bestpractice-dataartsstudio/public_sys-resources/note_3.0-zh-cn.png)
   - 作业调度周期设置为天，每天会进行作业调度，并生成一个调度实例。您可以在"实例监控"页面中，查看补数据实例的运行状态。用户可以在该页面中查看作业的实例信息，并根据需要对实例进行更多操作。
   
   - 该作业调度时间从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补数据   
      ![](https://support.huaweicloud.com/bestpractice-dataartsstudio/zh-cn_image_0000001537256633.png "点击放大")
      
      表2参数说明 
      | 参数          | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
      |:---|:---|
      | 补数据名称       | 系统自动生成一个补数据的任务名称，允许修改。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
      | 作业名称        | 系统自动显示需要补数据的作业名称。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
      | 业务日期        | 选择需要补数据的时间段。这个业务日期会传递给作业的计划时间。作业运行时，作业计划时间就会被补数据里面的业务时间替换掉。 说明： 一个作业可进行多次补数据。但多次补数据的业务日期需要避免交叉重叠，否则可能导致数据重复或混乱，用户请谨慎操作。 如果勾选了"按日期倒序补数据"，则系统按照日期倒序补跑，每日内的补数顺序仍是正序。 说明： - 该功能适合在各日数据不耦合的条件下使用。  - 为保证补数据可以倒序进行，补数据作业对更早日期作业实例的依赖关系将被忽略。   |
      | 并行周期数       | 设置同时执行的实例数量，最多可同时执行5个实例。 说明： 请根据实际情况配置并行周期数，例如CDM作业实例，不可同时执行补数据操作，并行周期数只可设置为1。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
      | 需要补数据的上下游作业 | 可选。选择需要补数据的下游作业（指依赖于当前作业的作业），支持多选。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
         
      
   
   3. 单击"确定"，系统会根据作业的调度周期开始补数据。
   
   4. 在"补数据监控"页面中，查看补数据的任务状态、业务日期、并行周期数、补数据作业名称，以及停止运行中的任务，同时您可以查看补数据的详细日志信息。
      图5补数据详细信息   
      ![](https://support.huaweicloud.com/bestpractice-dataartsstudio/zh-cn_image_0000001920836986.png "点击放大")
      
      
   
   5. 执行以下SQL命令，查询目的表B里面是否存在源表A的历史数据。
      ```
      SELECT * FROM B
      ```
      
     
 
