in odps-sdk-impl/odps-common-local/src/main/java/com/aliyun/odps/local/common/utils/TypeConvertUtils.java [190:246]
public static Object transOdpsToJava(Object value, TypeInfo typeInfo) {
if (value == null) {
return null;
}
if (value instanceof Writable) {
return LocalWritableUtils.convert((Writable)value, typeInfo);
}
switch (typeInfo.getOdpsType()) {
case BIGINT:
case BOOLEAN:
case DOUBLE:
case DECIMAL:
case TINYINT:
case SMALLINT:
case INT:
case FLOAT:
case DATE:
case TIMESTAMP:
return value;
case CHAR:
case VARCHAR:
return value.toString();
case STRING:
try {
if (value instanceof byte[]) {
return new String((byte[])value, UTF8);
} else {
return value;
}
} catch (Exception e) {
throw new RuntimeException(" to readable string failed!", e);
}
case DATETIME:
if (value instanceof ZonedDateTime) {
value = Date.from(((ZonedDateTime)value).toInstant());
}
return DATE_FORMAT.format((Date) value);
case INTERVAL_DAY_TIME:
return transIntervalDayTimeToJavaMap((IntervalDayTime)value);
case INTERVAL_YEAR_MONTH:
return transIntervalYearMonthToJavaMap((IntervalYearMonth)value);
case BINARY:
try {
return LocalRunUtils.toReadableString(((Binary)value).data());
} catch (Exception e) {
throw new RuntimeException(" to readable string failed!", e);
}
case STRUCT:
return transOdpsStructToJavaMap((Struct) value);
case MAP:
return transOdpsMapToJavaMap((Map)value, (MapTypeInfo) typeInfo);
case ARRAY:
return transOdpsArrayToJavaList((List) value, (ArrayTypeInfo) typeInfo);
default:
throw new RuntimeException(" Unknown column type: " + typeInfo.getOdpsType());
}
}