@Override public LogicalNode visitGroupBy(CompilationContext context, LogicalPlan plan, LogicalPlan.QueryBlock block, GroupbyNode node, Stack<LogicalNode> stack) throws TajoException { super.visitGroupBy(context, plan, block, node, stack); compileProjectableNode(context, node.getInSchema(), node); return node; }
@Override public LogicalNode visitGroupBy(CompilationContext context, LogicalPlan plan, LogicalPlan.QueryBlock block, GroupbyNode node, Stack<LogicalNode> stack) throws TajoException { super.visitGroupBy(context, plan, block, node, stack); compileProjectableNode(context, node.getInSchema(), node); return node; }
public static boolean checkIfBeEvaluatedAtGroupBy(EvalNode evalNode, GroupbyNode node) { Set<Column> columnRefs = EvalTreeUtil.findUniqueColumns(evalNode); if (columnRefs.size() > 0 && !node.getInSchema().containsAll(columnRefs)) { return false; } if (EvalTreeUtil.findEvalsByType(evalNode, EvalType.WINDOW_FUNCTION).size() > 0) { return false; } return true; }
public static boolean checkIfBeEvaluatedAtGroupBy(EvalNode evalNode, GroupbyNode node) { Set<Column> columnRefs = EvalTreeUtil.findUniqueColumns(evalNode); if (columnRefs.size() > 0 && !node.getInSchema().containsAll(columnRefs)) { return false; } if (EvalTreeUtil.findEvalsByType(evalNode, EvalType.WINDOW_FUNCTION).size() > 0) { return false; } return true; }
public AggregationExec(final TaskAttemptContext context, GroupbyNode plan, PhysicalExec child) throws IOException { super(context, plan.getInSchema(), plan.getOutSchema(), child); final Column [] keyColumns = plan.getGroupingColumns(); groupingKeyNum = keyColumns.length; if (plan.hasAggFunctions()) { aggFunctions = plan.getAggFunctions(); aggFunctionsNum = aggFunctions.size(); } else { aggFunctions = new ArrayList<>(); aggFunctionsNum = 0; } }
sb.append(", in schema:").append(getInSchema().toString());
sb.append(", in schema:").append(getInSchema().toString());
planStr.addDetail("in schema:").appendDetail(getInSchema().toString());
public AggregationExec(final TaskAttemptContext context, GroupbyNode plan, PhysicalExec child) throws IOException { super(context, plan.getInSchema(), plan.getOutSchema(), child); final Column [] keyColumns = plan.getGroupingColumns(); groupingKeyNum = keyColumns.length; if (plan.hasAggFunctions()) { aggFunctions = plan.getAggFunctions(); aggFunctionsNum = aggFunctions.length; } else { aggFunctions = new AggregationFunctionCallEval[0]; aggFunctionsNum = 0; } }
planStr.addDetail("in schema:").appendDetail(getInSchema().toString());
if (groupByNode.getInSchema().containsAll(EvalTreeUtil.findUniqueColumns(copy))) { isEvalAggrFunction = true;
if (groupByNode.getInSchema().containsAll(EvalTreeUtil.findUniqueColumns(copy))) { isEvalAggrFunction = true;
eachGroupbyNode.setAggFunctions(groupbyAggFunctions); eachGroupbyNode.setDistinct(true); eachGroupbyNode.setInSchema(groupbyNode.getInSchema()); otherGroupbyNode.setGroupingColumns(originalGroupingColumns.toArray(new Column[originalGroupingColumns.size()])); otherGroupbyNode.setAggFunctions(otherAggregationFunctionCallEvals); otherGroupbyNode.setInSchema(groupbyNode.getInSchema()); baseDistinctNode.setTargets(groupbyNode.getTargets()); baseDistinctNode.setGroupingColumns(groupbyNode.getGroupingColumns()); baseDistinctNode.setInSchema(groupbyNode.getInSchema()); baseDistinctNode.setChild(groupbyNode.getChild());
private PhysicalExec createSortAggregationDistinctGroupbyExec(TaskAttemptContext ctx, DistinctGroupbyNode distinctGroupbyNode, PhysicalExec subOp, DistinctGroupbyEnforcer enforcer) throws IOException { List<GroupbyNode> groupbyNodes = distinctGroupbyNode.getSubPlans(); SortAggregateExec[] sortAggregateExec = new SortAggregateExec[groupbyNodes.size()]; List<SortSpecArray> sortSpecArrays = enforcer.getSortSpecArraysList(); int index = 0; for (GroupbyNode eachGroupbyNode: groupbyNodes) { SortSpecArray sortSpecArray = sortSpecArrays.get(index); SortSpec[] sortSpecs = new SortSpec[sortSpecArray.getSortSpecsList().size()]; int sortIndex = 0; for (SortSpecProto eachProto: sortSpecArray.getSortSpecsList()) { sortSpecs[sortIndex++] = new SortSpec(eachProto); } SortNode sortNode = LogicalPlan.createNodeWithoutPID(SortNode.class); sortNode.setSortSpecs(sortSpecs); sortNode.setInSchema(subOp.getSchema()); sortNode.setOutSchema(eachGroupbyNode.getInSchema()); ExternalSortExec sortExec = new ExternalSortExec(ctx, sortNode, subOp); sortAggregateExec[index++] = new SortAggregateExec(ctx, eachGroupbyNode, sortExec); } return new DistinctGroupbySortAggregationExec(ctx, distinctGroupbyNode, sortAggregateExec); }
private PhysicalExec createSortAggregationDistinctGroupbyExec(TaskAttemptContext ctx, DistinctGroupbyNode distinctGroupbyNode, PhysicalExec subOp, DistinctGroupbyEnforcer enforcer) throws IOException { List<GroupbyNode> groupbyNodes = distinctGroupbyNode.getSubPlans(); SortAggregateExec[] sortAggregateExec = new SortAggregateExec[groupbyNodes.size()]; List<SortSpecArray> sortSpecArrays = enforcer.getSortSpecArraysList(); int index = 0; for (GroupbyNode eachGroupbyNode: groupbyNodes) { SortSpecArray sortSpecArray = sortSpecArrays.get(index); SortSpec[] sortSpecs = new SortSpec[sortSpecArray.getSortSpecsList().size()]; int sortIndex = 0; for (SortSpecProto eachProto: sortSpecArray.getSortSpecsList()) { sortSpecs[sortIndex++] = new SortSpec(eachProto); } SortNode sortNode = LogicalPlan.createNodeWithoutPID(SortNode.class); sortNode.setSortSpecs(sortSpecs); sortNode.setInSchema(subOp.getSchema()); sortNode.setOutSchema(eachGroupbyNode.getInSchema()); ExternalSortExec sortExec = new ExternalSortExec(ctx, sortNode, subOp); sortAggregateExec[index++] = new SortAggregateExec(ctx, eachGroupbyNode, sortExec); } return new DistinctGroupbySortAggregationExec(ctx, distinctGroupbyNode, sortAggregateExec); }
eachGroupbyNode.setAggFunctions(groupbyAggFunctions); eachGroupbyNode.setDistinct(true); eachGroupbyNode.setInSchema(groupbyNode.getInSchema()); otherGroupbyNode.setGroupingColumns(new Column[]{}); otherGroupbyNode.setAggFunctions(otherAggregationFunctionCallEvals); otherGroupbyNode.setInSchema(groupbyNode.getInSchema()); baseDistinctNode.setTargets(baseGroupByTargets); baseDistinctNode.setGroupingColumns(groupbyNode.getGroupingColumns()); baseDistinctNode.setInSchema(groupbyNode.getInSchema()); baseDistinctNode.setChild(groupbyNode.getChild());
eachGroupbyNode.setAggFunctions(groupbyAggFunctions.toArray(new AggregationFunctionCallEval[]{})); eachGroupbyNode.setDistinct(true); eachGroupbyNode.setInSchema(groupbyNode.getInSchema()); otherGroupbyNode.setGroupingColumns(originalGroupingColumns.toArray(new Column[]{})); otherGroupbyNode.setAggFunctions(otherAggregationFunctionCallEvals.toArray(new AggregationFunctionCallEval[]{})); otherGroupbyNode.setInSchema(groupbyNode.getInSchema()); baseDistinctNode.setTargets(groupbyNode.getTargets()); baseDistinctNode.setGroupingColumns(groupbyNode.getGroupingColumns()); baseDistinctNode.setInSchema(groupbyNode.getInSchema()); baseDistinctNode.setChild(groupbyNode.getChild());
firstStageGroupby.setTargets(firstStageTargets); firstStageGroupby.setChild(groupbyNode.getChild()); firstStageGroupby.setInSchema(groupbyNode.getInSchema());
if (groupbyNode.getTargets().get(i).getEvalTree().getType() == EvalType.FIELD) { FieldEval grpKeyEvalNode = target.getEvalTree(); if (!groupbyNode.getInSchema().contains(grpKeyEvalNode.getColumnRef())) { throwCannotEvaluateException(projectable, grpKeyEvalNode.getName());
if (groupbyNode.getTargets()[i].getEvalTree().getType() == EvalType.FIELD) { FieldEval grpKeyEvalNode = target.getEvalTree(); if (!groupbyNode.getInSchema().contains(grpKeyEvalNode.getColumnRef())) { throwCannotEvaluateException(projectable, grpKeyEvalNode.getName());