Skip to content

Allow user defined ExecutionPlans to benefit from pushdown behavior #8096

@alamb

Description

@alamb

Is your feature request related to a problem or challenge?

#8073 adds support for projection pushdown in the physical optimizer.

However, its implementation directly checks for and special cases the built in ExecutionPlan nodes in DataFusion (which other optimizer passes do as well)

For example

        } else if let Some(output_req) = input.downcast_ref::<OutputRequirementExec>() {
            try_swapping_with_output_req(projection, output_req)?
        } else if input.is::<CoalescePartitionsExec>() {
            try_swapping_with_coalesce_partitions(projection)?
        } else if let Some(filter) = input.downcast_ref::<FilterExec>() {
            try_swapping_with_filter(projection, filter)?
        } else if let Some(repartition) = input.downcast_ref::<RepartitionExec>() {
            try_swapping_with_repartition(projection, repartition)?
        } else if let Some(sort) = input.downcast_ref::<SortExec>() {
            try_swapping_with_sort(projection, sort)?

Describe the solution you'd like

It would be nice if there was an abstraction somehow where ProjectionPushdown could be used by extension / user defined ExecutionPlan nodes

Describe alternatives you've considered

There is a really nice discussion between @crepererum and @ozankabak here #8073 (comment) that provides insight and various options.

Additional context

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions