in wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plan/wayangplan/ExecutionOperator.java [140:172]
default boolean isFiltered(OptimizationContext.OperatorContext operatorContext) {
assert operatorContext.getOperator() == this;
// By default, we look for configuration keys formed like this:
// <my.operator.limit.key>.<input/output name>
// If such a key exists, we compare it to values in the operatorContext.
String limitBaseKey = this.getLimitBaseKey();
if (limitBaseKey != null) {
Configuration configuration = operatorContext.getOptimizationContext().getConfiguration();
// Check the inputs.
for (InputSlot<?> input : this.getAllInputs()) {
String key = limitBaseKey + "." + input.getName();
long limit = configuration.getLongProperty(key, -1);
if (limit >= 0) {
CardinalityEstimate cardinality = operatorContext.getInputCardinality(input.getIndex());
if (cardinality != null && cardinality.getGeometricMeanEstimate() > limit) return true;
}
}
// Check the outputs.
for (OutputSlot<?> output : this.getAllOutputs()) {
String key = limitBaseKey + "." + output.getName();
long limit = configuration.getLongProperty(key, -1);
if (limit >= 0) {
CardinalityEstimate cardinality = operatorContext.getOutputCardinality(output.getIndex());
if (cardinality != null && cardinality.getGeometricMeanEstimate() > limit) return true;
}
}
}
return false;
}