@PublicEvolving
public interface SupportsProjectionPushDown
ScanTableSource.
Given the following SQL:
CREATE TABLE t (i INT, r ROW < d DOUBLE, b BOOLEAN>, s STRING);
SELECT s, r.d FROM t;
In the above example, r.d and s are required fields. Other fields can be skipped
in a projection. Compared to table's schema, fields are reordered.
By default, if this interface is not implemented, a projection is applied in a subsequent operation after the source.
For efficiency, a source can push a projection further down in order to be close to the actual
data generation. A projection is only selecting fields that are used by a query (possibly in a different
field order). It does not contain any computation. A projection can either be performed on the fields of
the top-level row only or consider nested fields as well (see supportsNestedProjection()).
Note: If a source implements SupportsComputedColumnPushDown, the projection must be applied
to the physical data in the first step. The SupportsComputedColumnPushDown (already aware of the projection)
will then use the projected physical data and insert computed columns into the result.
| Modifier and Type | Method and Description |
|---|---|
void |
applyProjection(int[][] projectedFields)
Provides the field index paths that should be used for a projection.
|
boolean |
supportsNestedProjection()
Returns whether this source supports nested projection.
|
boolean supportsNestedProjection()
void applyProjection(int[][] projectedFields)
supportsNestedProjection().
In the example mentioned in SupportsProjectionPushDown, this method would receive:
[[2], [1]] which is equivalent to [["s"], ["r"]] if supportsNestedProjection()
returns false.
[[2], [1, 0]] which is equivalent to [["s"], ["r", "d"]]] if supportsNestedProjection()
returns true.
projectedFields - field index paths of all fields that must be present in the physically
produced dataCopyright © 2014–2020 The Apache Software Foundation. All rights reserved.