增加mongoDB不存在的字段默认值支持

This commit is contained in:
王毅 2020-03-31 17:05:55 +08:00
parent 643b6e9c64
commit a393537627

View File

@ -6,12 +6,7 @@ import java.util.Date;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
import com.alibaba.datax.common.element.BoolColumn; import com.alibaba.datax.common.element.*;
import com.alibaba.datax.common.element.DateColumn;
import com.alibaba.datax.common.element.DoubleColumn;
import com.alibaba.datax.common.element.LongColumn;
import com.alibaba.datax.common.element.Record;
import com.alibaba.datax.common.element.StringColumn;
import com.alibaba.datax.common.exception.DataXException; import com.alibaba.datax.common.exception.DataXException;
import com.alibaba.datax.common.plugin.RecordSender; import com.alibaba.datax.common.plugin.RecordSender;
import com.alibaba.datax.common.spi.Reader; import com.alibaba.datax.common.spi.Reader;
@ -127,6 +122,7 @@ public class MongoDBReader extends Reader {
Iterator columnItera = mongodbColumnMeta.iterator(); Iterator columnItera = mongodbColumnMeta.iterator();
while (columnItera.hasNext()) { while (columnItera.hasNext()) {
JSONObject column = (JSONObject)columnItera.next(); JSONObject column = (JSONObject)columnItera.next();
String columnType = column.getString(KeyConstant.COLUMN_TYPE).toLowerCase();
Object tempCol = item.get(column.getString(KeyConstant.COLUMN_NAME)); Object tempCol = item.get(column.getString(KeyConstant.COLUMN_NAME));
if (tempCol == null) { if (tempCol == null) {
if (KeyConstant.isDocumentType(column.getString(KeyConstant.COLUMN_TYPE))) { if (KeyConstant.isDocumentType(column.getString(KeyConstant.COLUMN_TYPE))) {
@ -149,8 +145,28 @@ public class MongoDBReader extends Reader {
} }
} }
if (tempCol == null) { if (tempCol == null) {
//continue; 这个不能直接continue会导致record到目的端错位 // continue;//如果没有这个字段就跳过
record.addColumn(new StringColumn(null)); if ("int".equals(columnType)) {
record.addColumn(new LongColumn(0));
}
else if ("long".equals(columnType)) {
record.addColumn(new LongColumn(0));
}
else if ("boolean".equals(columnType)) {
record.addColumn(new BoolColumn(false));
}
else if ("double".equals(columnType)) {
record.addColumn(new DoubleColumn(0.0));
}
else if ("date".equals(columnType)) {
record.addColumn(new DateColumn(0L));
}
else if ("bytes".equals(columnType)) {
record.addColumn(new BytesColumn(new byte[0]));
}
else {
record.addColumn(new StringColumn(""));
}
}else if (tempCol instanceof Double) { }else if (tempCol instanceof Double) {
//TODO deal with Double.isNaN() //TODO deal with Double.isNaN()
record.addColumn(new DoubleColumn((Double) tempCol)); record.addColumn(new DoubleColumn((Double) tempCol));