in flink-cdc-connect/flink-cdc-pipeline-connectors/flink-cdc-pipeline-connector-maxcompute/src/main/java/org/apache/flink/cdc/connectors/maxcompute/utils/TypeConvertUtils.java [123:174]
public static TypeInfo toMaxCompute(DataType type) {
switch (type.getTypeRoot()) {
case CHAR:
case VARCHAR:
case TIME_WITHOUT_TIME_ZONE:
return TypeInfoFactory.STRING;
case BOOLEAN:
return TypeInfoFactory.BOOLEAN;
case BINARY:
case VARBINARY:
return TypeInfoFactory.BINARY;
case DECIMAL:
DecimalType decimalType = (DecimalType) type;
return TypeInfoFactory.getDecimalTypeInfo(
decimalType.getPrecision(), decimalType.getScale());
case TINYINT:
return TypeInfoFactory.TINYINT;
case SMALLINT:
return TypeInfoFactory.SMALLINT;
case INTEGER:
return TypeInfoFactory.INT;
case BIGINT:
return TypeInfoFactory.BIGINT;
case FLOAT:
return TypeInfoFactory.FLOAT;
case DOUBLE:
return TypeInfoFactory.DOUBLE;
case DATE:
return TypeInfoFactory.DATE;
case TIMESTAMP_WITHOUT_TIME_ZONE:
return TypeInfoFactory.TIMESTAMP_NTZ;
case TIMESTAMP_WITH_TIME_ZONE:
case TIMESTAMP_WITH_LOCAL_TIME_ZONE:
return TypeInfoFactory.TIMESTAMP;
case ARRAY:
ArrayType arrayType = (ArrayType) type;
return TypeInfoFactory.getArrayTypeInfo(toMaxCompute(arrayType.getElementType()));
case MAP:
MapType mapType = (MapType) type;
return TypeInfoFactory.getMapTypeInfo(
toMaxCompute(mapType.getKeyType()), toMaxCompute(mapType.getValueType()));
case ROW:
RowType rowType = (RowType) type;
return TypeInfoFactory.getStructTypeInfo(
rowType.getFieldNames(),
rowType.getFieldTypes().stream()
.map(TypeConvertUtils::toMaxCompute)
.collect(Collectors.toList()));
default:
throw new UnsupportedOperationException("Unsupported type: " + type);
}
}