Set<Column> groupingColumnSet = new HashSet<>(); Collections.addAll(groupingColumnSet, eachGroupby.getGroupingColumns()); for (Target eachTarget: eachGroupby.getTargets()) { if (!groupingColumnSet.contains(eachTarget.getNamedColumn())) {
private PlanProto.LogicalNode.Builder buildGroupby(SerializeContext context, GroupbyNode node) throws TajoException { int [] childIds = registerGetChildIds(context, node); PlanProto.GroupbyNode.Builder groupbyBuilder = PlanProto.GroupbyNode.newBuilder(); groupbyBuilder.setChildSeq(childIds[0]); groupbyBuilder.setDistinct(node.isDistinct()); if (node.groupingKeyNum() > 0) { groupbyBuilder.addAllGroupingKeys( ProtoUtil.<CatalogProtos.ColumnProto>toProtoObjects(node.getGroupingColumns())); } if (node.hasAggFunctions()) { groupbyBuilder.addAllAggFunctions( ProtoUtil.<PlanProto.EvalNodeTree>toProtoObjects(node.getAggFunctions().toArray(new ProtoObject[node.getAggFunctions().size()]))); } if (node.hasTargets()) { groupbyBuilder.addAllTargets(ProtoUtil.<PlanProto.Target>toProtoObjects(node.getTargets().toArray(new ProtoObject[node.getTargets().size()]))); } PlanProto.LogicalNode.Builder nodeBuilder = createNodeBuilder(context, node); nodeBuilder.setGroupby(groupbyBuilder); return nodeBuilder; }
Set<Column> groupingColumnSet = new HashSet<Column>(); Collections.addAll(groupingColumnSet, eachGroupby.getGroupingColumns()); for (Target eachTarget: eachGroupby.getTargets()) { if (!groupingColumnSet.contains(eachTarget.getNamedColumn())) {
for (int aggIdx = 0; aggIdx < aggFunctions.size(); aggIdx++) { AggregationFunctionCallEval aggFunction = aggFunctions.get(aggIdx); Target aggFunctionTarget = groupbyNode.getTargets().get(originalGroupingColumns.size() + aggIdx); baseDistinctNode.setTargets(groupbyNode.getTargets()); baseDistinctNode.setGroupingColumns(groupbyNode.getGroupingColumns()); baseDistinctNode.setInSchema(groupbyNode.getInSchema());
Target[] oldTargets = secondStageGroupbyNode.getTargets(); List<Target> secondGroupbyTargets = new ArrayList<Target>(); LinkedHashSet<Column> distinctColumns = EvalTreeUtil.findUniqueColumns(secondStageGroupbyNode.getAggFunctions()[0]); secondStageAggFunction.setLastPhase(); Target secondTarget = secondStageGroupbyNode.getTargets()[secondStageGroupbyNode.getGroupingColumns().length + aggFuncIdx]; Column column = secondTarget.getNamedColumn(); if (column.hasQualifier()) { new Target[lastSecondStageGroupbyNode.getTargets().length + otherGroupbyNode.getTargets().length]; System.arraycopy(lastSecondStageGroupbyNode.getTargets(), 0, targets, 0, lastSecondStageGroupbyNode.getTargets().length); System.arraycopy(otherGroupbyNode.getTargets(), 0, targets, lastSecondStageGroupbyNode.getTargets().length, otherGroupbyNode.getTargets().length); Target[] baseGroupbyTargets = firstStageGroupbyNode.getTargets(); for (int i = firstStageGroupbyNode.getGroupingColumns().length; i < baseGroupbyTargets.length; i++) {
List<Target> oldTargets = secondStageGroupbyNode.getTargets(); List<Target> secondGroupbyTargets = new ArrayList<>(); LinkedHashSet<Column> distinctColumns = EvalTreeUtil.findUniqueColumns(secondStageGroupbyNode.getAggFunctions().get(0)); secondStageAggFunction.setLastPhase(); Target secondTarget = secondStageGroupbyNode.getTargets().get(secondStageGroupbyNode.getGroupingColumns().length + aggFuncIdx); Column column = secondTarget.getNamedColumn(); if (column.hasQualifier()) { targets.addAll(lastSecondStageGroupbyNode.getTargets()); targets.addAll(otherGroupbyNode.getTargets()); List<Target> baseGroupbyTargets = firstStageGroupbyNode.getTargets(); for (int i = firstStageGroupbyNode.getGroupingColumns().length; i < baseGroupbyTargets.size(); i++) {
AggregationFunctionCallEval aggFunction = aggFunctions.get(aggIdx); aggFunction.setFirstPhase(); Target originAggFunctionTarget = groupbyNode.getTargets().get(originalGroupingColumns.size() + aggIdx); Target aggFunctionTarget = new Target(new FieldEval(originAggFunctionTarget.getEvalTree().getName(), aggFunction.getValueType()));
for (int aggIdx = 0; aggIdx < aggFunctions.length; aggIdx++) { AggregationFunctionCallEval aggFunction = aggFunctions[aggIdx]; Target aggFunctionTarget = groupbyNode.getTargets()[originalGroupingColumns.size() + aggIdx]; baseDistinctNode.setTargets(groupbyNode.getTargets()); baseDistinctNode.setGroupingColumns(groupbyNode.getGroupingColumns()); baseDistinctNode.setInSchema(groupbyNode.getInSchema());
final int evalNum = node.getAggFunctions().size(); aggEvalNames = new String[evalNum]; for (int evalIdx = 0, targetIdx = node.getGroupingColumns().length; targetIdx < node.getTargets().size(); evalIdx++, targetIdx++) { Target target = node.getTargets().get(targetIdx); EvalNode evalNode = node.getAggFunctions().get(evalIdx); aggEvalNames[evalIdx] = newContext.addExpr(new Target(evalNode, target.getCanonicalName()));
AggregationFunctionCallEval aggFunction = aggFunctions[aggIdx]; aggFunction.setFirstPhase(); Target originAggFunctionTarget = groupbyNode.getTargets()[originalGroupingColumns.size() + aggIdx]; Target aggFunctionTarget = new Target(new FieldEval(originAggFunctionTarget.getEvalTree().getName(), aggFunction.getValueType()));
final int evalNum = node.getAggFunctions().length; aggEvalNames = new String[evalNum]; for (int evalIdx = 0, targetIdx = node.getGroupingColumns().length; targetIdx < node.getTargets().length; evalIdx++, targetIdx++) { Target target = node.getTargets()[targetIdx]; EvalNode evalNode = node.getAggFunctions()[evalIdx]; aggEvalNames[evalIdx] = newContext.addExpr(new Target(evalNode, target.getCanonicalName()));
secondPhaseGroupby.setGroupingColumns(originalGroupingColumns); secondPhaseGroupby.setAggFunctions(secondPhaseEvalNodes); secondPhaseGroupby.setTargets(groupbyNode.getTargets());
secondPhaseGroupby.setGroupingColumns(originalGroupingColumns); secondPhaseGroupby.setAggFunctions(TUtil.toArray(secondPhaseEvalNodes, AggregationFunctionCallEval.class)); secondPhaseGroupby.setTargets(groupbyNode.getTargets());
Target target = groupbyNode.getTargets().get(i); if (groupbyNode.getTargets().get(i).getEvalTree().getType() == EvalType.FIELD) { FieldEval grpKeyEvalNode = target.getEvalTree(); if (!groupbyNode.getInSchema().contains(grpKeyEvalNode.getColumnRef())) {
for (AggregationFunctionCallEval aggrFunction: lastGroupbyNode.getAggFunctions()) { aggrFunction.setIntermediatePhase(); aggrFunction.setArgs(new EvalNode[]{new FieldEval(lastGroupbyNode.getTargets().get(index).getNamedColumn())}); index++; for (AggregationFunctionCallEval aggrFunction: lastGroupbyNode.getAggFunctions()) { aggrFunction.setFirstPhase(); aggrFunction.setArgs(new EvalNode[]{new FieldEval(lastGroupbyNode.getTargets().get(index).getNamedColumn())}); index++;
private PlanProto.LogicalNode.Builder buildGroupby(SerializeContext context, GroupbyNode node) throws TajoException { int [] childIds = registerGetChildIds(context, node); PlanProto.GroupbyNode.Builder groupbyBuilder = PlanProto.GroupbyNode.newBuilder(); groupbyBuilder.setChildSeq(childIds[0]); groupbyBuilder.setDistinct(node.isDistinct()); if (node.groupingKeyNum() > 0) { groupbyBuilder.addAllGroupingKeys( ProtoUtil.<CatalogProtos.ColumnProto>toProtoObjects(node.getGroupingColumns())); } if (node.hasAggFunctions()) { groupbyBuilder.addAllAggFunctions( ProtoUtil.<PlanProto.EvalNodeTree>toProtoObjects(node.getAggFunctions())); } if (node.hasTargets()) { groupbyBuilder.addAllTargets(ProtoUtil.<PlanProto.Target>toProtoObjects(node.getTargets())); } PlanProto.LogicalNode.Builder nodeBuilder = createNodeBuilder(context, node); nodeBuilder.setGroupby(groupbyBuilder); return nodeBuilder; }
Target target = groupbyNode.getTargets()[i]; if (groupbyNode.getTargets()[i].getEvalTree().getType() == EvalType.FIELD) { FieldEval grpKeyEvalNode = target.getEvalTree(); if (!groupbyNode.getInSchema().contains(grpKeyEvalNode.getColumnRef())) {
for (AggregationFunctionCallEval aggrFunction: lastGroupbyNode.getAggFunctions()) { aggrFunction.setIntermediatePhase(); aggrFunction.setArgs(new EvalNode[]{new FieldEval(lastGroupbyNode.getTargets()[index].getNamedColumn())}); index++; for (AggregationFunctionCallEval aggrFunction: lastGroupbyNode.getAggFunctions()) { aggrFunction.setFirstPhase(); aggrFunction.setArgs(new EvalNode[]{new FieldEval(lastGroupbyNode.getTargets()[index].getNamedColumn())}); index++;