in flink-doris-connector/src/main/java/org/apache/doris/flink/deserialization/converter/DorisRowConverter.java [319:349]
private Object convertMapData(MapData map, LogicalType type) {
Map<Object, Object> result = new HashMap<>();
if (map instanceof GenericMapData) {
GenericMapData gMap = (GenericMapData)map;
for (Object key : ((GenericArrayData)gMap.keyArray()).toObjectArray()) {
result.put(key, gMap.get(key));
}
return result;
}
if (map instanceof BinaryMapData) {
BinaryMapData bMap = (BinaryMapData)map;
LogicalType valueType = ((MapType)type).getValueType();
Map<?, ?> javaMap = bMap.toJavaMap(((MapType) type).getKeyType(), valueType);
for (Map.Entry<?,?> entry : javaMap.entrySet()) {
String key = entry.getKey().toString();
if (LogicalTypeRoot.MAP.equals(valueType.getTypeRoot())) {
result.put(key, convertMapData((MapData)entry.getValue(), valueType));
}else if (LogicalTypeRoot.DATE.equals(valueType.getTypeRoot())) {
result.put(key, Date.valueOf(LocalDate.ofEpochDay((Integer)entry.getValue())).toString());
}else if (LogicalTypeRoot.ARRAY.equals(valueType.getTypeRoot())) {
result.put(key, convertArrayData((ArrayData)entry.getValue(), valueType));
}else if(entry.getValue() instanceof TimestampData){
result.put(key, ((TimestampData)entry.getValue()).toTimestamp().toString());
}else{
result.put(key, entry.getValue().toString());
}
}
return result;
}
throw new UnsupportedOperationException("Unsupported map data: " + map.getClass());
}