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