@Override
        public RelNode visit(WindowAggregateQueryOperation windowAggregate) {
            List<AggCall> aggregations = windowAggregate.getAggregateExpressions()
                    .stream()
                    .map(this::getAggCall)
                    .collect(toList());

            List<RexNode> groupings = convertToRexNodes(windowAggregate.getGroupingExpressions());
            LogicalWindow logicalWindow = toLogicalWindow(windowAggregate.getGroupWindow());
            PlannerWindowReference windowReference = logicalWindow.aliasAttribute();
            List<FlinkRelBuilder.PlannerNamedWindowProperty> windowProperties = windowAggregate
                    .getWindowPropertiesExpressions()
                    .stream()
                    .map(expr -> convertToWindowProperty(expr.accept(callResolver), windowReference))
                    .collect(toList());
            GroupKey groupKey = relBuilder.groupKey(groupings);
            return relBuilder.windowAggregate(logicalWindow, groupKey, windowProperties, aggregations).build();
        }
Converter from Flink's specific relational representation: {@link QueryOperation} to Calcite's specific relational
representation: {@link RelNode}.
core/src/main/java/org/apache/flink/table/planner/plan/QueryOperationConverter.java