in gobblin-hive-registration/src/main/java/org/apache/hadoop/hive/ql/io/orc/TypeDescriptionToObjectInspectorUtil.java [385:442]
static ObjectInspector createObjectInspector(int columnId,
List<OrcProto.Type> types){
OrcProto.Type type = types.get(columnId);
switch (type.getKind()) {
case FLOAT:
return PrimitiveObjectInspectorFactory.writableFloatObjectInspector;
case DOUBLE:
return PrimitiveObjectInspectorFactory.writableDoubleObjectInspector;
case BOOLEAN:
return PrimitiveObjectInspectorFactory.writableBooleanObjectInspector;
case BYTE:
return PrimitiveObjectInspectorFactory.writableByteObjectInspector;
case SHORT:
return PrimitiveObjectInspectorFactory.writableShortObjectInspector;
case INT:
return PrimitiveObjectInspectorFactory.writableIntObjectInspector;
case LONG:
return PrimitiveObjectInspectorFactory.writableLongObjectInspector;
case BINARY:
return PrimitiveObjectInspectorFactory.writableBinaryObjectInspector;
case STRING:
return PrimitiveObjectInspectorFactory.writableStringObjectInspector;
case CHAR:
if (!type.hasMaximumLength()) {
throw new UnsupportedOperationException(
"Illegal use of char type without length in ORC type definition.");
}
return PrimitiveObjectInspectorFactory.getPrimitiveWritableObjectInspector(
TypeInfoFactory.getCharTypeInfo(type.getMaximumLength()));
case VARCHAR:
if (!type.hasMaximumLength()) {
throw new UnsupportedOperationException(
"Illegal use of varchar type without length in ORC type definition.");
}
return PrimitiveObjectInspectorFactory.getPrimitiveWritableObjectInspector(
TypeInfoFactory.getVarcharTypeInfo(type.getMaximumLength()));
case TIMESTAMP:
return PrimitiveObjectInspectorFactory.writableTimestampObjectInspector;
case DATE:
return PrimitiveObjectInspectorFactory.writableDateObjectInspector;
case DECIMAL:
int precision = type.hasPrecision() ? type.getPrecision() : HiveDecimal.SYSTEM_DEFAULT_PRECISION;
int scale = type.hasScale()? type.getScale() : HiveDecimal.SYSTEM_DEFAULT_SCALE;
return PrimitiveObjectInspectorFactory.getPrimitiveWritableObjectInspector(
TypeInfoFactory.getDecimalTypeInfo(precision, scale));
case STRUCT:
return new OrcStructInspector(columnId, types);
case UNION:
return new OrcUnionObjectInspector(columnId, types);
case MAP:
return new OrcMapObjectInspector(columnId, types);
case LIST:
return new OrcListObjectInspector(columnId, types);
default:
throw new UnsupportedOperationException("Unknown type " +
type.getKind());
}
}