in catalogs/hive-metastore-common/src/main/java/org/apache/gravitino/hive/converter/HiveDataTypeConverter.java [141:216]
private Type toGravitino(TypeInfo hiveTypeInfo) {
switch (hiveTypeInfo.getCategory()) {
case PRIMITIVE:
switch (hiveTypeInfo.getTypeName()) {
case BOOLEAN_TYPE_NAME:
return Types.BooleanType.get();
case TINYINT_TYPE_NAME:
return Types.ByteType.get();
case SMALLINT_TYPE_NAME:
return Types.ShortType.get();
case INT_TYPE_NAME:
return Types.IntegerType.get();
case BIGINT_TYPE_NAME:
return Types.LongType.get();
case FLOAT_TYPE_NAME:
return Types.FloatType.get();
case DOUBLE_TYPE_NAME:
return Types.DoubleType.get();
case STRING_TYPE_NAME:
return Types.StringType.get();
case DATE_TYPE_NAME:
return Types.DateType.get();
case TIMESTAMP_TYPE_NAME:
return Types.TimestampType.withoutTimeZone();
case BINARY_TYPE_NAME:
return Types.BinaryType.get();
case INTERVAL_YEAR_MONTH_TYPE_NAME:
return Types.IntervalYearType.get();
case INTERVAL_DAY_TIME_TYPE_NAME:
return Types.IntervalDayType.get();
default:
if (hiveTypeInfo instanceof CharTypeInfo) {
return Types.FixedCharType.of(((CharTypeInfo) hiveTypeInfo).getLength());
}
if (hiveTypeInfo instanceof VarcharTypeInfo) {
return Types.VarCharType.of(((VarcharTypeInfo) hiveTypeInfo).getLength());
}
if (hiveTypeInfo instanceof DecimalTypeInfo) {
DecimalTypeInfo decimalTypeInfo = (DecimalTypeInfo) hiveTypeInfo;
return Types.DecimalType.of(decimalTypeInfo.precision(), decimalTypeInfo.scale());
}
return Types.ExternalType.of(hiveTypeInfo.getQualifiedName());
}
case LIST:
return Types.ListType.nullable(
toGravitino(((ListTypeInfo) hiveTypeInfo).getListElementTypeInfo()));
case MAP:
MapTypeInfo mapTypeInfo = (MapTypeInfo) hiveTypeInfo;
return Types.MapType.valueNullable(
toGravitino(mapTypeInfo.getMapKeyTypeInfo()),
toGravitino(mapTypeInfo.getMapValueTypeInfo()));
case STRUCT:
StructTypeInfo structTypeInfo = (StructTypeInfo) hiveTypeInfo;
ArrayList<String> fieldNames = structTypeInfo.getAllStructFieldNames();
ArrayList<TypeInfo> typeInfos = structTypeInfo.getAllStructFieldTypeInfos();
Types.StructType.Field[] fields =
IntStream.range(0, fieldNames.size())
.mapToObj(
i ->
Types.StructType.Field.nullableField(
fieldNames.get(i), toGravitino(typeInfos.get(i))))
.toArray(Types.StructType.Field[]::new);
return Types.StructType.of(fields);
case UNION:
UnionTypeInfo unionTypeInfo = (UnionTypeInfo) hiveTypeInfo;
return Types.UnionType.of(
unionTypeInfo.getAllUnionObjectTypeInfos().stream()
.map(this::toGravitino)
.toArray(Type[]::new));
default:
return Types.ExternalType.of(hiveTypeInfo.getQualifiedName());
}
}