code: public GlobalProperties getGlobalProperties() {
  		if (this.globalProps == null) {
  			this.globalProps = this.source.getGlobalProperties().clone();
  			switch (this.shipStrategy) {
  				case BROADCAST:
  					this.globalProps.clearUniqueFieldCombinations();
  					this.globalProps.setFullyReplicated();
  					break;
  				case PARTITION_HASH:
  					this.globalProps.setHashPartitioned(this.shipKeys);
  					break;
  				case PARTITION_RANGE:
  					this.globalProps.setRangePartitioned(Utils.createOrdering(this.shipKeys, this.shipSortOrder));
  					break;
  				case FORWARD:
  					break;
  				case PARTITION_RANDOM:
  					this.globalProps.reset();
  					break;
  				case PARTITION_LOCAL_HASH:
  					if (getSource().getGlobalProperties().isPartitionedOnFields(this.shipKeys)) {
  						// after a local hash partitioning, we can only state that the data is somehow
  						// partitioned. even if we had a hash partitioning before over 8 partitions,
  						// locally rehashing that onto 16 partitions (each one partition into two) gives you
  						// a different result than directly hashing to 16 partitions. the hash-partitioning
  						// property is only valid, if the assumed built in hash function is directly used.
  						// hence, we can only state that this is some form of partitioning.
  						this.globalProps.setAnyPartitioning(this.shipKeys);
  					} else {
  						this.globalProps.reset();
  					}
  					break;
  				case NONE:
  					throw new CompilerException("Cannot produce GlobalProperties before ship strategy is set.");
  			}
  		}
  		
  		return this.globalProps;
  	}
docs: --------------------------------------------------------------------------------------------