Search in sources :

Example 6 with StringColumn

use of com.alibaba.datax.common.element.StringColumn in project DataX by alibaba.

the class ReplaceTransformer method evaluate.

@Override
public Record evaluate(Record record, Object... paras) {
    int columnIndex;
    int startIndex;
    int length;
    String replaceString;
    try {
        if (paras.length != 4) {
            throw new RuntimeException("dx_replace paras must be 4");
        }
        columnIndex = (Integer) paras[0];
        startIndex = Integer.valueOf((String) paras[1]);
        length = Integer.valueOf((String) paras[2]);
        replaceString = (String) paras[3];
    } catch (Exception e) {
        throw DataXException.asDataXException(TransformerErrorCode.TRANSFORMER_ILLEGAL_PARAMETER, "paras:" + Arrays.asList(paras).toString() + " => " + e.getMessage());
    }
    Column column = record.getColumn(columnIndex);
    try {
        String oriValue = column.asString();
        //如果字段为空,跳过replace处理
        if (oriValue == null) {
            return record;
        }
        String newValue;
        if (startIndex > oriValue.length()) {
            throw new RuntimeException(String.format("dx_replace startIndex(%s) out of range(%s)", startIndex, oriValue.length()));
        }
        if (startIndex + length >= oriValue.length()) {
            newValue = oriValue.substring(0, startIndex) + replaceString;
        } else {
            newValue = oriValue.substring(0, startIndex) + replaceString + oriValue.substring(startIndex + length, oriValue.length());
        }
        record.setColumn(columnIndex, new StringColumn(newValue));
    } catch (Exception e) {
        throw DataXException.asDataXException(TransformerErrorCode.TRANSFORMER_RUN_EXCEPTION, e.getMessage(), e);
    }
    return record;
}
Also used : StringColumn(com.alibaba.datax.common.element.StringColumn) Column(com.alibaba.datax.common.element.Column) StringColumn(com.alibaba.datax.common.element.StringColumn) DataXException(com.alibaba.datax.common.exception.DataXException)

Aggregations

StringColumn (com.alibaba.datax.common.element.StringColumn)6 Column (com.alibaba.datax.common.element.Column)5 DataXException (com.alibaba.datax.common.exception.DataXException)4 Result (org.apache.hadoop.hbase.client.Result)2 OdpsType (com.aliyun.odps.OdpsType)1 Record (com.aliyun.odps.data.Record)1 TunnelException (com.aliyun.odps.tunnel.TunnelException)1 IOException (java.io.IOException)1