otter同步时,自定义扩展,添加字段,插入的目标表中的数据,对应的新字段没有数据,
自定义实现如下:
public class TestEventProcessor extends AbstractEventProcessor {
public boolean process(EventData eventData) {
boolean isHandle = true;
if (eventData == null)
return isHandle;
EventColumn c = new EventColumn();
/*c.setColumnName("update_time");
c.setColumnType(Types.DATE);
c.setColumnValue("2019-03-05 00:00:00");*/
c.setColumnName("mark");
c.setColumnType(Types.VARCHAR);
c.setColumnValue("fafasfdsaf");
c.setUpdate(true);
eventData.getColumns().add(c);
List<EventColumn> cols = eventData.getColumns();
cols.add(c);
eventData.setColumns(cols);
return isHandle;
}
}
EventProcessor类型:选择的是source
otter版本:4.2.17
请问,可能原因是什么?谢谢!!!
4条答案
按热度按时间gc0ot86w1#
新字段需要在Map关系表中定义(源、目标表中都需要配置),ViewExtractor.java 中有过滤
如果新字段源表没有,目标表有,需要扩展下 ViewExtractor
f4t66c6m2#
新字段需要在Map关系表中定义(源、目标表中都需要配置),ViewExtractor.java 中有过滤
如果新字段源表没有,目标表有,需要扩展下 ViewExtractor
ViewExtractor.java这个没找到是在哪定义的。
public boolean process(EventData eventData) {
// 构造新的字段
EventColumn schema = new EventColumn();
schema.setColumnValue(sdf.format(new Date(eventData.getExecuteTime())));
schema.setColumnType(Types.DATE);
schema.setColumnName("opt_time");
// 替换为新的字段
eventData.getColumns().add(schema);
return true;
}
我这样写,可以了。目标表中没有opt_time字段。
ocebsuys3#
otter的自定义Map到底该怎么做,可以仔细说一下流程吗,官方说明有一些细节感觉没有说到
想自定义Map是不是先下载otter的源码,然后在源码中把代码写好以后,再把代码复制到EventProcessor文本中,就可以了
nue99wik4#
新字段需要在Map关系表中定义(源、目标表中都需要配置),ViewExtractor.java 中有过滤
如果新字段源表没有,目标表有,需要扩展下 ViewExtractor
ViewExtractor.java这个没找到是在哪定义的。
public boolean process(EventData eventData) {
// 构造新的字段
EventColumn schema = new EventColumn();
schema.setColumnValue(sdf.format(new Date(eventData.getExecuteTime())));
schema.setColumnType(Types.DATE);
schema.setColumnName("opt_time");
// 替换为新的字段
eventData.getColumns().add(schema);
return true;
}
我这样写,可以了。目标表中没有opt_time字段。
我也是在processor里面new了一个新的column,但是什么都没有发生