private Object deserializeStruct(GenericData.Record datum, Schema fileSchema, StructTypeInfo columnType)
          throws AvroSerdeException {
    // No equivalent Java type for the backing structure, need to recurse and build a list
    List<TypeInfo> innerFieldTypes = columnType.getAllStructFieldTypeInfos();
    List<String> innerFieldNames = columnType.getAllStructFieldNames();
    List<Object> innerObjectRow = new ArrayList<Object>(innerFieldTypes.size());

    return workerBase(innerObjectRow, fileSchema, innerFieldNames, innerFieldTypes, datum);
  }
Deserialize an Avro record, recursing into its component fields and
deserializing them as well.  Fields of the record are matched by name
against fields in the Hive row.

Because Avro has some data types that Hive does not, these are converted
during deserialization to types Hive will work with.

@param columnNames List of columns Hive is expecting from record.
@param columnTypes List of column types matched by index to names
@param writable Instance of GenericAvroWritable to deserialize
@param readerSchema Schema of the writable to deserialize
@return A list of objects suitable for Hive to work with further
@throws AvroSerdeException For any exception during deserialization
serde/src/java/org/apache/hadoop/hive/serde2/avro/AvroDeserializer.java