otswriter/src/main/java/com/alibaba/datax/plugin/writer/otswriter/utils/ParseRecord.java [61:93]:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        if (pk == null) {
            return null;
        }
        List<Pair<String, ColumnValue>> values = Common.getAttrFromRecord(pkColumns.size(), attrColumns, record);
        if (values == null) {
            return null;
        }
        
        switch (type) {
            case PUT_ROW:
                RowPutChange rowPutChange = new RowPutChange(tableName, pk);
                for (Pair<String, ColumnValue> en : values) {
                    if (en.getSecond() != null) {
                        rowPutChange.addColumn(buildColumn(en.getFirst(), en.getSecond(), timestamp));
                    } 
                }
                if (rowPutChange.getColumnsToPut().isEmpty()) {
                	return null;
                } 
                return new OTSLine(pk, record, rowPutChange);
            case UPDATE_ROW:
                RowUpdateChange rowUpdateChange = new RowUpdateChange(tableName, pk);
                for (Pair<String, ColumnValue> en : values) {
                    if (en.getSecond() != null) {
                        rowUpdateChange.put(buildColumn(en.getFirst(), en.getSecond(), timestamp));
                    } else {
                        rowUpdateChange.deleteColumns(en.getFirst()); // 删除整列
                    }
                }
                return new OTSLine(pk, record, rowUpdateChange);
            default:
                LOG.error("Bug branch, can not support : {}(OTSOpType)", type);
                throw new OTSCriticalException(String.format(OTSErrorMessage.UNSUPPORT, type));
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -



otswriter/src/main/java/com/alibaba/datax/plugin/writer/otswriter/utils/ParseRecord.java [108:140]:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        if (pk == null) {
            return null;
        }
        List<Pair<String, ColumnValue>> values = Common.getAttrFromRecord(pkColumns.size(), attrColumns, record);
        if (values == null) {
            return null;
        }

        switch (type) {
            case PUT_ROW:
                RowPutChange rowPutChange = new RowPutChange(tableName, pk);
                for (Pair<String, ColumnValue> en : values) {
                    if (en.getSecond() != null) {
                        rowPutChange.addColumn(buildColumn(en.getFirst(), en.getSecond(), timestamp));
                    }
                }
                if (rowPutChange.getColumnsToPut().isEmpty()) {
                    return null;
                }
                return new OTSLine(pk, record, rowPutChange);
            case UPDATE_ROW:
                RowUpdateChange rowUpdateChange = new RowUpdateChange(tableName, pk);
                for (Pair<String, ColumnValue> en : values) {
                    if (en.getSecond() != null) {
                        rowUpdateChange.put(buildColumn(en.getFirst(), en.getSecond(), timestamp));
                    } else {
                        rowUpdateChange.deleteColumns(en.getFirst()); // 删除整列
                    }
                }
                return new OTSLine(pk, record, rowUpdateChange);
            default:
                LOG.error("Bug branch, can not support : {}(OTSOpType)", type);
                throw new OTSCriticalException(String.format(OTSErrorMessage.UNSUPPORT, type));
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -



