@Override
  public List<FieldSchema> readSchema(Configuration conf, String file) throws SerDeException {
    List<String> fieldNames;
    List<TypeDescription> fieldTypes;
    try (Reader reader = OrcFile.createReader(new Path(file), OrcFile.readerOptions(conf))) {
      fieldNames = reader.getSchema().getFieldNames();
      fieldTypes = reader.getSchema().getChildren();
    } catch (Exception e) {
      throw new SerDeException(ErrorMsg.ORC_FOOTER_ERROR.getErrorCodedMsg(), e);
    }

    List<FieldSchema> schema = new ArrayList<>();
    for (int i = 0; i < fieldNames.size(); i++) {
      FieldSchema fieldSchema = convertOrcTypeToFieldSchema(fieldNames.get(i), fieldTypes.get(i));
      schema.add(fieldSchema);
      LOG.debug("Inferred field schema {}", fieldSchema);
    }
    return schema;
  }
NOTE: if {@link serdeConstants#LIST_COLUMN_TYPES} is missing, all columns will be of String type.
ql/src/java/org/apache/hadoop/hive/ql/io/orc/OrcSerde.java