目的:将数据库DBA中的a表,实时同步到DBB库中的b表,b表与a表相比多了一个新的字段进行区分;
部署:
部署zk;
添加zk/node/canal到manager控制;
添加数据源、数据表管理
添加channel/pipeline/映射关系
eventProcessor:
package com.alibaba.otter.node.extend.processor;
import java.sql.Types;
import java.util.List;
import com.alibaba.otter.node.extend.processor.AbstractEventProcessor;
import com.alibaba.otter.shared.etl.model.EventColumn;
import com.alibaba.otter.shared.etl.model.EventData;
import com.alibaba.otter.shared.etl.model.EventType;
/**
* 业务自定义处理过程
*
* @author jianghang 2012-6-25 下午02:26:36
* @version 4.1.0
*/
public class TestTranfer extends AbstractEventProcessor {
/**
* 自定义处理单条EventData对象
*
* @return {@link EventData} 返回值=null,需要忽略该条数据
*/
public boolean process(EventData eventData){
EventType et = eventData.getEventType();
if(et == EventType.INSERT){
insert(eventData);
}
if(et == EventType.UPDATE || et == EventType.DELETE){
EventColumn misc = new EventColumn();
misc.setColumnValue("122");
misc.setColumnType(Types.INTEGER);
misc.setColumnName("addli");
List<EventColumn> ks = eventData.getKeys();
ks.add(misc);
}
return true;
}
private void printList(List<EventColumn> list){
for(EventColumn t:list){
System.out.println(t.getColumnName() +" = " + t.getColumnValue());
}
}
private void insert(EventData eventData) {
EventColumn misc = new EventColumn();
misc.setColumnValue("122");
misc.setColumnType(Types.INTEGER);
misc.setColumnName("addli");
misc.setUpdate(true);
List<EventColumn> cols = eventData.getUpdatedColumns();
cols.add(misc);
eventData.setColumns(cols);
}
}
测试用数据库脚本:
CREATE DATABASE /*!32312 IF NOT EXISTS*/`mycat_test` /*!40100 DEFAULT CHARACTER SET utf8 */;
USE `mycat_test`;
/*Table structure for table `sam_test` */
DROP TABLE IF EXISTS `sam_test`;
CREATE TABLE `sam_test` (
`id_` int(4) NOT NULL AUTO_INCREMENT,
`name_` varchar(64) NOT NULL,
`user_id` bigint(4) NOT NULL,
PRIMARY KEY (`id_`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
CREATE DATABASE /*!32312 IF NOT EXISTS*/`mycat_test1` /*!40100 DEFAULT CHARACTER SET utf8 */;
USE `mycat_test1`;
/*Table structure for table `sam_test1` */
DROP TABLE IF EXISTS `sam_test1`;
CREATE TABLE `sam_test1` (
`id_` int(4) NOT NULL AUTO_INCREMENT,
`name_` varchar(64) NOT NULL,
`user_id` bigint(4) NOT NULL, `addli` int(6) not null,
PRIMARY KEY (`id_`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;