public static Global undistributed() { return new Global(false, Optional.of(PartitioningProperties.singlePartition())); }
if (parentGlobal.isPresent() && parentGlobal.get().isDistributed() && parentGlobal.get().getPartitioningProperties().isPresent()) { PreferredProperties.PartitioningProperties parentPartitioningPreference = parentGlobal.get().getPartitioningProperties().get(); boolean nullsAndAnyReplicated = parentPartitioningPreference.isNullsAndAnyReplicated(); Partitioning desiredParentPartitioning = selectUnionPartitioning(node, parentPreference, parentPartitioningPreference); .global(PreferredProperties.Global.distributed(PreferredProperties.PartitioningProperties.partitioned(childPartitioning) .withNullsAndAnyReplicated(nullsAndAnyReplicated))) .build(); if (!parentGlobal.isPresent() || parentGlobal.get().isDistributed()) { return arbitraryDistributeUnion(node, plannedChildren, partitionedChildren, partitionedOutputLayouts);
public PreferredProperties translate(Function<Symbol, Optional<Symbol>> translator) { Optional<Global> newGlobalProperties = globalProperties.map(global -> global.translate(translator)); List<LocalProperty<Symbol>> newLocalProperties = LocalProperties.translate(localProperties, translator); return new PreferredProperties(newGlobalProperties, newLocalProperties); }
@Override public PlanWithProperties visitUnion(UnionNode node, Context context) if (!context.getPreferredProperties().getGlobalProperties().isPresent() || !context.getPreferredProperties().getGlobalProperties().get().isHashPartitioned()) { List<Symbol> hashingColumns = context.getPreferredProperties().getGlobalProperties().get().getPartitioningProperties().get().getHashingOrder().get();
if (global.getPartitioningProperties().isPresent()) { Partitioning partitioning = global.getPartitioningProperties().get();
private static boolean meetsPartitioningRequirements(PreferredProperties preferred, ActualProperties actual) { if (!preferred.getGlobalProperties().isPresent()) { return true; } PreferredProperties.Global preferredGlobal = preferred.getGlobalProperties().get(); if (!preferredGlobal.isDistributed()) { return actual.isSingleNode(); } if (!preferredGlobal.getPartitioningProperties().isPresent()) { return !actual.isSingleNode(); } return actual.isStreamPartitionedOn(preferredGlobal.getPartitioningProperties().get().getPartitioningColumns()); }
public static Global distributed(Partitioning partitioning) { return distributed(Optional.of(partitioning)); }
public static Global distributed(Optional<Partitioning> partitioningProperties) { return new Global(true, partitioningProperties); }
public static Global distributed() { return distributed(Optional.<Partitioning>empty()); }
public static Global undistributed() { return new Global(false, Optional.of(Partitioning.singlePartition())); }
public static PreferredProperties hashPartitioned(List<Symbol> columns) { return builder() .global(Global.distributed(Partitioning.hashPartitioned(columns))) .build(); }
public static PreferredProperties partitioned(Set<Symbol> columns) { return builder() .global(Global.distributed(Partitioning.partitioned(columns))) .build(); }
public static PreferredProperties hashPartitionedWithLocal(List<Symbol> columns, List<? extends LocalProperty<Symbol>> localProperties) { return builder() .global(Global.distributed(Partitioning.hashPartitioned(columns))) .local(localProperties) .build(); }
public static PreferredProperties undistributed() { return builder() .global(Global.undistributed()) .build(); }
public static PreferredProperties undistributedWithLocal(List<? extends LocalProperty<Symbol>> localProperties) { return builder() .global(Global.undistributed()) .local(localProperties) .build(); }
public static PreferredProperties partitionedWithLocal(Set<Symbol> columns, List<? extends LocalProperty<Symbol>> localProperties) { return builder() .global(Global.distributed(Partitioning.partitioned(columns))) .local(localProperties) .build(); }
public static PreferredProperties distributed() { return builder() .global(Global.distributed()) .build(); }
public Global translate(Function<Symbol, Optional<Symbol>> translator) { if (!isDistributed()) { return this; } return distributed(partitioningProperties.flatMap(properties -> properties.translate(translator))); }
public PreferredProperties translate(Function<Symbol, Optional<Symbol>> translator) { Optional<Global> newGlobalProperties = globalProperties.map(global -> global.translate(translator)); List<LocalProperty<Symbol>> newLocalProperties = LocalProperties.translate(localProperties, translator); return new PreferredProperties(newGlobalProperties, newLocalProperties); }
private Partitioning selectUnionPartitioning(UnionNode node, PreferredProperties preferredProperties, PreferredProperties.PartitioningProperties parentPreference) { // Use the parent's requested partitioning if available if (parentPreference.getPartitioning().isPresent()) { return parentPreference.getPartitioning().get(); } // Try planning the children to see if any of them naturally produce a partitioning (for now, just select the first) boolean nullsAndAnyReplicated = parentPreference.isNullsAndAnyReplicated(); for (int sourceIndex = 0; sourceIndex < node.getSources().size(); sourceIndex++) { PreferredProperties.PartitioningProperties childPartitioning = parentPreference.translate(outputToInputTranslator(node, sourceIndex)).get(); PreferredProperties childPreferred = PreferredProperties.builder() .global(PreferredProperties.Global.distributed(childPartitioning.withNullsAndAnyReplicated(nullsAndAnyReplicated))) .build(); PlanWithProperties child = node.getSources().get(sourceIndex).accept(this, childPreferred); if (child.getProperties().isNodePartitionedOn(childPartitioning.getPartitioningColumns(), nullsAndAnyReplicated)) { Function<Symbol, Optional<Symbol>> childToParent = createTranslator(createMapping(node.sourceOutputLayout(sourceIndex), node.getOutputSymbols())); return child.getProperties().translate(childToParent).getNodePartitioning().get(); } } // Otherwise, choose an arbitrary partitioning over the columns return Partitioning.create(FIXED_HASH_DISTRIBUTION, ImmutableList.copyOf(parentPreference.getPartitioningColumns())); }