public static Schema determineSchemaOrThrowException(Configuration conf, Properties properties)
          throws IOException, AvroSerdeException {
    String schemaString = properties.getProperty(AvroTableProperties.SCHEMA_LITERAL.getPropName());
    if(schemaString != null && !schemaString.equals(SCHEMA_NONE))
      return AvroSerdeUtils.getSchemaFor(schemaString);

    // Try pulling directly from URL
    schemaString = properties.getProperty(AvroTableProperties.SCHEMA_URL.getPropName());
    if (schemaString == null) {
      final String columnNameProperty = properties.getProperty(serdeConstants.LIST_COLUMNS);
      final String columnTypeProperty = properties.getProperty(serdeConstants.LIST_COLUMN_TYPES);
      final String columnCommentProperty = properties.getProperty(AvroSerDe.LIST_COLUMN_COMMENTS);
      if (columnNameProperty == null || columnNameProperty.isEmpty()
        || columnTypeProperty == null || columnTypeProperty.isEmpty() ) {
        throw new AvroSerdeException(EXCEPTION_MESSAGE);
      }
      final String columnNameDelimiter = properties.containsKey(serdeConstants.COLUMN_NAME_DELIMITER) ? properties
          .getProperty(serdeConstants.COLUMN_NAME_DELIMITER) : String.valueOf(SerDeUtils.COMMA);
      // Get column names and types
      List<String> columnNames = Arrays.asList(columnNameProperty.split(columnNameDelimiter));
      List<TypeInfo> columnTypes = TypeInfoUtils.getTypeInfosFromTypeString(columnTypeProperty);

      Schema schema = AvroSerDe.getSchemaFromCols(properties, columnNames, columnTypes, columnCommentProperty);
      properties.setProperty(AvroTableProperties.SCHEMA_LITERAL.getPropName(), schema.toString());
      if (conf != null)
        conf.set(AvroTableProperties.AVRO_SERDE_SCHEMA.getPropName(), schema.toString(false));
      return schema;
    } else if(schemaString.equals(SCHEMA_NONE)) {
      throw new AvroSerdeException(EXCEPTION_MESSAGE);
    }

    try {
      Schema s = getSchemaFromFS(schemaString, conf);
      if (s == null) {
        //in case schema is not a file system
        return AvroSerdeUtils.getSchemaFor(new URL(schemaString));
      }
      return s;
    } catch (IOException ioe) {
      throw new AvroSerdeException("Unable to read schema from given path: " + schemaString, ioe);
    } catch (URISyntaxException urie) {
      throw new AvroSerdeException("Unable to read schema from given path: " + schemaString, urie);
    }
  }
Determine the schema to that's been provided for Avro serde work.
@param properties containing a key pointing to the schema, one way or another
@return schema to use while serdeing the avro file
@throws IOException if error while trying to read the schema from another location
@throws AvroSerdeException if unable to find a schema or pointer to it in the properties
serde/src/java/org/apache/hadoop/hive/serde2/avro/AvroSerdeUtils.java