docs: public RequestedGlobalProperties filterBySemanticProperties(SemanticProperties props, int input) {
  		// no semantic properties available. All global properties are filtered.
  		if (props == null) {
  			throw new NullPointerException("SemanticProperties may not be null.");
  		}
  
  		RequestedGlobalProperties rgProp = new RequestedGlobalProperties();
  
  		switch(this.partitioning) {
  			case FULL_REPLICATION:
  			case FORCED_REBALANCED:
  			case CUSTOM_PARTITIONING:
  			case RANDOM_PARTITIONED:
  			case ANY_DISTRIBUTION:
  				// make sure that certain properties are not pushed down
  				return null;
  			case HASH_PARTITIONED:
  			case ANY_PARTITIONING:
  				FieldSet newFields;
  				if(this.partitioningFields instanceof FieldList) {
  					newFields = new FieldList();
  				} else {
  					newFields = new FieldSet();
  				}
  
  				for (Integer targetField : this.partitioningFields) {
  					int sourceField = props.getForwardingSourceField(input, targetField);
  					if (sourceField >= 0) {
  						newFields = newFields.addField(sourceField);
  					} else {
  						// partial partitionings are not preserved to avoid skewed partitioning
  						return null;
  					}
  				}
  				rgProp.partitioning = this.partitioning;
  				rgProp.partitioningFields = newFields;
  				return rgProp;
  			case RANGE_PARTITIONED:
  				// range partitioning
  				Ordering newOrdering = new Ordering();
  				for (int i = 0; i < this.ordering.getInvolvedIndexes().size(); i++) {
  					int value = this.ordering.getInvolvedIndexes().get(i);
  					int sourceField = props.getForwardingSourceField(input, value);
  					if (sourceField >= 0) {
  						newOrdering.appendOrdering(sourceField, this.ordering.getType(i), this.ordering.getOrder(i));
  					} else {
  						return null;
  					}
  				}
  				rgProp.partitioning = this.partitioning;
  				rgProp.ordering = newOrdering;
  				rgProp.dataDistribution = this.dataDistribution;
  				return rgProp;
  			default:
  				throw new RuntimeException("Unknown partitioning type encountered.");
  		}
  	}