hive的cast函数源码
时间: 2023-12-08 22:53:04 浏览: 208
Hive的CAST函数源码位于org.apache.hadoop.hive.ql.udf.generic.GenericUDFUtils类中,具体实现如下:
```
public static ObjectConversionHelper getConversionHelperForType(TypeInfo typeInfo, boolean isFrom) throws UDFArgumentException {
switch (typeInfo.getCategory()) {
case PRIMITIVE:
PrimitiveTypeInfo primitiveTypeInfo = (PrimitiveTypeInfo)typeInfo;
switch (primitiveTypeInfo.getPrimitiveCategory()) {
case BOOLEAN:
return new BooleanConversionHelper();
case BYTE:
return new ByteConversionHelper();
case SHORT:
return new ShortConversionHelper();
case INT:
return new IntConversionHelper();
case LONG:
return new LongConversionHelper();
case FLOAT:
return new FloatConversionHelper();
case DOUBLE:
return new DoubleConversionHelper();
case STRING:
return new StringConversionHelper();
case DATE:
return new DateConversionHelper();
case TIMESTAMP:
return new TimestampConversionHelper();
case BINARY:
return new BinaryConversionHelper();
case VOID:
return new VoidConversionHelper();
case INTERVAL_YEAR_MONTH:
return new IntervalYearMonthConversionHelper();
case INTERVAL_DAY_TIME:
return new IntervalDayTimeConversionHelper();
default:
throw new UDFArgumentException("Unable to initialize conversion helper for type: " + typeInfo.getTypeName());
}
case LIST:
case MAP:
case STRUCT:
case UNION:
return new ComplexTypeConversionHelper(typeInfo, isFrom);
case VOID:
return new VoidConversionHelper();
default:
throw new UDFArgumentException("Unable to initialize conversion helper for type: " + typeInfo.getTypeName());
}
}
```
CAST函数会根据传入的参数类型,选择对应的转换器进行类型转换。其中,各种类型的转换器都可以在org.apache.hadoop.hive.serde2.objectinspector.primitive包中找到。