in cassandrawriter/src/main/java/com/alibaba/datax/plugin/writer/cassandrawriter/CassandraWriterHelper.java [46:143]
public static Object parseFromString(String s, DataType sqlType ) throws Exception {
if (s == null || s.isEmpty()) {
if (sqlType.getName() == Name.ASCII || sqlType.getName() == Name.TEXT ||
sqlType.getName() == Name.VARCHAR) {
return s;
} else {
return null;
}
}
switch (sqlType.getName()) {
case ASCII:
case TEXT:
case VARCHAR:
return s;
case BLOB:
if (s.length() == 0) {
return new byte[0];
}
byte[] byteArray = new byte[s.length() / 2];
for (int i = 0; i < byteArray.length; i++) {
String subStr = s.substring(2 * i, 2 * i + 2);
byteArray[i] = ((byte) Integer.parseInt(subStr, 16));
}
return ByteBuffer.wrap(byteArray);
case BOOLEAN:
return Boolean.valueOf(s);
case TINYINT:
return Byte.valueOf(s);
case SMALLINT:
return Short.valueOf(s);
case INT:
return Integer.valueOf(s);
case BIGINT:
return Long.valueOf(s);
case VARINT:
return new BigInteger(s, 10);
case FLOAT:
return Float.valueOf(s);
case DOUBLE:
return Double.valueOf(s);
case DECIMAL:
return new BigDecimal(s);
case DATE: {
String[] a = s.split("-");
if (a.length != 3) {
throw new Exception(String.format("DATE类型数据 '%s' 格式不正确,必须为yyyy-mm-dd格式", s));
}
return LocalDate.fromYearMonthDay(Integer.valueOf(a[0]), Integer.valueOf(a[1]),
Integer.valueOf(a[2]));
}
case TIME:
return Long.valueOf(s);
case TIMESTAMP:
return new Date(Long.valueOf(s));
case UUID:
case TIMEUUID:
return UUID.fromString(s);
case INET:
String[] b = s.split("/");
if (b.length < 2) {
return InetAddress.getByName(s);
}
byte[] addr = InetAddress.getByName(b[1]).getAddress();
return InetAddress.getByAddress(b[0], addr);
case DURATION:
return Duration.from(s);
case LIST:
case MAP:
case SET:
case TUPLE:
case UDT:
Object jsonObject = JSON.parse(s);
return parseFromJson(jsonObject,sqlType);
default:
throw DataXException.asDataXException(CassandraWriterErrorCode.CONF_ERROR,
"不支持您配置的列类型:" + sqlType + ", 请检查您的配置 或者 联系 管理员.");
} // end switch
}