in odps-sdk/odps-sdk-core/src/main/java/com/aliyun/odps/commons/util/ArrowUtils.java [108:175]
private static ArrowType getArrowType(TypeInfo typeInfo) {
ArrowType arrowType = null;
switch (typeInfo.getOdpsType()) {
case JSON:
case CHAR:
case VARCHAR:
case STRING:
arrowType = new ArrowType.Utf8();
break;
case BINARY:
arrowType = new ArrowType.Binary();
break;
case TINYINT:
arrowType = new ArrowType.Int(8, true);
break;
case SMALLINT:
arrowType = new ArrowType.Int(16, true);
break;
case INT:
arrowType = new ArrowType.Int(32, true);
break;
case BIGINT:
arrowType = new ArrowType.Int(64, true);
break;
case BOOLEAN:
arrowType = new ArrowType.Bool();
break;
case FLOAT:
arrowType = new ArrowType.FloatingPoint(FloatingPointPrecision.SINGLE);
break;
case DOUBLE:
arrowType = new ArrowType.FloatingPoint(FloatingPointPrecision.DOUBLE);
break;
case DECIMAL:
arrowType = new ArrowType.Decimal(((DecimalTypeInfo) typeInfo).getPrecision(), ((DecimalTypeInfo) typeInfo).getScale());
break;
case DATE:
arrowType = new ArrowType.Date(DateUnit.DAY);
break;
case DATETIME:
arrowType = new ArrowType.Date(DateUnit.MILLISECOND);
break;
case TIMESTAMP:
case TIMESTAMP_NTZ:
//TODO: 8 bytes => 12 bytes
arrowType = new ArrowType.Timestamp(TimeUnit.NANOSECOND, null);
break;
case ARRAY:
arrowType = new ArrowType.List();
break;
case INTERVAL_DAY_TIME:
arrowType = new ArrowType.Interval(IntervalUnit.DAY_TIME);
break;
case INTERVAL_YEAR_MONTH:
arrowType = new ArrowType.Interval(IntervalUnit.YEAR_MONTH);
break;
case STRUCT:
arrowType = new ArrowType.Struct();
break;
case MAP:
arrowType = new ArrowType.Map(false);
break;
case VOID:
default:
throw new UnsupportedOperationException("Unsupported type: " + typeInfo.getOdpsType());
}
return arrowType;
}