public final static List<IAlgebraicRewriteRule> buildPhysicalRewritesAllLevelsRuleCollection() { List<IAlgebraicRewriteRule> physicalPlanRewrites = new LinkedList<IAlgebraicRewriteRule>(); physicalPlanRewrites.add(new PullSelectOutOfEqJoin()); physicalPlanRewrites.add(new PushFunctionsOntoEqJoinBranches()); physicalPlanRewrites.add(new SetAlgebricksPhysicalOperatorsRule()); physicalPlanRewrites.add(new SetExecutionModeRule()); physicalPlanRewrites.add(new EnforceStructuralPropertiesRule()); physicalPlanRewrites.add(new PushProjectDownRule()); physicalPlanRewrites.add(new CopyLimitDownRule()); return physicalPlanRewrites; }
private static void setPhysicalOperators(ILogicalPlan plan, boolean topLevelOp, IOptimizationContext context) throws AlgebricksException { for (Mutable<ILogicalOperator> root : plan.getRoots()) { computeDefaultPhysicalOp((AbstractLogicalOperator) root.getValue(), topLevelOp, context); } }
private static void getKeys(List<Mutable<ILogicalExpression>> keyExpressions, List<LogicalVariable> keys) { for (Mutable<ILogicalExpression> kExpr : keyExpressions) { keys.add(getKey(kExpr.getValue())); } }
boolean hasIntermediateAgg = generateMergeAggregationExpressions(gby, context); if (hasIntermediateAgg) { ExternalGroupByPOperator externalGby = new ExternalGroupByPOperator( List<LogicalVariable> keys = new ArrayList<LogicalVariable>(); List<LogicalVariable> additionalFilteringKeys = null; payload = getKeysAndLoad(opLoad.getPayloadExpression(), opLoad.getKeyExpressions(), keys); if (opLoad.getAdditionalFilteringExpressions() != null) { additionalFilteringKeys = new ArrayList<LogicalVariable>(); getKeys(opLoad.getAdditionalFilteringExpressions(), additionalFilteringKeys); if (opLoad.getAdditionalNonFilteringExpressions() != null) { additionalNonFilterVariables = new ArrayList<LogicalVariable>(); getKeys(opLoad.getAdditionalNonFilteringExpressions(), additionalNonFilterVariables); payload = getKeysAndLoad(opLoad.getPayloadExpression(), opLoad.getPrimaryKeyExpressions(), keys); if (opLoad.getAdditionalFilteringExpressions() != null) { additionalFilteringKeys = new ArrayList<LogicalVariable>(); getKeys(opLoad.getAdditionalFilteringExpressions(), additionalFilteringKeys); List<LogicalVariable> secondaryKeys = new ArrayList<LogicalVariable>(); List<LogicalVariable> additionalFilteringKeys = null; getKeys(opInsDel.getPrimaryKeyExpressions(), primaryKeys); getKeys(opInsDel.getSecondaryKeyExpressions(), secondaryKeys); if (opInsDel.getAdditionalFilteringExpressions() != null) { additionalFilteringKeys = new ArrayList<LogicalVariable>(); getKeys(opInsDel.getAdditionalFilteringExpressions(), additionalFilteringKeys); LogicalVariable prevAdditionalFilteringKey = null;
public static final List<IAlgebraicRewriteRule> prepareForJobGenRuleCollection() { List<IAlgebraicRewriteRule> prepareForJobGenRewrites = new LinkedList<>(); prepareForJobGenRewrites.add(new InsertProjectBeforeUnionRule()); prepareForJobGenRewrites.add(new SetAlgebricksPhysicalOperatorsRule()); prepareForJobGenRewrites .add(new IsolateHyracksOperatorsRule(HeuristicOptimizer.hyraxOperatorsBelowWhichJobGenIsDisabled)); prepareForJobGenRewrites.add(new FixReplicateOperatorOutputsRule()); prepareForJobGenRewrites.add(new ExtractCommonOperatorsRule()); // Re-infer all types, so that, e.g., the effect of not-is-null is // propagated. prepareForJobGenRewrites.add(new ReinferAllTypesRule()); prepareForJobGenRewrites.add(new PushGroupByIntoSortRule()); prepareForJobGenRewrites.add(new SetExecutionModeRule()); prepareForJobGenRewrites.add(new SweepIllegalNonfunctionalFunctions()); prepareForJobGenRewrites.add(new FixReplicateOperatorOutputsRule()); return prepareForJobGenRewrites; } }
@Override public boolean rewritePre(Mutable<ILogicalOperator> opRef, IOptimizationContext context) throws AlgebricksException { AbstractLogicalOperator op = (AbstractLogicalOperator) opRef.getValue(); // if (context.checkIfInDontApplySet(this, op)) { // return false; // } if (op.getPhysicalOperator() != null) { return false; } computeDefaultPhysicalOp(op, true, context); // context.addToDontApplySet(this, op); return true; }
public static final List<IAlgebraicRewriteRule> buildPhysicalRewritesTopLevelRuleCollection( ICcApplicationContext appCtx) { List<IAlgebraicRewriteRule> physicalRewritesTopLevel = new LinkedList<>(); physicalRewritesTopLevel.add(new PushNestedOrderByUnderPreSortedGroupByRule()); physicalRewritesTopLevel.add(new CopyLimitDownRule()); // CopyLimitDownRule may generates non-topmost limits with numeric_adds functions. // We are going to apply a constant folding rule again for this case. physicalRewritesTopLevel.add(new ConstantFoldingRule(appCtx)); physicalRewritesTopLevel.add(new PushLimitIntoOrderByRule()); physicalRewritesTopLevel.add(new PushLimitIntoPrimarySearchRule()); // remove assigns that could become unused after PushLimitIntoPrimarySearchRule physicalRewritesTopLevel.add(new RemoveUnusedAssignAndAggregateRule()); physicalRewritesTopLevel.add(new IntroduceProjectsRule()); physicalRewritesTopLevel.add(new SetAlgebricksPhysicalOperatorsRule()); physicalRewritesTopLevel.add(new IntroduceRapidFrameFlushProjectAssignRule()); physicalRewritesTopLevel.add(new SetExecutionModeRule()); physicalRewritesTopLevel.add(new IntroduceRandomPartitioningFeedComputationRule()); return physicalRewritesTopLevel; }
public static final List<IAlgebraicRewriteRule> buildPhysicalRewritesAllLevelsRuleCollection() { List<IAlgebraicRewriteRule> physicalRewritesAllLevels = new LinkedList<>(); physicalRewritesAllLevels.add(new PullSelectOutOfEqJoin()); //Turned off the following rule for now not to change OptimizerTest results. physicalRewritesAllLevels.add(new SetupCommitExtensionOpRule()); physicalRewritesAllLevels.add(new SetAlgebricksPhysicalOperatorsRule()); physicalRewritesAllLevels.add(new SetAsterixPhysicalOperatorsRule()); physicalRewritesAllLevels.add(new AddEquivalenceClassForRecordConstructorRule()); physicalRewritesAllLevels.add(new CheckFullParallelSortRule()); physicalRewritesAllLevels .add(new EnforceStructuralPropertiesRule(BuiltinFunctions.RANGE_MAP, BuiltinFunctions.LOCAL_SAMPLING)); physicalRewritesAllLevels.add(new RemoveSortInFeedIngestionRule()); physicalRewritesAllLevels.add(new RemoveUnnecessarySortMergeExchange()); physicalRewritesAllLevels.add(new PushProjectDownRule()); physicalRewritesAllLevels.add(new IntroduceMaterializationForInsertWithSelfScanRule()); physicalRewritesAllLevels.add(new InlineSingleReferenceVariablesRule()); physicalRewritesAllLevels.add(new RemoveUnusedAssignAndAggregateRule()); physicalRewritesAllLevels.add(new ConsolidateAssignsRule()); // After adding projects, we may need need to set physical operators again. physicalRewritesAllLevels.add(new SetAlgebricksPhysicalOperatorsRule()); return physicalRewritesAllLevels; }