use of org.apache.flink.optimizer.operators.AbstractJoinDescriptor in project flink by apache.
the class OuterJoinNode method getDataProperties.
private List<OperatorDescriptorDual> getDataProperties() {
OuterJoinOperatorBase<?, ?, ?, ?> operator = getOperator();
OuterJoinType type = operator.getOuterJoinType();
JoinHint joinHint = operator.getJoinHint();
joinHint = joinHint == null ? JoinHint.OPTIMIZER_CHOOSES : joinHint;
List<OperatorDescriptorDual> list;
switch(type) {
case LEFT:
list = createLeftOuterJoinDescriptors(joinHint);
break;
case RIGHT:
list = createRightOuterJoinDescriptors(joinHint);
break;
case FULL:
list = createFullOuterJoinDescriptors(joinHint);
break;
default:
throw new CompilerException("Unknown outer join type: " + type);
}
Partitioner<?> customPartitioner = operator.getCustomPartitioner();
if (customPartitioner != null) {
for (OperatorDescriptorDual desc : list) {
((AbstractJoinDescriptor) desc).setCustomPartitioner(customPartitioner);
}
}
return list;
}
use of org.apache.flink.optimizer.operators.AbstractJoinDescriptor in project flink by apache.
the class JoinNode method getDataProperties.
private List<OperatorDescriptorDual> getDataProperties(InnerJoinOperatorBase<?, ?, ?, ?> joinOperatorBase, JoinHint joinHint, Partitioner<?> customPartitioner) {
// see if an internal hint dictates the strategy to use
Configuration conf = joinOperatorBase.getParameters();
String localStrategy = conf.getString(Optimizer.HINT_LOCAL_STRATEGY, null);
if (localStrategy != null) {
final AbstractJoinDescriptor fixedDriverStrat;
if (Optimizer.HINT_LOCAL_STRATEGY_SORT_BOTH_MERGE.equals(localStrategy) || Optimizer.HINT_LOCAL_STRATEGY_SORT_FIRST_MERGE.equals(localStrategy) || Optimizer.HINT_LOCAL_STRATEGY_SORT_SECOND_MERGE.equals(localStrategy) || Optimizer.HINT_LOCAL_STRATEGY_MERGE.equals(localStrategy)) {
fixedDriverStrat = new SortMergeInnerJoinDescriptor(this.keys1, this.keys2);
} else if (Optimizer.HINT_LOCAL_STRATEGY_HASH_BUILD_FIRST.equals(localStrategy)) {
fixedDriverStrat = new HashJoinBuildFirstProperties(this.keys1, this.keys2);
} else if (Optimizer.HINT_LOCAL_STRATEGY_HASH_BUILD_SECOND.equals(localStrategy)) {
fixedDriverStrat = new HashJoinBuildSecondProperties(this.keys1, this.keys2);
} else {
throw new CompilerException("Invalid local strategy hint for match contract: " + localStrategy);
}
if (customPartitioner != null) {
fixedDriverStrat.setCustomPartitioner(customPartitioner);
}
ArrayList<OperatorDescriptorDual> list = new ArrayList<OperatorDescriptorDual>();
list.add(fixedDriverStrat);
return list;
} else {
ArrayList<OperatorDescriptorDual> list = new ArrayList<OperatorDescriptorDual>();
joinHint = joinHint == null ? JoinHint.OPTIMIZER_CHOOSES : joinHint;
switch(joinHint) {
case BROADCAST_HASH_FIRST:
list.add(new HashJoinBuildFirstProperties(this.keys1, this.keys2, true, false, false));
break;
case BROADCAST_HASH_SECOND:
list.add(new HashJoinBuildSecondProperties(this.keys1, this.keys2, false, true, false));
break;
case REPARTITION_HASH_FIRST:
list.add(new HashJoinBuildFirstProperties(this.keys1, this.keys2, false, false, true));
break;
case REPARTITION_HASH_SECOND:
list.add(new HashJoinBuildSecondProperties(this.keys1, this.keys2, false, false, true));
break;
case REPARTITION_SORT_MERGE:
list.add(new SortMergeInnerJoinDescriptor(this.keys1, this.keys2, false, false, true));
break;
case OPTIMIZER_CHOOSES:
list.add(new SortMergeInnerJoinDescriptor(this.keys1, this.keys2));
list.add(new HashJoinBuildFirstProperties(this.keys1, this.keys2));
list.add(new HashJoinBuildSecondProperties(this.keys1, this.keys2));
break;
default:
throw new CompilerException("Unrecognized join hint: " + joinHint);
}
if (customPartitioner != null) {
for (OperatorDescriptorDual descr : list) {
((AbstractJoinDescriptor) descr).setCustomPartitioner(customPartitioner);
}
}
return list;
}
}
Aggregations