pig/src/main/java/com/twitter/elephantbird/pig/util/ThriftToPig.java
private static FieldSchema singleFieldToFieldSchema(String fieldName, Field field) throws FrontendException {
    //TODO we should probably implement better naming, the current system is pretty nonsensical now
    switch (field.getType()) {
      case TType.STRUCT:
        return new FieldSchema(fieldName, toSchema(field.gettStructDescriptor()), DataType.TUPLE);
      case TType.LIST:
        return new FieldSchema(fieldName, singleFieldToTupleSchema(fieldName + "_tuple", field.getListElemField()), DataType.BAG);
      case TType.SET:
        return new FieldSchema(fieldName, singleFieldToTupleSchema(fieldName + "_tuple", field.getSetElemField()), DataType.BAG);
      case TType.MAP:
        if (field.getMapKeyField().getType() != TType.STRING
            && field.getMapKeyField().getType() != TType.ENUM) {
          LOG.warn("Using a map with non-string key for field " + field.getName()
              + ". while converting to PIG Tuple, toString() is used for the key."
              + " It could result in incorrect maps.");
        }
        return new FieldSchema(fieldName, new Schema(singleFieldToFieldSchema(null, field.getMapValueField())), DataType.MAP);
      default:
        return new FieldSchema(fieldName, null, getPigDataType(field));
    }
  }
private static FieldSchema singleFieldToFieldSchema(String fieldName, Field field) throws FrontendException {
    //TODO we should probably implement better naming, the current system is pretty nonsensical now
    switch (field.getType()) {
      case TType.STRUCT:
        return new FieldSchema(fieldName, toSchema(field.gettStructDescriptor()), DataType.TUPLE);
      case TType.LIST:
        return new FieldSchema(fieldName, singleFieldToTupleSchema(fieldName + "_tuple", field.getListElemField()), DataType.BAG);
      case TType.SET:
        return new FieldSchema(fieldName, singleFieldToTupleSchema(fieldName + "_tuple", field.getSetElemField()), DataType.BAG);
      case TType.MAP:
        if (field.getMapKeyField().getType() != TType.STRING
            && field.getMapKeyField().getType() != TType.ENUM) {
          LOG.warn("Using a map with non-string key for field " + field.getName()
              + ". while converting to PIG Tuple, toString() is used for the key."
              + " It could result in incorrect maps.");
        }
        return new FieldSchema(fieldName, new Schema(singleFieldToFieldSchema(null, field.getMapValueField())), DataType.MAP);
      default:
        return new FieldSchema(fieldName, null, getPigDataType(field));
    }
  }
private static FieldSchema singleFieldToFieldSchema ( String fieldName , Field field ) throws FrontendException { //TODO we should probably implement better naming, the current system is pretty nonsensical now switch ( field . getType ( ) ) { case TType . STRUCT : return new FieldSchema ( fieldName , toSchema ( field . gettStructDescriptor ( ) ) , DataType . TUPLE ) ; case TType . LIST : return new FieldSchema ( fieldName , singleFieldToTupleSchema ( fieldName + "_tuple" , field . getListElemField ( ) ) , DataType . BAG ) ; case TType . SET : return new FieldSchema ( fieldName , singleFieldToTupleSchema ( fieldName + "_tuple" , field . getSetElemField ( ) ) , DataType . BAG ) ; case TType . MAP : if ( field . getMapKeyField ( ) . getType ( ) != TType . STRING && field . getMapKeyField ( ) . getType ( ) != TType . ENUM ) { LOG . warn ( "Using a map with non-string key for field " + field . getName ( ) + ". while converting to PIG Tuple, toString() is used for the key." + " It could result in incorrect maps." ) ; } return new FieldSchema ( fieldName , new Schema ( singleFieldToFieldSchema ( null , field . getMapValueField ( ) ) ) , DataType . MAP ) ; default : return new FieldSchema ( fieldName , null , getPigDataType ( field ) ) ; } }
return {@link FieldSchema} for a given field.
return {