ColumnRowType buildColumnRowType() { OLAPRel olapChild = (OLAPRel) getInput(0); ColumnRowType inputColumnRowType = olapChild.getColumnRowType(); List<TblColRef> columns = new ArrayList<>(); // the input col always be collected by left columns.addAll(inputColumnRowType.getAllColumns()); // add window aggregate calls column for (Group group : groups) { for (AggregateCall aggrCall : group.getAggregateCalls(this)) { TblColRef aggrCallCol = TblColRef.newInnerColumn(aggrCall.getName(), TblColRef.InnerDataTypeEnum.LITERAL); columns.add(aggrCallCol); } } return new ColumnRowType(columns); }
ColumnRowType buildColumnRowType() { OLAPRel olapChild = (OLAPRel) getInput(0); ColumnRowType inputColumnRowType = olapChild.getColumnRowType(); List<TblColRef> columns = new ArrayList<>(); // the input col always be collected by left columns.addAll(inputColumnRowType.getAllColumns()); // add window aggregate calls column for (Group group : groups) { for (AggregateCall aggrCall : group.getAggregateCalls(this)) { TblColRef aggrCallCol = TblColRef.newInnerColumn(aggrCall.getName(), TblColRef.InnerDataTypeEnum.LITERAL); columns.add(aggrCallCol); } } return new ColumnRowType(columns); }
for (AggregateCall aggCall : window.getAggregateCalls(this)) { FieldReference ref = new FieldReference(aggCall.getName()); LogicalExpression expr = toExpr(aggCall, childFields);
List<AggregateCall> aggregateCalls = group.getAggregateCalls(this); for (int aggIdx = 0; aggIdx < aggregateCalls.size(); aggIdx++) { AggregateCall call = aggregateCalls.get(aggIdx);
List<AggregateCall> aggregateCalls = group.getAggregateCalls(this); for (int aggIdx = 0; aggIdx < aggregateCalls.size(); aggIdx++) { AggregateCall call = aggregateCalls.get(aggIdx);
for (AggregateCall aggCall : window.getAggregateCalls(this)) { FieldReference ref = new FieldReference(aggCall.getName()); LogicalExpression expr = toDrill(aggCall, childFields);
@Override public LogicalOperator implement(DrillImplementor implementor) { final LogicalOperator inputOp = implementor.visitChild(this, 0, getInput()); org.apache.drill.common.logical.data.Window.Builder builder = new org.apache.drill.common.logical.data.Window.Builder(); final List<String> fields = getRowType().getFieldNames(); final List<String> childFields = getInput().getRowType().getFieldNames(); for (Group window : groups) { for(RelFieldCollation orderKey : window.orderKeys.getFieldCollations()) { builder.addOrdering(new Order.Ordering(orderKey.getDirection(), new FieldReference(fields.get(orderKey.getFieldIndex())))); } for (int group : BitSets.toIter(window.keys)) { FieldReference fr = new FieldReference(childFields.get(group), ExpressionPosition.UNKNOWN); builder.addWithin(fr, fr); } int groupCardinality = window.keys.cardinality(); for (Ord<AggregateCall> aggCall : Ord.zip(window.getAggregateCalls(this))) { FieldReference ref = new FieldReference(fields.get(groupCardinality + aggCall.i)); LogicalExpression expr = toDrill(aggCall.e, childFields); builder.addAggregation(ref, expr); } } builder.setInput(inputOp); org.apache.drill.common.logical.data.Window frame = builder.build(); return frame; }
@Override public LogicalOperator implement(LogicalPlanImplementor implementor) { final LogicalOperator inputOp = implementor.visitChild(this, 0, getInput()); com.dremio.common.logical.data.Window.Builder builder = new com.dremio.common.logical.data.Window.Builder(); final List<String> fields = getRowType().getFieldNames(); final List<String> childFields = getInput().getRowType().getFieldNames(); for (Group window : groups) { for(RelFieldCollation orderKey : window.orderKeys.getFieldCollations()) { builder.addOrdering(new Order.Ordering(orderKey.getDirection(), new FieldReference(fields.get(orderKey.getFieldIndex())))); } for (int group : BitSets.toIter(window.keys)) { FieldReference fr = new FieldReference(childFields.get(group)); builder.addWithin(fr, fr); } int groupCardinality = window.keys.cardinality(); for (Ord<AggregateCall> aggCall : Ord.zip(window.getAggregateCalls(this))) { FieldReference ref = new FieldReference(fields.get(groupCardinality + aggCall.i)); LogicalExpression expr = toExpr(aggCall.e, childFields); builder.addAggregation(ref, expr); } } builder.setInput(inputOp); com.dremio.common.logical.data.Window frame = builder.build(); return frame; }