
# 创建FDI组合任务
#### 概述
FDI支持创建组合任务，组合任务适用于需要持续同步实时数据的场景。实现一个源端多个数据表到一个目标端多个数据表的实时同步及增量同步，提高了数据的集成同步效率。
组合任务支持数据表之间字段（列）级别的灵活映射，例如源端一个数据表中的多个字段可分别映射到目标端的不同数据表中，或者源端多个数据表中的字段可以映射到目标端的一个数据表中。
#### 约束与限制
- 已完成源端数据源和目标端数据源的接入，具体操作请参考[接入数据源概述](https://support.huaweicloud.com/usermanual-roma/fdi-ug-190429002.html)。
  在源端数据源接入配置中，"数据库名"的大小写应与实际数据库名保持一致，否则会导致数据同步失败。
  
- 源端数据源已开启CDC功能，根据不同的数据源类型和CDC实现模式，具体操作请参考：
  - [配置Oracle CDC（LogMiner）](https://support.huaweicloud.com/usermanual-roma/fdi-ug-190624017.html)（推荐使用）
  
  - [配置Oracle CDC（XStream）](https://support.huaweicloud.com/usermanual-roma/fdi-ug-190624013.html)
  
  - [配置MySQL CDC（Binlog）](https://support.huaweicloud.com/usermanual-roma/fdi-ug-190624018.html)
  
  - [配置SQL Server CDC](https://support.huaweicloud.com/usermanual-roma/fdi-ug-202009081.html)
   
- 源端数据源中CDC归档日志的保留时间需要大于集成任务解析的日志时间，否则会造成集成任务找不到归档日志而导致增量同步失败。因此，数据集成任务停止运行的时间不宜过长。建议最少保留2天以上的归档日志。
- 在首次执行数据同步期间，建议不要对源端数据库做DDL操作。
- 如果创建组合任务个数过多，对数据库服务器、FDI插件进程均会产生资源消耗，所以建议对一个数据库，不要创建过多组合任务。
- FDI支持单个CDC任务中配置多个Schema下的多个数据库表，实现统一的全量或增量采集能力。
- 组合任务在运行过程中支持添加表，选择重启后可对新表执行全量采集或者增量采集。
- 源端Oracle数据源：
  - 大文本类型和二进制类型的字段不支持同步。
  
  - 表名为小写的数据表不支持同步。
  
  - 无主键的数据表不支持同步。 如果表中数据较少，建议通过每天采集一次全量数据的方式进行采集，目前PostgreSQL类型表支持写入前清空数据。对于从Oracle数据库采集数据，但表中没有主键的情况，可以利用Oracle内部的RowId作为主键，RowId一般是使用数字、字母生成18位长度的字符串。
    
  
  - 名称为数据库自身保留字的数据表或数据字段不支持同步。
  
  - truncate方式删除的数据不支持同步，整表方式删除的数据不支持同步。
   
- 源端MySQL数据源： 如果MySQL数据库使用的是MGR集群模式，在接入源端数据源时，必须直接连接主节点，不能连接route节点。
  如果MySQL数据库中数据量特别巨大，在首次执行数据同步时可能会连接数据库超时，可以通过修改MySQL数据库的超时参数interactive_timeout和wait_timeout来规避。
  
 
 #### 创建组合任务
1. 登录[ROMA Connect控制台](https://console.huaweicloud.com/roma3)，在左侧导航栏选择"资源管理"，在实例页面单击实例，进入实例控制台。
2. 在左侧的导航栏选择"数据集成 FDI \> 任务管理"，然后单击页面的"创建组合任务"。
3. 在创建组合任务页面中配置任务基本信息。
   表1任务基本信息 
   | 参数             | 配置说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
   |:---|:---|
   | 任务名称           | 任务创建后，任务名称不可修改。建议您按照一定的命名规则规划任务名称，能帮助您快速识别和检索任务。 任务名称只能以字母、数字为开头，包含字母、数字和 . _ - , 3\~100个字符。                                                                                                                                                                                                                                                                                                                                                                                                                                     |
   | 任务时区补偿偏移量      | 时区偏移量补偿机制，源端时区以UTC+0为标准，目标端时区是客户自己需要，来计算目标端和源端的偏移量。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
   | 集成模式           | 选择数据集成的模式。 - 定时：指数据集成任务根据任务计划，在指定的时间执行任务，将源端数据集成到目标端。 说明： 仅数据源类型为MySQL、Oracle、PostgreSQL、SQL Server、Hana时支持定时。   - 实时：指数据集成任务不断检测源端数据的变更，并实时将新增的数据集成到目标端。   不同数据源所支持的数据集成模式有所不同，具体请参考[表1](https://support.huaweicloud.com/usermanual-roma/fdi-ug-190429002.html#fdi-ug-190429002__table14230413102511)。 |
   | 描述             | 建议按照任务的实际用途补充任务描述，方便区分不同任务。任务描述在创建完成后可修改。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
   | 任务标签           | 添加任务标签，用来对任务进行分类，方便用户快速查询。可选择已有的标签进行关联，如果没有可单击添加按钮，添加新标签，新标签会在任务保存时被保存，再创建任务时可直接搜索该标签。                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
   | 操作类型           | **仅当"集成模式"选择"实时"时配置。** 数据库日志操作类型，包含插入，删除、更新。例如，操作任务选择插入和更新，那么将只获取数据库中插入和更新的日志信息。                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
   | QuartZ Cron表达式 | **仅当"集成模式"选择"定时"时配置。** 通过QuartZ Cron表达式制定任务调度计划。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
   | 调度周期           | **仅当"集成模式"选择"定时"时配置。** 任务执行周期，根据"单位"选择的不同，可设置值的范围不同。 例如"单位"选择"天"，"调度周期"设置为"1"，则表示数据集成任务每1天执行一次。                                                                                                                                                                                                                                                                                                                                                                                                  |
   | 表达式            | **仅当"QuartZ Cron表达式"选择"使用"时配置。** 任务计划对应的QuartZ Cron表达式，ROMA Connect当前仅支持分钟级的计划，故表达式中的"秒"固定为"0"。关于QuartZ Cron表达式的使用详解，请参考[附录：QuartZ Cron表达式配置说明](https://support.huaweicloud.com/usermanual-roma/fdi-faq-190626001.html)。 例如：每天凌晨1点到凌晨4点之间，每隔15分钟执行一次任务，该计划对应的QuartZ Cron表达式为： ``` 0 0/15 1-4 * * ? ```                                                                                                                                                        |
   | 表达式时区          | 选择任务所在的UTC时区。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
   | 生效时间           | **仅当"集成模式"选择"定时"时配置。** 任务的开始执行时间。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
   | 同步已有数据         | **此配置项仅在创建任务后，重新"编辑"任务才可见。** 启动组合任务时，如果有新添加到任务中的表映射，此开关用于如下控制： - 启用此开关，则任务会先全量同步新增表的存量数据，全量同步结束后接着增量同步。  - 禁用此开关，则任务不会同步新增表的存量数据，只会同步任务启动后的增量数据。                                                                                                                                                                  |
      
   
4. 配置映射关系，即源端和目标端的数据源信息。
   
   表2源端和目标端配置信息 
   | 参数         || 配置说明                                                                                                                                                                              |
   |:---|---|:---|
   | 源端  | 实例名称  | 选择当前正在使用的ROMA Connect实例。                                                                                                                                                          |
   | 源端  | 集成应用  | 选择源端数据源所属的集成应用。                                                                                                                                                                   |
   | 源端  | 数据源类型 | 选择源端的数据源类型。 定时：支持MySQL、Oracle、SQL Server、PostgreSQL、Hana。 实时：支持MySQL、Oracle、SQL Server。                    |
   | 目标端 | 实例名称  | 选择当前正在使用的ROMA Connect实例，源端实例配置后目标端自动关联，无需配置。                                                                                                                                      |
   | 目标端 | 集成应用  | 选择目标端数据源所属的集成应用。                                                                                                                                                                  |
   | 目标端 | 数据源类型 | 选择目标端的数据源类型。 定时：支持MySQL、Oracle、PostgreSQL、SQL Server、Hana。 实时：支持MySQL、Oracle、PostgreSQL、SQL Server、Kafka。 |
      
   
5. 配置源端和目标端的数据表映射关系，您可以通过自动映射或手动添加的方式配置数据表映射关系。
   ![](https://support.huaweicloud.com/usermanual-roma/public_sys-resources/note_3.0-zh-cn.png)
   - 目标端数据字段长度应大于等于源端数据字段的长度，否则会导致同步后的数据丢失。
   
   - 当前一个任务中最多支持1000个数据表的同步。
   
   - 当目标端数据类型为"Kafka"时，目标端显示的表为虚拟表，无需编辑数据表的映射关系，只需编辑表中的字段映射关系即可。
   
   - Oracle数据源作为目标端时，主键字段对应的源端字段如果为空，该条记录会默认抛弃，不会产生调度日志错误码。
    
   - 自动映射。
     1. 单击"自动Mapping"，在弹出的对话框中配置映射策略和映射范围，单击"开始映射"。界面自动生成数据表的映射关系。
     
     2. 单击表映射关系后的"编辑"，可以根据需要修改数据表的映射关系。
     
     3. 单击表映射关系后的"查看映射"，弹出数据表的字段映射配置窗口，可根据需要修改数据表字段的映射关系或者添加mapping映射。 目标端数据字段长度应大于等于源端数据字段的长度，否则会导致同步后的数据丢失。
        
      
   
   - 手动添加表映射。
     1. 在表映射关系栏中单击"手动添加表映射"，手动添加数据表的映射关系。
     
     2. 在表映射关系中选择"源端表名"和"目标端表名"。
     
     
     
     3. 单击"操作"栏的"执行映射"，在弹出对话框中查看映射字段，可根据实际情况修改源端和目标端字段名或删除多余字段，也可单击"手动添加字段映射"添加新的字段。单击右上角的![](https://support.huaweicloud.com/usermanual-roma/zh-cn_image_0000001321640117.png)按钮，可选择字段映射的配置项。
        添加mapping映射配置项说明如下：
        - 源端字段名：选择源端表对应的字段名，例如ID。
        
        - 目标端字段名：选择目标表中对应的字段名。例如Name。
        
        - 前缀：配置同步字段的前缀内容。
        
        - 后缀：配置同步字段的后缀内容。
        
        
        配置前缀和后缀示例，例如字段内容为"test"，前缀为tab1，后缀为1，那么同步后字段为"tab1test1"。
        图1配置字段映射关系   
        ![](https://support.huaweicloud.com/usermanual-roma/zh-cn_image_0000001313911197.png "点击放大")
        仅当以PostgreSQL为目标端时，出现配置项"添加函数映射"，可单击并根据如下说明添加：
        - 映射函数：选择映射关系。
        
        - 目标端字段名：选择映射关系的字段名。例如Name。
         
     
     4. 映射字段配置完成，后单击"保存"，完成表映射。
      
    
6. 配置异常数据存储。
   ![](https://support.huaweicloud.com/usermanual-roma/public_sys-resources/note_3.0-zh-cn.png)
   仅当目标端数据类型为MySQL、Oracle、PostgreSQL、SQL Server时可配置，在配置异常数据存储前，需要提前完成OBS数据源的接入配置，具体请参见[ROMA Connect接入OBS数据源](https://support.huaweicloud.com/usermanual-roma/fdi-ug-190429037.html)。
   在每次任务执行过程中，如果源端的某些数据符合集成条件，但因为网络抖动或其他异常等原因，无法顺利集成到目标端数据源，则ROMA Connect可以将这些数据以文本文件的形式存储在OBS中。
   表3异常数据存储信息 
   | 参数    | 配置说明                                   |
   |:---|:---|
   | 源数据类型 | 当前仅支持选择"OBS"。                          |
   | 应用    | 选择对应的应用。                               |
   | 数据源名称 | 选择已配置的OBS数据源。                          |
   | Path  | 填写异常数据要存储到OBS数据源的对象名。Path的值不能以斜杠（/）结尾。 |
      
   
7. 配置事务阈值配置。
   ![](https://support.huaweicloud.com/usermanual-roma/public_sys-resources/note_3.0-zh-cn.png)
   仅当集成模式为实时，且源端数据类型为Oracle时可配置。
   对于Oracle源，如果事务大小或持续时间超过以下两个参数，则强制提交事务。如果没有配置这些参数，则使用默认值。
   表4事务阈值配置 
   | 参数          | 配置说明              |
   |:---|:---|
   | 事务大小        | 配置事务大小值，默认100000。 |
   | 事务持续时间(min) | 配置事务持续时间，默认250分钟。 |
      
   
8. 配置完成后，单击"创建"，完成组合任务的创建。
   ![](https://support.huaweicloud.com/usermanual-roma/public_sys-resources/note_3.0-zh-cn.png)
   在组合任务启动后，若出现以下场景，可以在任务列表中单击组合任务操作栏的"重置同步进度"，根据实际情况选择自定义重置或全量重置。
   全量重置将会删除全部已同步的进度信息，但不会删除目的端任何数据；再次执行任务将重新开始全量同步，当数据库中数据过多时，可能会需要等待较长时间才会开始实时同步阶段，请谨慎使用该功能。
   重置同步进度后，任务会重新进行数据的同步，然后再实时检测增量数据并同步。
   - 需要组合任务支持源端新增数据表和数据字段的同步。
   
   - 源端CDC归档日志被清理导致组合任务同步失败。
   
   - MySQL由于未采用GTID模式，发生了主备切换，导致组合任务同步失败。
   
   
   仅当"任务状态"为"停止"时，才能进行重置同步进度操作。
   ![](https://support.huaweicloud.com/usermanual-roma/public_sys-resources/caution_3.0-zh-cn.png)
   删除组合任务时，GaussDB、PostgreSQL数据源在任务删除后客户需要在数据库执行sql: select pg_drop_replication_slot('roma_fdi_{task_id}')来删除复制槽，{task_id}需替换为真实id。"
   
 
#### 相关文档
- 如果您希望通过API创建FDI组合任务，请参考[创建组合任务](https://support.huaweicloud.com/api-roma/CreateMultiTasks.html)。
- 在创建和执行任务如遇到疑问和故障，请参见FDI[常见问题](https://support.huaweicloud.com/roma_faq/roma_07_1101.html)和[故障排除](https://support.huaweicloud.com/trouble-roma/roma_08_1012.html)。
 
