in hbase20xsqlwriter/src/main/java/com/alibaba/datax/plugin/writer/hbase20xsqlwriter/HBase20xSQLWriterTask.java [239:328]
private void setupColumn(int pos, int sqlType, Column col) throws SQLException {
if (col.getRawData() != null) {
switch (sqlType) {
case Types.CHAR:
case Types.VARCHAR:
pstmt.setString(pos, col.asString());
break;
case Types.BINARY:
case Types.VARBINARY:
pstmt.setBytes(pos, col.asBytes());
break;
case Types.BOOLEAN:
pstmt.setBoolean(pos, col.asBoolean());
break;
case Types.TINYINT:
case Constant.TYPE_UNSIGNED_TINYINT:
pstmt.setByte(pos, col.asLong().byteValue());
break;
case Types.SMALLINT:
case Constant.TYPE_UNSIGNED_SMALLINT:
pstmt.setShort(pos, col.asLong().shortValue());
break;
case Types.INTEGER:
case Constant.TYPE_UNSIGNED_INTEGER:
pstmt.setInt(pos, col.asLong().intValue());
break;
case Types.BIGINT:
case Constant.TYPE_UNSIGNED_LONG:
pstmt.setLong(pos, col.asLong());
break;
case Types.FLOAT:
pstmt.setFloat(pos, col.asDouble().floatValue());
break;
case Types.DOUBLE:
pstmt.setDouble(pos, col.asDouble());
break;
case Types.DECIMAL:
pstmt.setBigDecimal(pos, col.asBigDecimal());
break;
case Types.DATE:
case Constant.TYPE_UNSIGNED_DATE:
pstmt.setDate(pos, new Date(col.asDate().getTime()));
break;
case Types.TIME:
case Constant.TYPE_UNSIGNED_TIME:
pstmt.setTime(pos, new Time(col.asDate().getTime()));
break;
case Types.TIMESTAMP:
case Constant.TYPE_UNSIGNED_TIMESTAMP:
pstmt.setTimestamp(pos, new Timestamp(col.asDate().getTime()));
break;
default:
throw DataXException.asDataXException(HBase20xSQLWriterErrorCode.ILLEGAL_VALUE,
"不支持您配置的列类型:" + sqlType + ", 请检查您的配置 或者 联系 Hbase 管理员.");
}
} else {
// 没有值,按空值的配置情况处理
switch (nullModeType){
case Skip:
// 跳过空值,则不插入该列,
pstmt.setNull(pos, sqlType);
break;
case Empty:
// 插入"空值",请注意不同类型的空值不同
// 另外,对SQL来说,空值本身是有值的,这与直接操作HBASE Native API时的空值完全不同
pstmt.setObject(pos, getEmptyValue(sqlType));
break;
default:
// nullMode的合法性在初始化配置的时候已经校验过,这里一定不会出错
throw DataXException.asDataXException(HBase20xSQLWriterErrorCode.ILLEGAL_VALUE,
"Hbasewriter 不支持该 nullMode 类型: " + nullModeType +
", 目前支持的 nullMode 类型是:" + Arrays.asList(NullModeType.values()));
}
}
}