pub struct FilterPushDown {}
Expand description

Filter Push Down optimizer rule pushes filter clauses down the plan

Introduction

A filter-commutative operation is an operation whose result of filter(op(data)) = op(filter(data)). An example of a filter-commutative operation is a projection; a counter-example is limit.

The filter-commutative property is column-specific. An aggregate grouped by A on SUM(B) can commute with a filter that depends on A only, but does not commute with a filter that depends on SUM(B).

This optimizer commutes filters with filter-commutative operations to push the filters the closest possible to the scans, re-writing the filter expressions by every projection that changes the filter’s expression.

Filter: #b Gt Int64(10) Projection: #a AS b

is optimized to

Projection: #a AS b Filter: #a Gt Int64(10) <— changed from #b to #a

This performs a single pass through the plan. When it passes through a filter, it stores that filter, and when it reaches a node that does not commute with it, it adds the filter to that place. When it passes through a projection, it re-writes the filter’s expression taking into account that projection. When multiple filters would have been written, it AND their expressions into a single expression.

Implementations

Trait Implementations

Returns the “default value” for a type. Read more

A human readable name for this optimizer rule

Rewrite plan to an optimized form

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

Performs the conversion.

Performs the conversion.

Should always be Self

The type returned in the event of a conversion error.

Performs the conversion.

The type returned in the event of a conversion error.

Performs the conversion.