in odpsreader/src/main/java/com/alibaba/datax/plugin/reader/odpsreader/ReaderProxy.java [829:912]
private Map transOdpsStructToJavaMap(Struct odpsStruct) {
Map result = new HashMap();
for (int i = 0; i < odpsStruct.getFieldCount(); i++) {
String fieldName = odpsStruct.getFieldName(i);
Object fieldValue = odpsStruct.getFieldValue(i);
TypeInfo fieldType = odpsStruct.getFieldTypeInfo(i);
switch (fieldType.getOdpsType()) {
case BIGINT:
case DOUBLE:
case BOOLEAN:
case STRING:
case DECIMAL:
case TINYINT:
case SMALLINT:
case INT:
case FLOAT:
case VARCHAR:
case CHAR:
case TIMESTAMP:
case DATE:
result.put(fieldName, fieldValue == null ? NULL_INDICATOR : fieldValue.toString());
break;
/**
* 日期类型
*/
case DATETIME:
Date dateVal = (Date) fieldValue;
result.put(fieldName, dateVal == null ? NULL_INDICATOR : dateFormat.format(dateVal));
break;
/**
* 字节数组
*/
case BINARY:
Binary binaryVal = (Binary) fieldValue;
result.put(fieldName, binaryVal == null ? NULL_INDICATOR :
Base64.encodeBase64(binaryVal.data()));
break;
/**
* 日期间隔
*/
case INTERVAL_DAY_TIME:
IntervalDayTime dayTimeVal = (IntervalDayTime) fieldValue;
result.put(fieldName, dayTimeVal == null ? NULL_INDICATOR :
transIntervalDayTimeToJavaMap(dayTimeVal));
break;
/**
* 年份间隔
*/
case INTERVAL_YEAR_MONTH:
IntervalYearMonth yearMonthVal = (IntervalYearMonth) fieldValue;
result.put(fieldName, yearMonthVal == null ? NULL_INDICATOR :
transIntervalYearMonthToJavaMap(yearMonthVal));
break;
/**
* 结构体
*/
case STRUCT:
Struct structVal = (Struct) fieldValue;
result.put(fieldName, structVal == null ? NULL_INDICATOR :
transOdpsStructToJavaMap(structVal));
break;
/**
* MAP类型
*/
case MAP:
Map mapVal = (Map) fieldValue;
result.put(fieldName, mapVal == null ? NULL_INDICATOR :
transOdpsMapToJavaMap(mapVal, (MapTypeInfo) fieldType));
break;
/**
* ARRAY类型
*/
case ARRAY:
List arrayVal = (List) fieldValue;
result.put(fieldName, arrayVal == null ? NULL_INDICATOR :
transOdpsArrayToJavaList(arrayVal, (ArrayTypeInfo) fieldType));
break;
default:
throw new IllegalArgumentException("decode record failed. column type: " + fieldType.getTypeName());
}
}
return result;
}