in odpsreader/src/main/java/com/alibaba/datax/plugin/reader/odpsreader/ReaderProxy.java [458:559]
private List transOdpsArrayToJavaList(List odpsArray, ArrayTypeInfo typeInfo) {
TypeInfo eleType = typeInfo.getElementTypeInfo();
List result = new ArrayList();
switch (eleType.getOdpsType()) {
// warn:array<double> [1.2, 3.4] 被转为了:"["1.2", "3.4"]", 本来应该被转换成 "[1.2, 3.4]"
// 注意回归Case覆盖
case BIGINT:
case DOUBLE:
case INT:
case FLOAT:
case DECIMAL:
case TINYINT:
case SMALLINT:
for (Object item : odpsArray) {
Object object = item;
result.add(object == null ? NULL_INDICATOR : object);
}
return result;
case BOOLEAN: // 未调整array<Boolean> 问题
case STRING:
case VARCHAR:
case CHAR:
case TIMESTAMP:
case DATE:
for (Object item : odpsArray) {
Object object = item;
result.add(object == null ? NULL_INDICATOR : object.toString());
}
return result;
/**
* 日期类型
*/
case DATETIME:
for (Object item : odpsArray) {
Date dateVal = (Date) item;
result.add(dateVal == null ? NULL_INDICATOR : dateFormat.format(dateVal));
}
return result;
/**
* 字节数组
*/
case BINARY:
for (Object item : odpsArray) {
Binary binaryVal = (Binary) item;
result.add(binaryVal == null ? NULL_INDICATOR :
Base64.encodeBase64(binaryVal.data()));
}
return result;
/**
* 日期间隔
*/
case INTERVAL_DAY_TIME:
for (Object item : odpsArray) {
IntervalDayTime dayTimeVal = (IntervalDayTime) item;
result.add(dayTimeVal == null ? NULL_INDICATOR :
transIntervalDayTimeToJavaMap(dayTimeVal));
}
return result;
/**
* 年份间隔
*/
case INTERVAL_YEAR_MONTH:
for (Object item : odpsArray) {
IntervalYearMonth yearMonthVal = (IntervalYearMonth) item;
result.add(yearMonthVal == null ? NULL_INDICATOR :
transIntervalYearMonthToJavaMap(yearMonthVal));
}
return result;
/**
* 结构体
*/
case STRUCT:
for (Object item : odpsArray) {
Struct structVal = (Struct) item;
result.add(structVal == null ? NULL_INDICATOR :
transOdpsStructToJavaMap(structVal));
}
return result;
/**
* MAP类型
*/
case MAP:
for (Object item : odpsArray) {
Map mapVal = (Map) item;
result.add(mapVal == null ? NULL_INDICATOR :
transOdpsMapToJavaMap(mapVal, (MapTypeInfo) eleType));
}
return result;
/**
* ARRAY类型
*/
case ARRAY:
for (Object item : odpsArray) {
List arrayVal = (List) item;
result.add(arrayVal == null ? NULL_INDICATOR :
transOdpsArrayToJavaList(arrayVal, (ArrayTypeInfo) eleType));
}
return result;
default:
throw new IllegalArgumentException("decode record failed. column type: " + eleType.getTypeName());
}
}