TransMeta transMeta = new TransMeta();
transMeta.setName(name);
DatabaseMeta from = transToDatabaseMeta(f);
DatabaseMeta to = new DatabaseMeta();
to.setDBPort(t.getPort());
to.setHostname(t.getHost());
to.setDBName(t.getDb());
to.setUsername(t.getUser());
to.setPassword(t.getPass());
transMeta.addDatabase(from);
transMeta.addDatabase(to);
PluginRegistry registry = PluginRegistry.getInstance();
TableInputMeta input = new TableInputMeta();
input.setDatabaseMeta(transMeta.findDatabase(f.getName()));
input.setSQL(trDTO.getSql());
String tableInputPluginId = registry.getPluginId(StepPluginType.class, input);
StepMeta firstStep = new StepMeta(tableInputPluginId, "tableInput", input);
transMeta.addStep(firstStep);
// ------------
SelectValuesMeta select = new SelectValuesMeta();
select.allocate(0, 0, fileds.length);
select.setSelectName(fileds);
//数据类型转换
for (int i = 0; i < fileds.length; i++) {
if (select.getMeta()[i] == null) {
select.getMeta()[i] = new SelectMetadataChange(select);
}
if (filedsType[i].equals("float")) {
select.getMeta()[i].setType("Number");
select.getMeta()[i].setLength(20);
select.getMeta()[i].setPrecision(8);
} else if (filedsType[i].equals("date")) {
select.getMeta()[i].setType("date");
}
select.getMeta()[i].setName(fileds[i]);
select.getMeta()[i].setRename(fileds[i]);
}
String selectValuePluginId = registry.getPluginId(StepPluginType.class, select);
StepMeta secondStep = new StepMeta(selectValuePluginId, "set values", select);
transMeta.addStep(secondStep);
// ----------
MongoDbOutputMeta output = new MongoDbOutputMeta();
output.setDbName(t.getDb());
output.setCollection(trDTO.getTableName());
// if(){//清空mongo中中集合的文档
// output.setTruncate(true);
// }
//这里选择的更新方式是,如果没有的话则插入,有的话则更新
if(trDTO.getIsUpSert()){//如果需要更新的话
output.setUpsert(true);
}
//创建索引
// String[] Indexs = trDTO.getIndexs().split("\\+");
// String[] IndexOpp = trDTO.getIndexsOpp().split(",");
//
// List<MongoIndex> mongoIndexes = new ArrayList<MongoIndex>() ;
//
// if(Indexs.length==IndexOpp.length){
// for(int i=0;i<Indexs.length;i++){
// MongoIndex mgIndex = new MongoIndex();
//
// mgIndex.m_drop = false;
// mgIndex.m_pathToFields = Indexs[i];
// mgIndex.m_unique= Boolean.getBoolean(IndexOpp[i]);
// mongoIndexes.add(mgIndex);
// }
//
// }else{//如果长度不相同的话直接抛出异常
// result.setStatus(TaskStatus.FAIL.getValue());
// updateDetail(result);
// return result;
// }
// output.setMongoIndexes(mongoIndexes );
//设置认证
output.setPort(t.getPort());
output.setHostnames(t.getHost());
output.setDbName(t.getDb());
output.setAuthenticationMechanism("SCRAM-SHA-1");
output.setAuthenticationUser(t.getUser());
output.setAuthenticationPassword(t.getPass());
output.setBatchInsertSize(String.valueOf(trDTO.getCommitSize()));
// 字段列表
List<MongoField> fieldList = new ArrayList();
for (int i = 0; i < fileds.length; i++) {
MongoField field = new MongoField();
field.m_incomingFieldName = fileds[i];
field.m_useIncomingFieldNameAsMongoFieldName = true;
fieldList.add(field);
}
output.setMongoFields(fieldList);
// 是否批量处理
if (!trDTO.isBatch()) {
output.setUpdate(false);
}
String outputId = registry.getPluginId(StepPluginType.class, output);
StepMeta thirdStep = new StepMeta(outputId, "tableOut", output);
transMeta.addStep(thirdStep);
transMeta.addTransHop(new TransHopMeta(firstStep, secondStep));
transMeta.addTransHop(new TransHopMeta(secondStep, thirdStep));
// 转换的过程中添加转换类型
String transXml = transMeta.getXML();
kettleTrans = new Trans(transMeta);
kettleTrans.setLogLevel(LogLevel.DEBUG);
//打印转换日志
saveTranLog(transMeta,datasource);
//打印每个步骤的日志
//saveStepLog(transMeta,datasource);
kettleTrans.execute(null); // You can pass arguments instead of null.
kettleTrans.waitUntilFinished();