Search in sources :

Example 1 with SupportsAggregatePushDown

use of org.apache.flink.table.connector.source.abilities.SupportsAggregatePushDown in project flink by apache.

the class PushLocalAggIntoScanRuleBase method canPushDown.

protected boolean canPushDown(RelOptRuleCall call, BatchPhysicalGroupAggregateBase aggregate, BatchPhysicalTableSourceScan tableSourceScan) {
    TableConfig tableConfig = ShortcutUtils.unwrapContext(call.getPlanner()).getTableConfig();
    if (!tableConfig.getConfiguration().getBoolean(OptimizerConfigOptions.TABLE_OPTIMIZER_SOURCE_AGGREGATE_PUSHDOWN_ENABLED)) {
        return false;
    }
    if (aggregate.isFinal() || aggregate.getAggCallList().isEmpty()) {
        return false;
    }
    List<AggregateCall> aggCallList = JavaScalaConversionUtil.toJava(aggregate.getAggCallList());
    for (AggregateCall aggCall : aggCallList) {
        if (aggCall.isDistinct() || aggCall.isApproximate() || aggCall.getArgList().size() > 1 || aggCall.hasFilter() || !aggCall.getCollation().getFieldCollations().isEmpty()) {
            return false;
        }
    }
    TableSourceTable tableSourceTable = tableSourceScan.tableSourceTable();
    // we can not push aggregates twice
    return tableSourceTable != null && tableSourceTable.tableSource() instanceof SupportsAggregatePushDown && Arrays.stream(tableSourceTable.abilitySpecs()).noneMatch(spec -> spec instanceof AggregatePushDownSpec);
}
Also used : AggregateCall(org.apache.calcite.rel.core.AggregateCall) SupportsAggregatePushDown(org.apache.flink.table.connector.source.abilities.SupportsAggregatePushDown) Arrays(java.util.Arrays) RexProgram(org.apache.calcite.rex.RexProgram) AggregatePushDownSpec(org.apache.flink.table.planner.plan.abilities.source.AggregatePushDownSpec) SourceAbilityContext(org.apache.flink.table.planner.plan.abilities.source.SourceAbilityContext) RexNodeExtractor(org.apache.flink.table.planner.plan.utils.RexNodeExtractor) ShortcutUtils(org.apache.flink.table.planner.utils.ShortcutUtils) ArrayUtils(org.apache.commons.lang3.ArrayUtils) FlinkTypeFactory(org.apache.flink.table.planner.calcite.FlinkTypeFactory) RowType(org.apache.flink.table.types.logical.RowType) ArrayList(java.util.ArrayList) OptimizerConfigOptions(org.apache.flink.table.api.config.OptimizerConfigOptions) BatchPhysicalCalc(org.apache.flink.table.planner.plan.nodes.physical.batch.BatchPhysicalCalc) RelOptRuleOperand(org.apache.calcite.plan.RelOptRuleOperand) RexNode(org.apache.calcite.rex.RexNode) DynamicTableSource(org.apache.flink.table.connector.source.DynamicTableSource) TableConfig(org.apache.flink.table.api.TableConfig) ProjectPushDownSpec(org.apache.flink.table.planner.plan.abilities.source.ProjectPushDownSpec) BatchPhysicalTableSourceScan(org.apache.flink.table.planner.plan.nodes.physical.batch.BatchPhysicalTableSourceScan) BatchPhysicalGroupAggregateBase(org.apache.flink.table.planner.plan.nodes.physical.batch.BatchPhysicalGroupAggregateBase) Collectors(java.util.stream.Collectors) SourceAbilitySpec(org.apache.flink.table.planner.plan.abilities.source.SourceAbilitySpec) TableSourceTable(org.apache.flink.table.planner.plan.schema.TableSourceTable) RelOptRuleCall(org.apache.calcite.plan.RelOptRuleCall) RexInputRef(org.apache.calcite.rex.RexInputRef) RelOptRule(org.apache.calcite.plan.RelOptRule) List(java.util.List) BatchPhysicalExchange(org.apache.flink.table.planner.plan.nodes.physical.batch.BatchPhysicalExchange) FlinkStatistic(org.apache.flink.table.planner.plan.stats.FlinkStatistic) JavaScalaConversionUtil(org.apache.flink.table.planner.utils.JavaScalaConversionUtil) AggregateCall(org.apache.calcite.rel.core.AggregateCall) Collections(java.util.Collections) AggregatePushDownSpec(org.apache.flink.table.planner.plan.abilities.source.AggregatePushDownSpec) TableConfig(org.apache.flink.table.api.TableConfig) TableSourceTable(org.apache.flink.table.planner.plan.schema.TableSourceTable) SupportsAggregatePushDown(org.apache.flink.table.connector.source.abilities.SupportsAggregatePushDown)

Aggregations

ArrayList (java.util.ArrayList)1 Arrays (java.util.Arrays)1 Collections (java.util.Collections)1 List (java.util.List)1 Collectors (java.util.stream.Collectors)1 RelOptRule (org.apache.calcite.plan.RelOptRule)1 RelOptRuleCall (org.apache.calcite.plan.RelOptRuleCall)1 RelOptRuleOperand (org.apache.calcite.plan.RelOptRuleOperand)1 AggregateCall (org.apache.calcite.rel.core.AggregateCall)1 RexInputRef (org.apache.calcite.rex.RexInputRef)1 RexNode (org.apache.calcite.rex.RexNode)1 RexProgram (org.apache.calcite.rex.RexProgram)1 ArrayUtils (org.apache.commons.lang3.ArrayUtils)1 TableConfig (org.apache.flink.table.api.TableConfig)1 OptimizerConfigOptions (org.apache.flink.table.api.config.OptimizerConfigOptions)1 DynamicTableSource (org.apache.flink.table.connector.source.DynamicTableSource)1 SupportsAggregatePushDown (org.apache.flink.table.connector.source.abilities.SupportsAggregatePushDown)1 FlinkTypeFactory (org.apache.flink.table.planner.calcite.FlinkTypeFactory)1 AggregatePushDownSpec (org.apache.flink.table.planner.plan.abilities.source.AggregatePushDownSpec)1 ProjectPushDownSpec (org.apache.flink.table.planner.plan.abilities.source.ProjectPushDownSpec)1