Search in sources :

Example 1 with DoubleColumn

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

the class NormalTask method getVersion.

public long getVersion(Record record) {
    int index = versionColumn.getInt(Key.INDEX);
    long timestamp;
    if (index == -1) {
        //指定时间作为版本
        timestamp = versionColumn.getLong(Key.VALUE);
        if (timestamp < 0) {
            throw DataXException.asDataXException(Hbase094xWriterErrorCode.CONSTRUCT_VERSION_ERROR, "您指定的版本非法!");
        }
    } else {
        //指定列作为版本,long/doubleColumn直接record.aslong, 其它类型尝试用yyyy-MM-dd HH:mm:ss,yyyy-MM-dd HH:mm:ss SSS去format
        if (index >= record.getColumnNumber()) {
            throw DataXException.asDataXException(Hbase094xWriterErrorCode.CONSTRUCT_VERSION_ERROR, String.format("您的versionColumn配置项中中index值超出范围,根据reader端配置,index的值小于%s,而您配置的值为%s,请检查并修改.", record.getColumnNumber(), index));
        }
        if (record.getColumn(index).getRawData() == null) {
            throw DataXException.asDataXException(Hbase094xWriterErrorCode.CONSTRUCT_VERSION_ERROR, "您指定的版本为空!");
        }
        SimpleDateFormat df_senconds = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        SimpleDateFormat df_ms = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");
        if (record.getColumn(index) instanceof LongColumn || record.getColumn(index) instanceof DoubleColumn) {
            timestamp = record.getColumn(index).asLong();
        } else {
            Date date;
            try {
                date = df_ms.parse(record.getColumn(index).asString());
            } catch (ParseException e) {
                try {
                    date = df_senconds.parse(record.getColumn(index).asString());
                } catch (ParseException e1) {
                    LOG.info(String.format("您指定第[%s]列作为hbase写入版本,但在尝试用yyyy-MM-dd HH:mm:ss 和 yyyy-MM-dd HH:mm:ss SSS 去解析为Date时均出错,请检查并修改", index));
                    throw DataXException.asDataXException(Hbase094xWriterErrorCode.CONSTRUCT_VERSION_ERROR, e1);
                }
            }
            timestamp = date.getTime();
        }
    }
    return timestamp;
}
Also used : LongColumn(com.alibaba.datax.common.element.LongColumn) DoubleColumn(com.alibaba.datax.common.element.DoubleColumn) ParseException(java.text.ParseException) SimpleDateFormat(java.text.SimpleDateFormat) Date(java.util.Date)

Example 2 with DoubleColumn

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

the class NormalTask method getVersion.

public long getVersion(Record record) {
    int index = versionColumn.getInt(Key.INDEX);
    long timestamp;
    if (index == -1) {
        //指定时间作为版本
        timestamp = versionColumn.getLong(Key.VALUE);
        if (timestamp < 0) {
            throw DataXException.asDataXException(Hbase11xWriterErrorCode.CONSTRUCT_VERSION_ERROR, "您指定的版本非法!");
        }
    } else {
        //指定列作为版本,long/doubleColumn直接record.aslong, 其它类型尝试用yyyy-MM-dd HH:mm:ss,yyyy-MM-dd HH:mm:ss SSS去format
        if (index >= record.getColumnNumber()) {
            throw DataXException.asDataXException(Hbase11xWriterErrorCode.CONSTRUCT_VERSION_ERROR, String.format("您的versionColumn配置项中中index值超出范围,根据reader端配置,index的值小于%s,而您配置的值为%s,请检查并修改.", record.getColumnNumber(), index));
        }
        if (record.getColumn(index).getRawData() == null) {
            throw DataXException.asDataXException(Hbase11xWriterErrorCode.CONSTRUCT_VERSION_ERROR, "您指定的版本为空!");
        }
        SimpleDateFormat df_senconds = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        SimpleDateFormat df_ms = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");
        if (record.getColumn(index) instanceof LongColumn || record.getColumn(index) instanceof DoubleColumn) {
            timestamp = record.getColumn(index).asLong();
        } else {
            Date date;
            try {
                date = df_ms.parse(record.getColumn(index).asString());
            } catch (ParseException e) {
                try {
                    date = df_senconds.parse(record.getColumn(index).asString());
                } catch (ParseException e1) {
                    LOG.info(String.format("您指定第[%s]列作为hbase写入版本,但在尝试用yyyy-MM-dd HH:mm:ss 和 yyyy-MM-dd HH:mm:ss SSS 去解析为Date时均出错,请检查并修改", index));
                    throw DataXException.asDataXException(Hbase11xWriterErrorCode.CONSTRUCT_VERSION_ERROR, e1);
                }
            }
            timestamp = date.getTime();
        }
    }
    return timestamp;
}
Also used : LongColumn(com.alibaba.datax.common.element.LongColumn) DoubleColumn(com.alibaba.datax.common.element.DoubleColumn) ParseException(java.text.ParseException) SimpleDateFormat(java.text.SimpleDateFormat) Date(java.util.Date)

Aggregations

DoubleColumn (com.alibaba.datax.common.element.DoubleColumn)2 LongColumn (com.alibaba.datax.common.element.LongColumn)2 ParseException (java.text.ParseException)2 SimpleDateFormat (java.text.SimpleDateFormat)2 Date (java.util.Date)2