
# 配置FDI数据映射规则
#### 概述
本节主要提供数据集成任务Mapping信息的配置说明。Mapping信息用于告诉ROMA Connect源端数据字段到目标端数据字段的映射规则，把获取到的源端数据转换成写入目标端的数据。
#### 约束与限制
- 源端与目标端字段名请勿使用对应数据库的关键字，否则可能导致任务运行异常。
- 若目标端数据类型为MRS Hive时，如果要配置分区字段写入，请参见[MRS Hive分区字段映射配置说明]。
 
#### 配置Mapping信息
1. 在创建任务页面中配置Mapping信息，有自动配置和手动配置两种方式。
   - **自动配置Mapping**
     若源端信息与目标端信息中都定义了元数据，可使用"自动Mapping"方式配置Mapping信息。
     单击"自动Mapping"，源端和目标端数据字段间的映射规则自动建立。如果两端的数据表字段不一致，您可以单击映射关系右侧的"编辑"，更改源端或目标端数据字段，也可单击下方的"添加字段映射"，增加源端数据字段到目标端数据字段的映射关系。
     图1自动Mapping   
     ![](https://support.huaweicloud.com/usermanual-roma/zh-cn_image_0000001199581358.png "点击放大") 
   
   - **手动配置Mapping**
     用户可以手动添加源端数据字段与目标端数据字段的映射规则，该方式适用于所有数据类型的集成场景。可以通过键值对输入或文本框输入两种方式配置Mapping映射规则。
     - 键值对输入方式 界面默认为键值对输入方式，单击"添加字段映射"，逐条增加源端数据字段到目标端数据字段的映射规则。
       
     
     - 文本框输入方式
       单击"文本框输入"，在文本框中输入映射规则脚本，输入格式如下：
       ```
       [{
       "sourceKey": "a1",
       "targetKey": "b1"
       },
       {
       "sourceKey": "a2",
       "targetKey": "b2"
       }]
       ```
       其中，sourceKey的值为源端数据字段名，targetKey的值为目标数据字段名。以上示例表示源端字段a1映射到目标端字段b1，源端字段a2映射到目标端字段b2。
       
      
    
2. 完成Mapping信息配置后，若需要配置异常数据存储、任务完成后执行，请前往[配置FDI异常数据存储（可选）](https://support.huaweicloud.com/usermanual-roma/fdi-ug-190624016.html)、[配置FDI任务执行后的动作（可选）](https://support.huaweicloud.com/usermanual-roma/fdi-ug-202008070.html)；否则可直接单击"保存"，完成数据集成任务的配置。
 
 #### MRS Hive分区字段映射配置说明
当目标端数据类型为MRS Hive时，支持分区字段的写入，可以根据实际需要进行配置。
分区字段对应的"源端字段名"需要手动填写，填写要求如下：
**格式**：{分区字段来源字段}.format("{字符串解析格式}","{分区字段解析格式}",{year\|month\|day\|hour\|minute\|second},{偏移值})
- "{分区字段来源字段}"为String类型时，"{字符串解析格式}"必须填写。
- "{分区字段来源字段}"为Timestamp类型时，"{字符串解析格式}"可为空。
- "{分区字段来源字段}"为空时，使用数据写入目标端的时间来作为分区字段。
图2MRS Hive分区字段映射   
![](https://support.huaweicloud.com/usermanual-roma/zh-cn_image_0248102039.png "点击放大")
例如，目标端分区字段为yyyymm，以源端字段createtime作为分区字段来源字段，createtime字段的时间格式为ddMMyyyy（日月年），目标端分区字段格式为yyyyMM（年月），分区字段的值比源端字段的值增加1个小时，则Mapping信息中，分区字段yyyymm的"源端字段名"填写如下：
- createtime字段为String类型时，填写为：createtime.format("ddMMyyyy","yyyyMM",hour,1)
- createtime字段为Timestamp类型时，填写为：createtime.format("","yyyyMM",hour,1)
- 若使用数据写入目标端的时间来作为分区字段时，填写为：.format("","yyyyMM",hour,1)
 
