in flink-connector-hive/src/main/java/org/apache/flink/table/planner/delegation/hive/copy/HiveParserTypeConverter.java [109:198]
public static RelDataType convert(PrimitiveTypeInfo type, RelDataTypeFactory dtFactory) {
RelDataType convertedType = null;
HiveShim hiveShim = HiveParserUtils.getSessionHiveShim();
switch (type.getPrimitiveCategory()) {
case VOID:
convertedType = dtFactory.createSqlType(SqlTypeName.NULL);
break;
case BOOLEAN:
convertedType = dtFactory.createSqlType(SqlTypeName.BOOLEAN);
break;
case BYTE:
convertedType = dtFactory.createSqlType(SqlTypeName.TINYINT);
break;
case SHORT:
convertedType = dtFactory.createSqlType(SqlTypeName.SMALLINT);
break;
case INT:
convertedType = dtFactory.createSqlType(SqlTypeName.INTEGER);
break;
case LONG:
convertedType = dtFactory.createSqlType(SqlTypeName.BIGINT);
break;
case FLOAT:
convertedType = dtFactory.createSqlType(SqlTypeName.FLOAT);
break;
case DOUBLE:
convertedType = dtFactory.createSqlType(SqlTypeName.DOUBLE);
break;
case STRING:
convertedType =
dtFactory.createTypeWithCharsetAndCollation(
dtFactory.createSqlType(SqlTypeName.VARCHAR, Integer.MAX_VALUE),
Charset.forName(ConversionUtil.NATIVE_UTF16_CHARSET_NAME),
SqlCollation.IMPLICIT);
break;
case DATE:
convertedType = dtFactory.createSqlType(SqlTypeName.DATE);
break;
case TIMESTAMP:
convertedType = dtFactory.createSqlType(SqlTypeName.TIMESTAMP, 9);
break;
case BINARY:
convertedType = dtFactory.createSqlType(SqlTypeName.VARBINARY);
break;
case DECIMAL:
DecimalTypeInfo dtInf = (DecimalTypeInfo) type;
convertedType =
dtFactory.createSqlType(
SqlTypeName.DECIMAL, dtInf.precision(), dtInf.scale());
break;
case VARCHAR:
convertedType =
dtFactory.createTypeWithCharsetAndCollation(
dtFactory.createSqlType(
SqlTypeName.VARCHAR, ((BaseCharTypeInfo) type).getLength()),
Charset.forName(ConversionUtil.NATIVE_UTF16_CHARSET_NAME),
SqlCollation.IMPLICIT);
break;
case CHAR:
convertedType =
dtFactory.createTypeWithCharsetAndCollation(
dtFactory.createSqlType(
SqlTypeName.CHAR, ((BaseCharTypeInfo) type).getLength()),
Charset.forName(ConversionUtil.NATIVE_UTF16_CHARSET_NAME),
SqlCollation.IMPLICIT);
break;
case UNKNOWN:
convertedType = dtFactory.createSqlType(SqlTypeName.OTHER);
break;
default:
if (hiveShim.isIntervalYearMonthType(type.getPrimitiveCategory())) {
convertedType =
dtFactory.createSqlIntervalType(
new SqlIntervalQualifier(
TimeUnit.YEAR, TimeUnit.MONTH, new SqlParserPos(1, 1)));
} else if (hiveShim.isIntervalDayTimeType(type.getPrimitiveCategory())) {
convertedType =
dtFactory.createSqlIntervalType(
new SqlIntervalQualifier(
TimeUnit.DAY, TimeUnit.SECOND, new SqlParserPos(1, 1)));
}
}
if (null == convertedType) {
throw new RuntimeException("Unsupported Type : " + type.getTypeName());
}
return dtFactory.createTypeWithNullability(convertedType, true);
}