in metacat-connector-hive/src/main/java/com/netflix/metacat/connector/hive/converters/HiveTypeConverter.java [141:185]
public static String fromIcebergToHiveType(final org.apache.iceberg.types.Type type) {
switch (type.typeId()) {
case BOOLEAN:
return serdeConstants.BOOLEAN_TYPE_NAME;
case INTEGER:
return serdeConstants.INT_TYPE_NAME;
case LONG:
return serdeConstants.BIGINT_TYPE_NAME;
case FLOAT:
return serdeConstants.FLOAT_TYPE_NAME;
case DOUBLE:
return serdeConstants.DOUBLE_TYPE_NAME;
case DATE:
return serdeConstants.DATE_TYPE_NAME;
case TIME:
throw new UnsupportedOperationException("Hive does not support time fields");
case TIMESTAMP:
return serdeConstants.TIMESTAMP_TYPE_NAME;
case STRING:
case UUID:
return serdeConstants.STRING_TYPE_NAME;
case FIXED:
return serdeConstants.BINARY_TYPE_NAME;
case BINARY:
return serdeConstants.BINARY_TYPE_NAME;
case DECIMAL:
final Types.DecimalType decimalType = (Types.DecimalType) type;
return String.format("decimal(%s,%s)", decimalType.precision(), decimalType.scale());
case STRUCT:
final Types.StructType structType = type.asStructType();
final String nameToType = (String) structType.fields().stream().map((f) -> {
return String.format("%s:%s", f.name(), fromIcebergToHiveType(f.type()));
}).collect(Collectors.joining(","));
return String.format("struct<%s>", nameToType);
case LIST:
final Types.ListType listType = type.asListType();
return String.format("array<%s>", fromIcebergToHiveType(listType.elementType()));
case MAP:
final Types.MapType mapType = type.asMapType();
return String.format("map<%s,%s>", fromIcebergToHiveType(mapType.keyType()),
fromIcebergToHiveType(mapType.valueType()));
default:
throw new UnsupportedOperationException(type + " is not supported");
}
}