@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–2021 The Apache Software Foundation. All rights reserved.