- 最新动态
- 功能总览
- 产品介绍
- 计费说明
- 快速入门
-
用户指南
- 开始使用ROMA Connect
- 实例管理
- 集成应用管理
-
数据源管理
- ROMA Connect支持的数据源
- 接入API数据源
- 接入ActiveMQ数据源
- 接入ArtemisMQ数据源
- 接入DB2数据源
- 接入DIS数据源
- 接入DWS数据源
- 接入DM数据源
- 接入Gauss100数据源
- 接入FTP数据源
- 接入HL7数据源
- 接入HANA数据源
- 接入HIVE数据源
- 接入LDAP数据源
- 接入IBM MQ数据源
- 接入Kafka数据源
- 接入MySQL数据源
- 接入MongoDB数据源
- 接入MQS数据源
- 接入MRS Hive数据源
- 接入MRS HDFS数据源
- 接入MRS HBase数据源
- 接入MRS Kafka数据源
- 接入OBS数据源
- 接入Oracle数据源
- 接入PostgreSQL数据源
- 接入Redis数据源
- 接入RabbitMQ数据源
- 接入RocketMQ数据源
- 接入SAP数据源
- 接入SNMP数据源
- 接入SQL Server数据源
- 接入GaussDB(for MySQL)数据源
- 接入WebSocket数据源
- 接入自定义数据源
- 数据集成指导
- 服务集成指导
- 服务集成指导(旧版界面)
- 消息集成指导
- 设备集成指导
- 应用业务模型使用指导
- 扩大资源配额
- 查看审计日志
- 查看监控指标
- 权限管理
- 用户指南(新版)
- 最佳实践
-
开发指南
- 数据集成开发指导
-
服务集成开发指导
- 开发说明
- API调用认证开发(APP认证)
- API调用认证开发(IAM认证)
-
自定义后端开发(函数后端)
- 函数后端脚本开发说明
- AesUtils类说明
- APIConnectResponse类说明
- Base64Utils类说明
- CacheUtils类说明
- CipherUtils类说明
- ConnectionConfig类说明
- DataSourceClient类说明
- DataSourceConfig类说明
- ExchangeConfig类说明
- HttpClient类说明
- HttpConfig类说明
- JedisConfig类说明
- JSON2XMLHelper类说明
- JSONHelper类说明
- JsonUtils类说明
- JWTUtils类说明
- KafkaConsumer类说明
- KafkaProducer类说明
- KafkaConfig类说明
- MD5Encoder类说明
- Md5Utils类说明
- QueueConfig类说明
- RabbitMqConfig类说明
- RabbitMqProducer类说明
- RedisClient类说明
- RomaWebConfig类说明
- RSAUtils类说明
- SapRfcClient类说明
- SapRfcConfig类说明
- SoapClient类说明
- SoapConfig类说明
- StringUtils类说明
- TextUtils类说明
- XmlUtils类说明
- 自定义后端开发(数据后端)
- 后端服务签名校验开发
- 消息集成开发指导
- 设备集成开发指导
-
API参考
- 使用前必读
- API概览
- 如何调用API
- 公共资源API
- 数据集成API
- 服务集成API
- 消息集成API
- 设备集成API
- 应用示例
- 权限和授权项
- 附录
- 历史API
- 修订记录
- SDK参考
-
常见问题
- 实例管理
-
数据集成
-
数据集成普通任务
- FDI各类数据库支持哪些数据类型?
- 跟踪号是什么,能跟踪到数据吗?
- FDI任务是否支持清空目标表?
- FDI任务只能采集单张表到单张表吗?
- 用户创建的FDI任务,同一账号的其他用户可见吗?
- FDI通过公网对接其他租户的MRS HIVE如何配置?
- 从OBS解析文件到RDS数据库,采集过一次后,后面采集会进行更新吗?
- OBS源端的CSV文件解析到关系型数据库时,列的值不对怎么办?
- MRS Hive目标字段和源端字段数据类型不匹配时,数据是否能集成到目标端?
- MRS Hive、MRS HBase和MongoDB的Mapping映射手动输入时,是否区分大小写?
- MRS Hive是否支持分区?
- 源端API类型数据源自定义周期如何设置?
- SAP是否支持分页读取视图?
- 数据集成组合任务
-
数据集成普通任务
- 服务集成
- 消息集成
- 设备集成
-
故障排除
-
数据集成任务
- MRS Hive目标端写入时出现数据乱码
- MRS Hive写入时数据全部写在第一个字段里
- 目标端任务报任务运行超时
- MySQL到MRS Hive时目标端报“could only be written to 0 of the 1 minReplication nodes. There are 2 datanode(s) running and 2 node(s) are excluded in this operation”错误
- Mysql到Mysql时源端报“Illegal mix of collations for operation 'UNION'”错误
- 源端Mysql增量采集每小时执行一次时部分数据丢失
- API到MySQL时源端报“401 unauthorized”错误
- Kafka集到Mysql目标端报“cannot find record mapping field”错误
- API到MySQL的定时任务时会出现源端报“connect timeout”错误
- Kafka到Mysql的实时任务时,MQS中的Topic下有数据,但是FDI任务没有采集到数据。
- Mysql到Mysql的定时任务,源端有类型为tinyint(1),值为2的字段,但是采集到目标端值就变成了1
- 目标端数据源为公网Kafka时,定时任务目标端报“The task executes failed.Writer data to kafka failed”错误
- 数据集成组合任务
- 数据源
- 服务集成
- 设备集成
-
数据集成任务
- 视频帮助
- 文档下载
- 通用参考
链接复制成功!
配置映射规则
概述
本节主要提供数据集成任务映射规则的配置说明。可以通过配置ROMA Connect源端数据字段到目标端数据字段的映射规则,把获取到的源端数据转换成写入目标端的数据。规则映射有映射模式和脚本模式两种模式,其中映射模式包含自动配置和手动配置两种方式。
约束与限制
源端与目标端字段名请勿使用对应数据库的关键字,否则可能导致任务运行异常。
在映射模式下,源端或目标端数据类型为API时,数据字段不支持自动Mapping,需要手动配置Mapping。
映射模式
- 自动配置Mapping
若源端信息与目标端信息中都定义了元数据,可使用“自动Mapping”方式配置Mapping信息。
单击“自动Mapping”,源端和目标端数据字段间的映射规则自动建立。
图1 自动Mapping - 手动配置Mapping
如果两端的数据表字段不一致,可单击下方的“添加mapping映射”,配置源端数据字段到目标端数据字段的映射关系。
用户可以手动添加源端数据字段与目标端数据字段的映射规则,该方式适用于所有数据类型的集成场景。可以通过键值对输入或文本框输入两种方式配置Mapping映射规则。
脚本模式
可通过编辑JavaScript脚本来配置源端数据(sourceObj指源表的字段集合对象)和目标端数据(targetObj指目标表的字段集合对象)的Mapping映射关系信息,增强复杂对象的Mapping处理能力。
脚本映射样例:
- 样例模板。
function excute(sourceObj){ //请在此处编写脚本内容, 注意大小写敏感。 //定义目标端数据对象 targetObj = {}; //支持普通的加减乘除运算 targetObj.a= (sourceObj.id * 3 + 1) % 5; //支持js的Math函数 targetObj.b= Math.sqrt(100); //支持类型转换 targetObj.c = Number("3.14"); //支持调用系统的时间函数 targetObj.date = new Date().toLocaleString(); //支持正则表达式 targetObj.fdi = sourceObj.name.replace(/world/i,"fdi"); //支持json转换 var json = JSON.parse(sourceObj.infoJson); targetObj.address = json.address; targetObj.age = json.age; targetObj.sex = json.other.sex; targetObj.hobby = json.other.hobby; //支持条件语句 if(targetObj.hobby == "rap"){ targetObj.ikun = true; }else{ targetObj.ikun = false; } return targetObj; }
- 仅字段映射。
function excute(sourceObject) {//sourceObject即源端传送的数据对象 //请在此处编写脚本内容; var targetObject = {}; targetObject.mqs_id = sourceObject.id;//映射源端数据表中的id字段至目标端字段mqs_id targetObject.mqs_name = sourceObject.name; targetObject.mqs_date = sourceObject.date; targetObject.mqs_date = sourceObject['customized-outdutydate'];//属性带中划线的字段,需要使用中括号进行引用 return targetObject; //targetObject即返回给目标端的数据对象 }
- 目标端数据源类型为API。
API数据类型的目标端需要分别使用三个对象进行传递,对象包含params、headers和body。
function excute(sourceObj) { print("execute js"); print(sourceObj); var targetObj = {}; targetObj.params = {}; targetObj.params.id = sourceObj.uid targetObj.headers = {}; targetObj.headers['X-HW-ID'] = "应用ID"; targetObj.headers['X-HW-APPKEY'] = "应用密钥"; targetObj.body = {}; return obj; }
如果转换的数据存在时间类型。则JS脚本中需参考以下加黑字段修改:说明:
编排模式下,目标端数据源类型为API,且使用JS脚本进行数据转换时,会自动先将源端类型为Date的数据类型转换为yyyy-MM-dd HH:mm:ss的字符串类型。例如,源端时间数据为19:55:20,通过JS脚本转换后会变为1970-01-01 19:55:20,而不是预期的19:55:20。其中1970-01-01为系统统一添加的默认值。
如果要目标端要获得指定格式的数据,需要参考下述示例在JS脚本中对时间数据进行转换。
function excute(sourceObj) { /** * 自定义时间格式函数 * @param {format} 时间显示格式 */ Date.prototype.format = function (format) { var date = { "M+": this.getMonth() + 1, "d+": this.getDate(), "h+": this.getHours(), "m+": this.getMinutes(), "s+": this.getSeconds(), "q+": Math.floor((this.getMonth() + 3) / 3), "S": this.getMilliseconds() }; if (/(y+)/i.test(format)) { format = format.replace(RegExp.$1, (this.getFullYear() + '').substr(4 - RegExp.$1.length)); } for (var k in date) { if (new RegExp("(" + k + ")").test(format)) { format = format.replace(RegExp.$1, RegExp.$1.length == 1 ? date[k] : ("00" + date[k]).substr(("" + date[k]).length)); } } return format; }; print("execute js"); print(sourceObj); var targetObj = {}; targetObj.params = {}; targetObj.params.id = sourceObj.uid //对时间格式的数据进行转换时,调用上述自定义的函数进行处理, 抽取时、分、秒部分的数据给目标字段。 //其中下述代码中的HH:mm:ss为时分秒时间的显示格式。如果写为hhmmss,则返回给目标字段的格式不带冒号。 targetObj.params.time = (new Date(sourceObj.time)).format("hh:mm:ss"); targetObj.headers = {}; targetObj.headers['X-HW-ID'] = "应用ID"; targetObj.headers['X-HW-APPKEY'] = "应用密钥"; targetObj.body = {}; return obj; }
- 数据库字段涉及多层json解析。
如果源端数据对象包含的字段涉及多层json对象嵌套,则需要对每一个解析出来的字段使用“[]”引用。
例如如下脚本表示root字段包含id、name、double等多层对象嵌套,则每一个解析的字段需要单独引用。
function excute(sourceObject) { //请在此处编写脚本内容; var targetObject = {}; targetObject.mqs_id = sourceObject["root.id"]; targetObject.mqs_name = sourceObject["root.name"]; targetObject.mqs_double = sourceObject["root.double"]; targetObject.mqs_date = sourceObject["root.date"]; targetObject.mqs_boolean = sourceObject["root.boolean"]; targetObject.mqs_timestamp = sourceObject["root.timestamp"]; targetObject.mqs_time = sourceObject["root.time"]; targetObject.mqs_long = sourceObject["root.long"]; return targetObject; }