Gentle ping on the vote for FLIP-356: Support Nested fields filter pushdown
<https://www.mail-archive.com/dev@flink.apache.org/msg69289.html>.

Regards
Venkata krishnan


On Tue, Aug 29, 2023 at 9:18 PM Venkatakrishnan Sowrirajan <vsowr...@asu.edu>
wrote:

> Sure, will reference this discussion to resume where we started as part of
> the flip to refactor SupportsProjectionPushDown.
>
> On Tue, Aug 29, 2023, 7:22 PM Jark Wu <imj...@gmail.com> wrote:
>
>> I'm fine with this. `ReferenceExpression` and `SupportsProjectionPushDown`
>> can be another FLIP. However, could you summarize the design of this part
>> in the future part of the FLIP? This can be easier to get started with in
>> the future.
>>
>>
>> Best,
>> Jark
>>
>>
>> On Wed, 30 Aug 2023 at 02:45, Venkatakrishnan Sowrirajan <
>> vsowr...@asu.edu>
>> wrote:
>>
>> > Thanks Jark. Sounds good.
>> >
>> > One more thing, earlier in my summary I mentioned,
>> >
>> > Introduce a new *ReferenceExpression* (or *BaseReferenceExpression*)
>> > > abstract class which will be extended by both
>> *FieldReferenceExpression*
>> > >  and *NestedFieldReferenceExpression* (to be introduced as part of
>> this
>> > > FLIP)
>> >
>> > This can be punted for now and can be handled as part of refactoring
>> > SupportsProjectionPushDown.
>> >
>> > Also I made minor changes to the *NestedFieldReferenceExpression,
>> *instead
>> > of *fieldIndexArray* we can just do away with *fieldNames *array that
>> > includes fieldName at every level for the nested field.
>> >
>> > Updated the FLIP-357
>> > <
>> >
>> https://urldefense.com/v3/__https://cwiki.apache.org/confluence/display/FLINK/FLIP-356*3A*Support*Nested*Fields*Filter*Pushdown__;JSsrKysr!!IKRxdwAv5BmarQ!YAk6kV4CYvUSPfpoUDQRs6VlbmJXVX8KOKqFxKbNDkUWKzShvwpkLRGkAV1tgV3EqClNrjGS-Ij86Q$
>> > >
>> > wiki as well.
>> >
>> > Regards
>> > Venkata krishnan
>> >
>> >
>> > On Tue, Aug 29, 2023 at 5:21 AM Jark Wu <imj...@gmail.com> wrote:
>> >
>> > > Hi Venkata,
>> > >
>> > > Your summary looks good to me. +1 to start a vote.
>> > >
>> > > I think we don't need "inputIndex" in NestedFieldReferenceExpression.
>> > > Actually, I think it is also not needed in FieldReferenceExpression,
>> > > and we should try to remove it (another topic). The RexInputRef in
>> > Calcite
>> > > also doesn't require an inputIndex because the field index should
>> > represent
>> > > index of the field in the underlying row type. Field references
>> shouldn't
>> > > be
>> > >  aware of the number of inputs.
>> > >
>> > > Best,
>> > > Jark
>> > >
>> > >
>> > > On Tue, 29 Aug 2023 at 02:24, Venkatakrishnan Sowrirajan <
>> > vsowr...@asu.edu
>> > > >
>> > > wrote:
>> > >
>> > > > Hi Jinsong,
>> > > >
>> > > > Thanks for your comments.
>> > > >
>> > > > What is inputIndex in NestedFieldReferenceExpression?
>> > > >
>> > > >
>> > > > I haven't looked at it before. Do you mean, given that it is now
>> only
>> > > used
>> > > > to push filters it won't be subsequently used in further
>> > > > planning/optimization and therefore it is not required at this time?
>> > > >
>> > > > So if NestedFieldReferenceExpression doesn't need inputIndex, is
>> there
>> > > > > a need to introduce a base class `ReferenceExpression`?
>> > > >
>> > > > For SupportsFilterPushDown itself, *ReferenceExpression* base class
>> is
>> > > not
>> > > > needed. But there were discussions around cleaning up and
>> standardizing
>> > > the
>> > > > API for Supports*PushDown. SupportsProjectionPushDown currently
>> pushes
>> > > the
>> > > > projects as a 2-d array, instead it would be better to use the
>> standard
>> > > API
>> > > > which seems to be the *ResolvedExpression*. For
>> > > SupportsProjectionPushDown
>> > > > either FieldReferenceExpression (top level fields) or
>> > > > NestedFieldReferenceExpression (nested fields) is enough, in order
>> to
>> > > > provide a single API that handles both top level and nested fields,
>> > > > ReferenceExpression will be introduced as a base class.
>> > > >
>> > > > Eventually, *SupportsProjectionPushDown#applyProjections* would
>> evolve
>> > as
>> > > > applyProjection(List<ReferenceExpression> projectedFields) and
>> nested
>> > > > fields would be pushed only if *supportsNestedProjections* returns
>> > true.
>> > > >
>> > > > Regards
>> > > > Venkata krishnan
>> > > >
>> > > >
>> > > > On Sun, Aug 27, 2023 at 11:12 PM Jingsong Li <
>> jingsongl...@gmail.com>
>> > > > wrote:
>> > > >
>> > > > > So if NestedFieldReferenceExpression doesn't need inputIndex, is
>> > there
>> > > > > a need to introduce a base class `ReferenceExpression`?
>> > > > >
>> > > > > Best,
>> > > > > Jingsong
>> > > > >
>> > > > > On Mon, Aug 28, 2023 at 2:09 PM Jingsong Li <
>> jingsongl...@gmail.com>
>> > > > > wrote:
>> > > > > >
>> > > > > > Hi thanks all for your discussion.
>> > > > > >
>> > > > > > What is inputIndex in NestedFieldReferenceExpression?
>> > > > > >
>> > > > > > I know inputIndex has special usage in FieldReferenceExpression,
>> > but
>> > > > > > it is only for Join operators, and it is only for SQL
>> optimization.
>> > > It
>> > > > > > looks like there is no requirement for Nested.
>> > > > > >
>> > > > > > Best,
>> > > > > > Jingsong
>> > > > > >
>> > > > > > On Mon, Aug 28, 2023 at 1:13 PM Venkatakrishnan Sowrirajan
>> > > > > > <vsowr...@asu.edu> wrote:
>> > > > > > >
>> > > > > > > Thanks for all the feedback and discussion everyone. Looks
>> like
>> > we
>> > > > have
>> > > > > > > reached a consensus here.
>> > > > > > >
>> > > > > > > Just to summarize:
>> > > > > > >
>> > > > > > > 1. Introduce a new *ReferenceExpression* (or
>> > > > *BaseReferenceExpression*)
>> > > > > > > abstract class which will be extended by both
>> > > > > *FieldReferenceExpression*
>> > > > > > > and *NestedFieldReferenceExpression* (to be introduced as
>> part of
>> > > > this
>> > > > > FLIP)
>> > > > > > > 2. No need of *supportsNestedFilters *check as the current
>> > > > > > > *SupportsFilterPushDown* should already ignore unknown
>> > expressions
>> > > (
>> > > > > > > *NestedFieldReferenceExpression* for example) and return them
>> as
>> > > > > > > *remainingFilters.
>> > > > > > > *Maybe this should be clarified explicitly in the Javadoc of
>> > > > > > > *SupportsFilterPushDown.
>> > > > > > > *I will file a separate JIRA to fix the documentation.
>> > > > > > > 3. Refactor *SupportsProjectionPushDown* to use
>> > > *ReferenceExpression
>> > > > > *instead
>> > > > > > > of existing 2-d arrays to consolidate and be consistent with
>> > other
>> > > > > > > Supports*PushDown APIs - *outside the scope of this FLIP*
>> > > > > > > 4. Similarly *SupportsAggregatePushDown* should also be
>> evolved
>> > > > > whenever
>> > > > > > > nested fields support is added to use the
>> *ReferenceExpression -
>> > > > > **outside
>> > > > > > > the scope of this FLIP*
>> > > > > > >
>> > > > > > > Does this sound good? Please let me know if I have missed
>> > anything
>> > > > > here. If
>> > > > > > > there are no concerns, I will start a vote tomorrow. I will
>> also
>> > > get
>> > > > > the
>> > > > > > > FLIP-356 wiki updated. Thanks everyone once again!
>> > > > > > >
>> > > > > > > Regards
>> > > > > > > Venkata krishnan
>> > > > > > >
>> > > > > > >
>> > > > > > > On Thu, Aug 24, 2023 at 8:19 PM Becket Qin <
>> becket....@gmail.com
>> > >
>> > > > > wrote:
>> > > > > > >
>> > > > > > > > Hi Jark,
>> > > > > > > >
>> > > > > > > > How about having a separate NestedFieldReferenceExpression,
>> and
>> > > > > > > > > abstracting a common base class "ReferenceExpression" for
>> > > > > > > > > NestedFieldReferenceExpression and
>> FieldReferenceExpression?
>> > > This
>> > > > > makes
>> > > > > > > > > unifying expressions in
>> > > > > > > > >
>> > > > >
>> > "SupportsProjectionPushdown#applyProjections(List<ReferenceExpression>
>> > > > > > > > > ...)"
>> > > > > > > > > possible.
>> > > > > > > >
>> > > > > > > >
>> > > > > > > > I'd be fine with this. It at least provides a consistent API
>> > > style
>> > > > /
>> > > > > > > > formality.
>> > > > > > > >
>> > > > > > > >  Re: Yunhong,
>> > > > > > > >
>> > > > > > > > 3. Finally, I think we need to look at the costs and
>> benefits
>> > of
>> > > > > unifying
>> > > > > > > > > the SupportsFilterPushDown and SupportsProjectionPushDown
>> (or
>> > > > > others)
>> > > > > > > > from
>> > > > > > > > > the perspective of interface implementers. A stable API
>> can
>> > > > reduce
>> > > > > user
>> > > > > > > > > development and change costs, if the current API can fully
>> > meet
>> > > > the
>> > > > > > > > > functional requirements at the framework level, I personal
>> > > > suggest
>> > > > > > > > reducing
>> > > > > > > > > the impact on connector developers.
>> > > > > > > > >
>> > > > > > > >
>> > > > > > > > I agree that the cost and benefit should be measured. And
>> the
>> > > > > measurement
>> > > > > > > > should be in the long term instead of short term. That is
>> why
>> > we
>> > > > > always
>> > > > > > > > need to align on the ideal end state first.
>> > > > > > > > Meeting functionality requirements is the bare minimum bar
>> for
>> > an
>> > > > > API.
>> > > > > > > > Simplicity, intuitiveness, robustness and evolvability are
>> also
>> > > > > important.
>> > > > > > > > In addition, for projects with many APIs, such as Flink, a
>> > > > > consistent API
>> > > > > > > > style is also critical for the user adoption as well as bug
>> > > > > avoidance. It
>> > > > > > > > is very helpful for the community to agree on some API
>> design
>> > > > > conventions /
>> > > > > > > > principles.
>> > > > > > > > For example, in this particular case, via our discussion,
>> > > hopefully
>> > > > > we sort
>> > > > > > > > of established the following API design conventions /
>> > principles
>> > > > for
>> > > > > all
>> > > > > > > > the Supports*PushDown interfaces.
>> > > > > > > >
>> > > > > > > > 1. By default, expressions should be used if applicable
>> instead
>> > > of
>> > > > > other
>> > > > > > > > representations.
>> > > > > > > > 2. In general, the pushdown method should not assume all the
>> > > > > pushdowns will
>> > > > > > > > succeed. So the applyX() method should return a boolean or
>> > > List<X>,
>> > > > > to
>> > > > > > > > handle the cases that some of the pushdowns cannot be
>> fulfilled
>> > > by
>> > > > > the
>> > > > > > > > implementation.
>> > > > > > > >
>> > > > > > > > Establishing such conventions and principles demands careful
>> > > > > thinking for
>> > > > > > > > the aspects I mentioned earlier in addition to the API
>> > > > > functionalities.
>> > > > > > > > This helps lower the bar of understanding, reduces the
>> chance
>> > of
>> > > > > having
>> > > > > > > > loose ends in the API, and will benefit all the
>> participants in
>> > > the
>> > > > > project
>> > > > > > > > over time. I think this is the right way to achieve real API
>> > > > > stability.
>> > > > > > > > Otherwise, we may end up chasing our tails to find ways not
>> to
>> > > > > change the
>> > > > > > > > existing non-ideal APIs.
>> > > > > > > >
>> > > > > > > > Thanks,
>> > > > > > > >
>> > > > > > > > Jiangjie (Becket) Qin
>> > > > > > > >
>> > > > > > > > On Fri, Aug 25, 2023 at 9:33 AM yh z <
>> zhengyunhon...@gmail.com
>> > >
>> > > > > wrote:
>> > > > > > > >
>> > > > > > > > > Hi, Venkat,
>> > > > > > > > >
>> > > > > > > > > Thanks for the FLIP, it sounds good to support nested
>> fields
>> > > > filter
>> > > > > > > > > pushdown. Based on the design of flip and the above
>> options,
>> > I
>> > > > > would like
>> > > > > > > > > to make a few suggestions:
>> > > > > > > > >
>> > > > > > > > > 1.  At present, introducing NestedFieldReferenceExpression
>> > > looks
>> > > > > like a
>> > > > > > > > > better solution, which can fully meet our requirements
>> while
>> > > > > reducing
>> > > > > > > > > modifications to base class FieldReferenceExpression. In
>> the
>> > > long
>> > > > > run, I
>> > > > > > > > > tend to abstract a basic class for
>> > > NestedFieldReferenceExpression
>> > > > > and
>> > > > > > > > > FieldReferenceExpression as u suggested.
>> > > > > > > > >
>> > > > > > > > > 2. Personally, I don't recommend introducing
>> > > > > *supportsNestedFilters() in
>> > > > > > > > > supportsFilterPushdown. We just need to better declare the
>> > > return
>> > > > > value
>> > > > > > > > of
>> > > > > > > > > the method *applyFilters.
>> > > > > > > > >
>> > > > > > > > > 3. Finally, I think we need to look at the costs and
>> benefits
>> > > of
>> > > > > unifying
>> > > > > > > > > the SupportsFilterPushDown and SupportsProjectionPushDown
>> (or
>> > > > > others)
>> > > > > > > > from
>> > > > > > > > > the perspective of interface implementers. A stable API
>> can
>> > > > reduce
>> > > > > user
>> > > > > > > > > development and change costs, if the current API can fully
>> > meet
>> > > > the
>> > > > > > > > > functional requirements at the framework level, I personal
>> > > > suggest
>> > > > > > > > reducing
>> > > > > > > > > the impact on connector developers.
>> > > > > > > > >
>> > > > > > > > > Regards,
>> > > > > > > > > Yunhong Zheng (Swuferhong)
>> > > > > > > > >
>> > > > > > > > >
>> > > > > > > > > Venkatakrishnan Sowrirajan <vsowr...@asu.edu>
>> 于2023年8月25日周五
>> > > > > 01:25写道:
>> > > > > > > > >
>> > > > > > > > > > To keep it backwards compatible, introduce another API
>> > > > > *applyAggregates
>> > > > > > > > > > *with
>> > > > > > > > > > *List<ReferenceExpression> *when nested field support is
>> > > added
>> > > > > and
>> > > > > > > > > > deprecate the current API. This will by default throw an
>> > > > > exception. In
>> > > > > > > > > > flink planner, *applyAggregates *with nested fields and
>> if
>> > it
>> > > > > throws
>> > > > > > > > > > exception then *applyAggregates* without nested fields.
>> > > > > > > > > >
>> > > > > > > > > > Regards
>> > > > > > > > > > Venkata krishnan
>> > > > > > > > > >
>> > > > > > > > > >
>> > > > > > > > > > On Thu, Aug 24, 2023 at 10:13 AM Venkatakrishnan
>> > Sowrirajan <
>> > > > > > > > > > vsowr...@asu.edu> wrote:
>> > > > > > > > > >
>> > > > > > > > > > > Jark,
>> > > > > > > > > > >
>> > > > > > > > > > > How about having a separate
>> > NestedFieldReferenceExpression,
>> > > > and
>> > > > > > > > > > >> abstracting a common base class "ReferenceExpression"
>> > for
>> > > > > > > > > > >> NestedFieldReferenceExpression and
>> > > FieldReferenceExpression?
>> > > > > This
>> > > > > > > > > makes
>> > > > > > > > > > >> unifying expressions in
>> > > > > > > > > > >>
>> > > > > > > >
>> > > > >
>> > "SupportsProjectionPushdown#applyProjections(List<ReferenceExpression>
>> > > > > > > > > > >> ...)"
>> > > > > > > > > > >> possible.
>> > > > > > > > > > >
>> > > > > > > > > > > This should be fine for *SupportsProjectionPushDown*
>> and
>> > > > > > > > > > > *SupportsFilterPushDown*. One concern in the case of
>> > > > > > > > > > > *SupportsAggregatePushDown* with nested fields support
>> > (to
>> > > be
>> > > > > added
>> > > > > > > > in
>> > > > > > > > > > > the future), with this proposal, the API will become
>> > > > backwards
>> > > > > > > > > > incompatible
>> > > > > > > > > > > as the *args *for the aggregate function is
>> > > > > > > > > > *List<FieldReferenceExpression>
>> > > > > > > > > > > *that needs to change to *List<ReferenceExpression>*.
>> > > > > > > > > > >
>> > > > > > > > > > > Regards
>> > > > > > > > > > > Venkata krishnan
>> > > > > > > > > > >
>> > > > > > > > > > >
>> > > > > > > > > > > On Thu, Aug 24, 2023 at 1:18 AM Jark Wu <
>> > imj...@gmail.com>
>> > > > > wrote:
>> > > > > > > > > > >
>> > > > > > > > > > >> Hi Becket,
>> > > > > > > > > > >>
>> > > > > > > > > > >> I think it is the second case, that a
>> > > > > FieldReferenceExpression is
>> > > > > > > > > > >> constructed
>> > > > > > > > > > >> by the framework and passed to the connector
>> (interfaces
>> > > > > listed by
>> > > > > > > > > > >> Venkata[1]
>> > > > > > > > > > >> and Catalog#listPartitionsByFilter). Besides,
>> > > understanding
>> > > > > the
>> > > > > > > > nested
>> > > > > > > > > > >> field
>> > > > > > > > > > >> is optional for users/connectors (just treat it as an
>> > > > unknown
>> > > > > > > > > expression
>> > > > > > > > > > >> if
>> > > > > > > > > > >> the
>> > > > > > > > > > >> connector doesn't want to support it).
>> > > > > > > > > > >>
>> > > > > > > > > > >> If we extend FieldReferenceExpression, in the case of
>> > > "where
>> > > > > > > > > col.nested
>> > > > > > > > > > >
>> > > > > > > > > > >> 10",
>> > > > > > > > > > >> for the connectors already supported filter/delete
>> > > pushdown,
>> > > > > they
>> > > > > > > > may
>> > > > > > > > > > >> wrongly
>> > > > > > > > > > >> pushdown "col > 10" instead of "nested > 10" because
>> > they
>> > > > > still
>> > > > > > > > treat
>> > > > > > > > > > >> FieldReferenceExpression as a top-level column. This
>> > > problem
>> > > > > can be
>> > > > > > > > > > >> resolved
>> > > > > > > > > > >> by introducing an additional
>> "supportedNestedPushdown"
>> > for
>> > > > > each
>> > > > > > > > > > interface,
>> > > > > > > > > > >> but that method is not elegant and is hard to remove
>> in
>> > > the
>> > > > > future,
>> > > > > > > > > and
>> > > > > > > > > > >> this could
>> > > > > > > > > > >> be avoided if we have a separate
>> > > > > NestedFieldReferenceExpression.
>> > > > > > > > > > >>
>> > > > > > > > > > >> If we want to extend FieldReferenceExpression, we
>> have
>> > to
>> > > > add
>> > > > > > > > > > protections
>> > > > > > > > > > >> for every related API in one shot. Besides,
>> > > > > FieldReferenceExpression
>> > > > > > > > > is
>> > > > > > > > > > a
>> > > > > > > > > > >> fundamental class in the planner, we have to go
>> through
>> > > all
>> > > > > the code
>> > > > > > > > > > that
>> > > > > > > > > > >> is using it to make sure it properly handling it if
>> it
>> > is
>> > > a
>> > > > > nested
>> > > > > > > > > field
>> > > > > > > > > > >> which
>> > > > > > > > > > >> is a big effort for the community.
>> > > > > > > > > > >>
>> > > > > > > > > > >> If we were designing this API on day 1, I fully
>> support
>> > > > > merging them
>> > > > > > > > > in
>> > > > > > > > > > a
>> > > > > > > > > > >> FieldReferenceExpression. But in this case, I'm
>> thinking
>> > > > > about how
>> > > > > > > > to
>> > > > > > > > > > >> provide
>> > > > > > > > > > >> users with a smooth migration path, and allow the
>> > > community
>> > > > to
>> > > > > > > > > gradually
>> > > > > > > > > > >> put efforts into evolving the API, and not block the
>> > > "Nested
>> > > > > Fields
>> > > > > > > > > > Filter
>> > > > > > > > > > >> Pushdown"
>> > > > > > > > > > >> requirement.
>> > > > > > > > > > >>
>> > > > > > > > > > >> How about having a separate
>> > > NestedFieldReferenceExpression,
>> > > > > and
>> > > > > > > > > > >> abstracting a common base class "ReferenceExpression"
>> > for
>> > > > > > > > > > >> NestedFieldReferenceExpression and
>> > > FieldReferenceExpression?
>> > > > > This
>> > > > > > > > > makes
>> > > > > > > > > > >> unifying expressions in
>> > > > > > > > > > >>
>> > > > > > > >
>> > > > >
>> > "SupportsProjectionPushdown#applyProjections(List<ReferenceExpression>
>> > > > > > > > > > >> ...)"
>> > > > > > > > > > >> possible.
>> > > > > > > > > > >>
>> > > > > > > > > > >> Best,
>> > > > > > > > > > >> Jark
>> > > > > > > > > > >>
>> > > > > > > > > > >> On Thu, 24 Aug 2023 at 07:00, Venkatakrishnan
>> > Sowrirajan <
>> > > > > > > > > > >> vsowr...@asu.edu>
>> > > > > > > > > > >> wrote:
>> > > > > > > > > > >>
>> > > > > > > > > > >> > Becket and Jark,
>> > > > > > > > > > >> >
>> > > > > > > > > > >> >  Deprecate all the other
>> > > > > > > > > > >> > > methods except tryApplyFilters() and
>> > > > > tryApplyProjections().
>> > > > > > > > > > >> >
>> > > > > > > > > > >> > For *SupportsProjectionPushDown*, we still need a
>> > > > > > > > > > >> > *supportsNestedProjections* API on the table
>> source as
>> > > > some
>> > > > > of the
>> > > > > > > > > > table
>> > > > > > > > > > >> > sources might not be able to handle nested fields
>> and
>> > > > > therefore
>> > > > > > > > the
>> > > > > > > > > > >> Flink
>> > > > > > > > > > >> > planner should not push down the nested
>> projections or
>> > > > else
>> > > > > the
>> > > > > > > > > > >> > *applyProjection
>> > > > > > > > > > >> > *API has to be appropriately changed to return
>> > > > > > > > > > >> > *unconvertibleProjections *similar
>> > > > > > > > > > >> > to *SupportsFilterPushDown*.
>> > > > > > > > > > >> >
>> > > > > > > > > > >> > Or we have to introduce two different
>> > applyProjections()
>> > > > > > > > > > >> > > methods for FieldReferenceExpression /
>> > > > > > > > > > NestedFieldReferenceExpression
>> > > > > > > > > > >> > > respectively.
>> > > > > > > > > > >> >
>> > > > > > > > > > >> > Agree this is not preferred. Given that
>> > > > > *supportNestedProjections
>> > > > > > > > > > >> *cannot
>> > > > > > > > > > >> > be deprecated/removed based on the current API
>> form,
>> > > > > extending
>> > > > > > > > > > >> > *FieldReferenceExpression* to support nested fields
>> > > should
>> > > > > be
>> > > > > > > > okay.
>> > > > > > > > > > >> >
>> > > > > > > > > > >> > Another alternative could be to change
>> > *applyProjections
>> > > > > *to take
>> > > > > > > > > > >> > List<ResolvedExpression> and on the connector side
>> > they
>> > > > > choose to
>> > > > > > > > > > handle
>> > > > > > > > > > >> > *FieldReferenceExpression* and
>> > > > > *NestedFieldReferenceExpression *as
>> > > > > > > > > > >> > applicable and return the remainingProjections. In
>> the
>> > > > case
>> > > > > of
>> > > > > > > > > nested
>> > > > > > > > > > >> field
>> > > > > > > > > > >> > projections not supported, it should return them
>> back
>> > > but
>> > > > > only
>> > > > > > > > > > >> projecting
>> > > > > > > > > > >> > the top level fields. IMO, this is also *not
>> > preferred*.
>> > > > > > > > > > >> >
>> > > > > > > > > > >> > *SupportsAggregatePushDown*
>> > > > > > > > > > >> >
>> > > > > > > > > > >> > *AggregateExpression *currently takes in a list of
>> > > > > > > > > > >> > *FieldReferenceExpression* as args for the
>> aggregate
>> > > > > function, if
>> > > > > > > > in
>> > > > > > > > > > >> future
>> > > > > > > > > > >> > *SupportsAggregatePushDown* adds support for
>> aggregate
>> > > > > pushdown on
>> > > > > > > > > > >> nested
>> > > > > > > > > > >> > fields then the AggregateExpression API also has to
>> > > change
>> > > > > if a
>> > > > > > > > new
>> > > > > > > > > > >> > NestedFieldReferenceExpression is introduced for
>> > nested
>> > > > > fields.
>> > > > > > > > > > >> >
>> > > > > > > > > > >> > If we add a
>> > > > > > > > > > >> > > flag for each new filter,
>> > > > > > > > > > >> > > the interface will be filled with lots of flags
>> > (e.g.,
>> > > > > > > > > > >> supportsBetween,
>> > > > > > > > > > >> > > supportsIN)
>> > > > > > > > > > >> >
>> > > > > > > > > > >> > In an ideal situation, I completely agree with you.
>> > But
>> > > in
>> > > > > the
>> > > > > > > > > current
>> > > > > > > > > > >> > state, *supportsNestedFilters* can act as a bridge
>> to
>> > > > reach
>> > > > > the
>> > > > > > > > > > eventual
>> > > > > > > > > > >> > desired state which is to have a clean and
>> consistent
>> > > set
>> > > > > of APIs
>> > > > > > > > > > >> > throughout all Supports*PushDown.
>> > > > > > > > > > >> >
>> > > > > > > > > > >> > Also shared some thoughts on the end state API
>> > > > > > > > > > >> > <
>> > > > > > > > > > >> >
>> > > > > > > > > > >>
>> > > > > > > > > >
>> > > > > > > > >
>> > > > > > > >
>> > > > >
>> > > >
>> > >
>> >
>> https://urldefense.com/v3/__https://docs.google.com/document/d/1stLRPKOcxlEv8eHblkrOh0Zf5PLM-h76WMhEINHOyPY/edit?usp=sharing__;!!IKRxdwAv5BmarQ!ZZ2nS1PYlXLnEGFcikS3NsYG7tMaV3wU_z7FmvihNwQBmoLZk2WmcpuRWszK0FFmsInh9A6cndkJrQ$
>> > > > > > > > > > >> > >
>> > > > > > > > > > >> > with extension to the *FieldReferenceExpression* to
>> > > > support
>> > > > > nested
>> > > > > > > > > > >> fields.
>> > > > > > > > > > >> > Please take a look.
>> > > > > > > > > > >> >
>> > > > > > > > > > >> > Regards
>> > > > > > > > > > >> > Venkata krishnan
>> > > > > > > > > > >> >
>> > > > > > > > > > >> > On Tue, Aug 22, 2023 at 5:02 PM Becket Qin <
>> > > > > becket....@gmail.com>
>> > > > > > > > > > >> wrote:
>> > > > > > > > > > >> >
>> > > > > > > > > > >> > > Hi Jark,
>> > > > > > > > > > >> > >
>> > > > > > > > > > >> > > Regarding the migration path, it would be useful
>> to
>> > > > > scrutinize
>> > > > > > > > the
>> > > > > > > > > > use
>> > > > > > > > > > >> > case
>> > > > > > > > > > >> > > of FiledReferenceExpression and
>> ResolvedExpressions.
>> > > > > There are
>> > > > > > > > two
>> > > > > > > > > > >> kinds
>> > > > > > > > > > >> > of
>> > > > > > > > > > >> > > use cases:
>> > > > > > > > > > >> > >
>> > > > > > > > > > >> > > 1. A ResolvedExpression is constructed by the
>> user
>> > or
>> > > > > connector
>> > > > > > > > /
>> > > > > > > > > > >> plugin
>> > > > > > > > > > >> > > developers.
>> > > > > > > > > > >> > > 2. A ResolvedExpression is constructed by the
>> > > framework
>> > > > > and
>> > > > > > > > passed
>> > > > > > > > > > to
>> > > > > > > > > > >> > user
>> > > > > > > > > > >> > > or connector / plugin developers.
>> > > > > > > > > > >> > >
>> > > > > > > > > > >> > > For the first case, both of the approaches
>> provide
>> > the
>> > > > > same
>> > > > > > > > > > migration
>> > > > > > > > > > >> > > experience.
>> > > > > > > > > > >> > >
>> > > > > > > > > > >> > > For the second case, generally speaking,
>> introducing
>> > > > > > > > > > >> > > NestedFieldReferenceExpression and extending
>> > > > > > > > > > FieldReferenceExpression
>> > > > > > > > > > >> > would
>> > > > > > > > > > >> > > have the same impact for backwards compatibility.
>> > > > > > > > > > >> SupportsFilterPushDown
>> > > > > > > > > > >> > is
>> > > > > > > > > > >> > > a special case here because understanding the
>> filter
>> > > > > expressions
>> > > > > > > > > is
>> > > > > > > > > > >> > > optional for the source implementation. In other
>> use
>> > > > > cases, if
>> > > > > > > > > > >> > > understanding the reference to a nested field is
>> a
>> > > must
>> > > > > have,
>> > > > > > > > the
>> > > > > > > > > > user
>> > > > > > > > > > >> > code
>> > > > > > > > > > >> > > has to be changed, regardless of which approach
>> we
>> > > take
>> > > > to
>> > > > > > > > support
>> > > > > > > > > > >> nested
>> > > > > > > > > > >> > > fields.
>> > > > > > > > > > >> > >
>> > > > > > > > > > >> > > Therefore, I think we have to check each public
>> API
>> > > > where
>> > > > > the
>> > > > > > > > > nested
>> > > > > > > > > > >> > field
>> > > > > > > > > > >> > > reference is exposed. If we have many public APIs
>> > > where
>> > > > > > > > > > understanding
>> > > > > > > > > > >> > > nested fields is optional for the user  / plugin
>> /
>> > > > > connector
>> > > > > > > > > > >> developers,
>> > > > > > > > > > >> > > having a separate NestedFieldReferenceExpression
>> > would
>> > > > > have a
>> > > > > > > > more
>> > > > > > > > > > >> smooth
>> > > > > > > > > > >> > > migration. Otherwise, there seems to be no
>> > difference
>> > > > > between
>> > > > > > > > the
>> > > > > > > > > > two
>> > > > > > > > > > >> > > approaches.
>> > > > > > > > > > >> > >
>> > > > > > > > > > >> > > Migration path aside, the main reason I prefer
>> > > extending
>> > > > > > > > > > >> > > FieldReferenceExpression over a new
>> > > > > > > > NestedFieldReferenceExpression
>> > > > > > > > > > is
>> > > > > > > > > > >> > > because this makes the SupportsProjectionPushDown
>> > > > > interface
>> > > > > > > > > simpler.
>> > > > > > > > > > >> > > Otherwise, we have to treat it as a special case
>> > that
>> > > > > does not
>> > > > > > > > > match
>> > > > > > > > > > >> the
>> > > > > > > > > > >> > > overall API style. Or we have to introduce two
>> > > different
>> > > > > > > > > > >> > applyProjections()
>> > > > > > > > > > >> > > methods for FieldReferenceExpression /
>> > > > > > > > > > NestedFieldReferenceExpression
>> > > > > > > > > > >> > > respectively. This issue further extends to
>> > > > > implementation in
>> > > > > > > > > > >> addition to
>> > > > > > > > > > >> > > public API. A single FieldReferenceExpression
>> might
>> > > help
>> > > > > > > > simplify
>> > > > > > > > > > the
>> > > > > > > > > > >> > > implementation code a little bit. For example,
>> in a
>> > > > > recursive
>> > > > > > > > > > >> processing
>> > > > > > > > > > >> > of
>> > > > > > > > > > >> > > a row with nested rows, we may not need to switch
>> > > > between
>> > > > > > > > > > >> > > FieldReferenceExpression and
>> > > > > NestedFieldReferenceExpression
>> > > > > > > > > > depending
>> > > > > > > > > > >> on
>> > > > > > > > > > >> > > whether the record being processed is a top level
>> > > record
>> > > > > or
>> > > > > > > > nested
>> > > > > > > > > > >> > record.
>> > > > > > > > > > >> > >
>> > > > > > > > > > >> > > Thanks,
>> > > > > > > > > > >> > >
>> > > > > > > > > > >> > > Jiangjie (Becket) Qin
>> > > > > > > > > > >> > >
>> > > > > > > > > > >> > >
>> > > > > > > > > > >> > > On Tue, Aug 22, 2023 at 11:43 PM Jark Wu <
>> > > > > imj...@gmail.com>
>> > > > > > > > > wrote:
>> > > > > > > > > > >> > >
>> > > > > > > > > > >> > > > Hi Becket,
>> > > > > > > > > > >> > > >
>> > > > > > > > > > >> > > > I totally agree we should try to have a
>> consistent
>> > > API
>> > > > > for a
>> > > > > > > > > final
>> > > > > > > > > > >> > state.
>> > > > > > > > > > >> > > > The only concern I have mentioned is the
>> "smooth"
>> > > > > migration
>> > > > > > > > > path.
>> > > > > > > > > > >> > > > The FiledReferenceExpression is widely used in
>> > many
>> > > > > public
>> > > > > > > > APIs,
>> > > > > > > > > > >> > > > not only in the SupportsFilterPushDown. Yes, we
>> > can
>> > > > > change
>> > > > > > > > every
>> > > > > > > > > > >> > > > methods in 2-steps, but is it good to change
>> API
>> > > back
>> > > > > and
>> > > > > > > > forth
>> > > > > > > > > > for
>> > > > > > > > > > >> > this?
>> > > > > > > > > > >> > > > Personally, I'm fine with a separate
>> > > > > > > > > > NestedFieldReferenceExpression
>> > > > > > > > > > >> > > class.
>> > > > > > > > > > >> > > > TBH, I prefer the separated way because it
>> makes
>> > the
>> > > > > reference
>> > > > > > > > > > >> > expression
>> > > > > > > > > > >> > > > more clear and concise.
>> > > > > > > > > > >> > > >
>> > > > > > > > > > >> > > > Best,
>> > > > > > > > > > >> > > > Jark
>> > > > > > > > > > >> > > >
>> > > > > > > > > > >> > > >
>> > > > > > > > > > >> > > > On Tue, 22 Aug 2023 at 16:53, Becket Qin <
>> > > > > > > > becket....@gmail.com>
>> > > > > > > > > > >> wrote:
>> > > > > > > > > > >> > > >
>> > > > > > > > > > >> > > > > Thanks for the reply, Jark.
>> > > > > > > > > > >> > > > >
>> > > > > > > > > > >> > > > > I think it will be helpful to understand the
>> > final
>> > > > > state we
>> > > > > > > > > want
>> > > > > > > > > > >> to
>> > > > > > > > > > >> > > > > eventually achieve first, then we can discuss
>> > the
>> > > > > steps
>> > > > > > > > > towards
>> > > > > > > > > > >> that
>> > > > > > > > > > >> > > > final
>> > > > > > > > > > >> > > > > state.
>> > > > > > > > > > >> > > > >
>> > > > > > > > > > >> > > > > It looks like there are two proposed end
>> states
>> > > now:
>> > > > > > > > > > >> > > > >
>> > > > > > > > > > >> > > > > 1. Have a separate
>> > NestedFieldReferenceExpression
>> > > > > class;
>> > > > > > > > keep
>> > > > > > > > > > >> > > > > SupportsFilterPushDown and
>> > > > SupportsProjectionPushDown
>> > > > > the
>> > > > > > > > > same.
>> > > > > > > > > > >> It is
>> > > > > > > > > > >> > > > just
>> > > > > > > > > > >> > > > > a one step change.
>> > > > > > > > > > >> > > > >    - Regarding the
>> > supportsNestedFilterPushDown()
>> > > > > method, if
>> > > > > > > > > our
>> > > > > > > > > > >> > > contract
>> > > > > > > > > > >> > > > > with the connector developer today is "The
>> > > > > implementation
>> > > > > > > > > should
>> > > > > > > > > > >> > ignore
>> > > > > > > > > > >> > > > > unrecognized expressions by putting them into
>> > the
>> > > > > remaining
>> > > > > > > > > > >> filters,
>> > > > > > > > > > >> > > > > instead of throwing exceptions". Then there
>> is
>> > no
>> > > > > need for
>> > > > > > > > > this
>> > > > > > > > > > >> > > method. I
>> > > > > > > > > > >> > > > > am not sure about the current contract. We
>> > should
>> > > > > probably
>> > > > > > > > > make
>> > > > > > > > > > it
>> > > > > > > > > > >> > > clear
>> > > > > > > > > > >> > > > in
>> > > > > > > > > > >> > > > > the interface Java doc.
>> > > > > > > > > > >> > > > >
>> > > > > > > > > > >> > > > > 2. Extend the existing
>> FiledReferenceExpression
>> > > > class
>> > > > > to
>> > > > > > > > > support
>> > > > > > > > > > >> > nested
>> > > > > > > > > > >> > > > > fields; SupportsFilterPushDown only has one
>> > method
>> > > > of
>> > > > > > > > > > >> > > > > applyFilters(List<ResolvedExpression>);
>> > > > > > > > > > SupportsProjectionPushDown
>> > > > > > > > > > >> > only
>> > > > > > > > > > >> > > > has
>> > > > > > > > > > >> > > > > one method of
>> > > > > > > > applyProjections(List<FieldReferenceExpression>,
>> > > > > > > > > > >> > > DataType).
>> > > > > > > > > > >> > > > > It could just be two steps if we are not too
>> > > > obsessed
>> > > > > with
>> > > > > > > > the
>> > > > > > > > > > >> exact
>> > > > > > > > > > >> > > > names
>> > > > > > > > > > >> > > > > of "applyFilters" and "applyProjections".
>> More
>> > > > > specifically,
>> > > > > > > > > it
>> > > > > > > > > > >> takes
>> > > > > > > > > > >> > > two
>> > > > > > > > > > >> > > > > steps to achieve this final state:
>> > > > > > > > > > >> > > > >     a. introduce a new method
>> > > > > > > > > > >> > tryApplyFilters(List<ResolvedExpression>)
>> > > > > > > > > > >> > > > to
>> > > > > > > > > > >> > > > > SupportsFilterPushDown, which may have
>> > > > > > > > > FiledReferenceExpression
>> > > > > > > > > > >> with
>> > > > > > > > > > >> > > > nested
>> > > > > > > > > > >> > > > > fields. The default implementation throws an
>> > > > > exception. The
>> > > > > > > > > > >> runtime
>> > > > > > > > > > >> > > will
>> > > > > > > > > > >> > > > > first call tryApplyFilters() with nested
>> fields.
>> > > In
>> > > > > case of
>> > > > > > > > > > >> > exception,
>> > > > > > > > > > >> > > it
>> > > > > > > > > > >> > > > > calls the existing applyFilters() without
>> > > including
>> > > > > the
>> > > > > > > > nested
>> > > > > > > > > > >> > filters.
>> > > > > > > > > > >> > > > > Similarly, in SupportsProjectionPushDown,
>> > > introduce
>> > > > a
>> > > > > > > > > > >> > > > >
>> tryApplyProjections<List<NestedFieldReference>
>> > > > method
>> > > > > > > > > returning
>> > > > > > > > > > a
>> > > > > > > > > > >> > > Result.
>> > > > > > > > > > >> > > > > The Result also contains the accepted and
>> > > > unapplicable
>> > > > > > > > > > >> projections.
>> > > > > > > > > > >> > The
>> > > > > > > > > > >> > > > > default implementation also throws an
>> exception.
>> > > > > Deprecate
>> > > > > > > > all
>> > > > > > > > > > the
>> > > > > > > > > > >> > > other
>> > > > > > > > > > >> > > > > methods except tryApplyFilters() and
>> > > > > tryApplyProjections().
>> > > > > > > > > > >> > > > >     b. remove the deprecated methods in the
>> next
>> > > > major
>> > > > > > > > version
>> > > > > > > > > > >> bump.
>> > > > > > > > > > >> > > > >
>> > > > > > > > > > >> > > > > Now the question is putting the migration
>> steps
>> > > > > aside, which
>> > > > > > > > > end
>> > > > > > > > > > >> > state
>> > > > > > > > > > >> > > do
>> > > > > > > > > > >> > > > > we prefer? While the first end state is
>> > acceptable
>> > > > > for me,
>> > > > > > > > > > >> > personally,
>> > > > > > > > > > >> > > I
>> > > > > > > > > > >> > > > > prefer the latter if we are designing from
>> > > scratch.
>> > > > > It is
>> > > > > > > > > clean,
>> > > > > > > > > > >> > > > consistent
>> > > > > > > > > > >> > > > > and intuitive. Given the size of Flink,
>> keeping
>> > > APIs
>> > > > > in the
>> > > > > > > > > same
>> > > > > > > > > > >> > style
>> > > > > > > > > > >> > > > over
>> > > > > > > > > > >> > > > > time is important. The migration is also not
>> > that
>> > > > > > > > complicated.
>> > > > > > > > > > >> > > > >
>> > > > > > > > > > >> > > > > Thanks,
>> > > > > > > > > > >> > > > >
>> > > > > > > > > > >> > > > > Jiangjie (Becket) Qin
>> > > > > > > > > > >> > > > >
>> > > > > > > > > > >> > > > >
>> > > > > > > > > > >> > > > > On Tue, Aug 22, 2023 at 2:23 PM Jark Wu <
>> > > > > imj...@gmail.com>
>> > > > > > > > > > wrote:
>> > > > > > > > > > >> > > > >
>> > > > > > > > > > >> > > > > > Hi Venkat,
>> > > > > > > > > > >> > > > > >
>> > > > > > > > > > >> > > > > > Thanks for the proposal.
>> > > > > > > > > > >> > > > > >
>> > > > > > > > > > >> > > > > > I have some minor comments about the FLIP.
>> > > > > > > > > > >> > > > > >
>> > > > > > > > > > >> > > > > > 1. I think we don't need to
>> > > > > > > > > > >> > > > > > add
>> > > SupportsFilterPushDown#supportsNestedFilters()
>> > > > > method,
>> > > > > > > > > > >> > > > > > because connectors can skip nested filters
>> by
>> > > > > putting them
>> > > > > > > > > in
>> > > > > > > > > > >> > > > > > Result#remainingFilters().
>> > > > > > > > > > >> > > > > > And this is backward-compatible because
>> > unknown
>> > > > > > > > expressions
>> > > > > > > > > > were
>> > > > > > > > > > >> > > added
>> > > > > > > > > > >> > > > to
>> > > > > > > > > > >> > > > > > the remaining filters.
>> > > > > > > > > > >> > > > > > Planner should push predicate expressions
>> as
>> > > more
>> > > > as
>> > > > > > > > > possible.
>> > > > > > > > > > >> If
>> > > > > > > > > > >> > we
>> > > > > > > > > > >> > > > add
>> > > > > > > > > > >> > > > > a
>> > > > > > > > > > >> > > > > > flag for each new filter,
>> > > > > > > > > > >> > > > > > the interface will be filled with lots of
>> > flags
>> > > > > (e.g.,
>> > > > > > > > > > >> > > supportsBetween,
>> > > > > > > > > > >> > > > > > supportsIN).
>> > > > > > > > > > >> > > > > >
>> > > > > > > > > > >> > > > > > 2.
>> > > NestedFieldReferenceExpression#nestedFieldName
>> > > > > should
>> > > > > > > > be
>> > > > > > > > > an
>> > > > > > > > > > >> > array
>> > > > > > > > > > >> > > of
>> > > > > > > > > > >> > > > > > field names?
>> > > > > > > > > > >> > > > > > Each string represents a field name part of
>> > the
>> > > > > field
>> > > > > > > > path.
>> > > > > > > > > > Just
>> > > > > > > > > > >> > keep
>> > > > > > > > > > >> > > > > > aligning with `nestedFieldIndexArray`.
>> > > > > > > > > > >> > > > > >
>> > > > > > > > > > >> > > > > > 3. My concern about making
>> > > > FieldReferenceExpression
>> > > > > > > > support
>> > > > > > > > > > >> nested
>> > > > > > > > > > >> > > > fields
>> > > > > > > > > > >> > > > > > is the compatibility.
>> > > > > > > > > > >> > > > > > It is a public API and users/connectors are
>> > > > already
>> > > > > using
>> > > > > > > > > it.
>> > > > > > > > > > >> > People
>> > > > > > > > > > >> > > > > > assumed it is a top-level column
>> > > > > > > > > > >> > > > > > reference, and applied logic on it. But
>> that's
>> > > not
>> > > > > true
>> > > > > > > > now
>> > > > > > > > > > and
>> > > > > > > > > > >> > this
>> > > > > > > > > > >> > > > may
>> > > > > > > > > > >> > > > > > lead to unexpected errors.
>> > > > > > > > > > >> > > > > > Having a separate
>> > NestedFieldReferenceExpression
>> > > > > sounds
>> > > > > > > > > safer
>> > > > > > > > > > to
>> > > > > > > > > > >> > me.
>> > > > > > > > > > >> > > > > Mixing
>> > > > > > > > > > >> > > > > > them in a class may
>> > > > > > > > > > >> > > > > >  confuse users what's the meaning of
>> > > > getFieldName()
>> > > > > and
>> > > > > > > > > > >> > > > getFieldIndex().
>> > > > > > > > > > >> > > > > >
>> > > > > > > > > > >> > > > > >
>> > > > > > > > > > >> > > > > > Regarding using
>> NestedFieldReferenceExpression
>> > > in
>> > > > > > > > > > >> > > > > > SupportsProjectionPushDown, do you
>> > > > > > > > > > >> > > > > > have any concerns @Timo Walther <
>> > > > twal...@apache.org>
>> > > > > ?
>> > > > > > > > > > >> > > > > >
>> > > > > > > > > > >> > > > > > Best,
>> > > > > > > > > > >> > > > > > Jark
>> > > > > > > > > > >> > > > > >
>> > > > > > > > > > >> > > > > >
>> > > > > > > > > > >> > > > > >
>> > > > > > > > > > >> > > > > > On Tue, 22 Aug 2023 at 05:55,
>> Venkatakrishnan
>> > > > > Sowrirajan <
>> > > > > > > > > > >> > > > > vsowr...@asu.edu
>> > > > > > > > > > >> > > > > > >
>> > > > > > > > > > >> > > > > > wrote:
>> > > > > > > > > > >> > > > > >
>> > > > > > > > > > >> > > > > > > Sounds like a great suggestion, Becket.
>> +1.
>> > > > Agree
>> > > > > with
>> > > > > > > > > > >> cleaning
>> > > > > > > > > > >> > up
>> > > > > > > > > > >> > > > the
>> > > > > > > > > > >> > > > > > APIs
>> > > > > > > > > > >> > > > > > > and making it consistent in all the
>> pushdown
>> > > > APIs.
>> > > > > > > > > > >> > > > > > >
>> > > > > > > > > > >> > > > > > > Your suggested approach seems fine to me,
>> > > unless
>> > > > > anyone
>> > > > > > > > > else
>> > > > > > > > > > >> has
>> > > > > > > > > > >> > > any
>> > > > > > > > > > >> > > > > > other
>> > > > > > > > > > >> > > > > > > concerns. Just have couple of clarifying
>> > > > > questions:
>> > > > > > > > > > >> > > > > > >
>> > > > > > > > > > >> > > > > > > 1. Do you think we should standardize the
>> > APIs
>> > > > > across
>> > > > > > > > all
>> > > > > > > > > > the
>> > > > > > > > > > >> > > > pushdown
>> > > > > > > > > > >> > > > > > > supports like SupportsPartitionPushdown,
>> > > > > > > > > > >> SupportsDynamicFiltering
>> > > > > > > > > > >> > > etc
>> > > > > > > > > > >> > > > > in
>> > > > > > > > > > >> > > > > > > the end state?
>> > > > > > > > > > >> > > > > > >
>> > > > > > > > > > >> > > > > > > The current proposal works if we do not
>> want
>> > > to
>> > > > > migrate
>> > > > > > > > > > >> > > > > > > > SupportsFilterPushdown to also use
>> > > > > > > > > > >> > NestedFieldReferenceExpression
>> > > > > > > > > > >> > > > in
>> > > > > > > > > > >> > > > > > the
>> > > > > > > > > > >> > > > > > > > long term.
>> > > > > > > > > > >> > > > > > > >
>> > > > > > > > > > >> > > > > > > Did you mean *FieldReferenceExpression*
>> > > instead
>> > > > of
>> > > > > > > > > > >> > > > > > > *NestedFieldReferenceExpression*?
>> > > > > > > > > > >> > > > > > >
>> > > > > > > > > > >> > > > > > > 2. Extend the FieldReferenceExpression to
>> > > > support
>> > > > > nested
>> > > > > > > > > > >> fields.
>> > > > > > > > > > >> > > > > > > >     - Change the index field type from
>> int
>> > > to
>> > > > > int[].
>> > > > > > > > > > >> > > > > > >
>> > > > > > > > > > >> > > > > > >     - Add a new method int[]
>> > > > getFieldIndexArray().
>> > > > > > > > > > >> > > > > > > >     - Deprecate the int getFieldIndex()
>> > > > method,
>> > > > > the
>> > > > > > > > code
>> > > > > > > > > > >> will
>> > > > > > > > > > >> > be
>> > > > > > > > > > >> > > > > > removed
>> > > > > > > > > > >> > > > > > > in
>> > > > > > > > > > >> > > > > > > > the next major version bump.
>> > > > > > > > > > >> > > > > > >
>> > > > > > > > > > >> > > > > > > I assume getFieldIndex would return
>> > > > > fieldIndexArray[0],
>> > > > > > > > > > right?
>> > > > > > > > > > >> > > > > > >
>> > > > > > > > > > >> > > > > > > Thanks
>> > > > > > > > > > >> > > > > > > Venkat
>> > > > > > > > > > >> > > > > > >
>> > > > > > > > > > >> > > > > > > On Fri, Aug 18, 2023 at 4:47 PM Becket
>> Qin <
>> > > > > > > > > > >> becket....@gmail.com
>> > > > > > > > > > >> > >
>> > > > > > > > > > >> > > > > wrote:
>> > > > > > > > > > >> > > > > > >
>> > > > > > > > > > >> > > > > > > > Thanks for the proposal, Venkata.
>> > > > > > > > > > >> > > > > > > >
>> > > > > > > > > > >> > > > > > > > The current proposal works if we do not
>> > want
>> > > > to
>> > > > > > > > migrate
>> > > > > > > > > > >> > > > > > > > SupportsFilterPushdown to also use
>> > > > > > > > > > >> > NestedFieldReferenceExpression
>> > > > > > > > > > >> > > > in
>> > > > > > > > > > >> > > > > > the
>> > > > > > > > > > >> > > > > > > > long term.
>> > > > > > > > > > >> > > > > > > >
>> > > > > > > > > > >> > > > > > > Did you mean *FieldReferenceExpression*
>> > > instead
>> > > > of
>> > > > > > > > > > >> > > > > > > *NestedFieldReferenceExpression*?
>> > > > > > > > > > >> > > > > > >
>> > > > > > > > > > >> > > > > > > >
>> > > > > > > > > > >> > > > > > > > Otherwise, the alternative solution
>> > briefly
>> > > > > mentioned
>> > > > > > > > in
>> > > > > > > > > > the
>> > > > > > > > > > >> > > > rejected
>> > > > > > > > > > >> > > > > > > > alternatives would be the following:
>> > > > > > > > > > >> > > > > > > > Phase 1:
>> > > > > > > > > > >> > > > > > > > 1. Introduce a supportsNestedFilters()
>> > > method
>> > > > > to the
>> > > > > > > > > > >> > > > > > > SupportsFilterPushdown
>> > > > > > > > > > >> > > > > > > > interface. (same as current proposal).
>> > > > > > > > > > >> > > > > > > > 2. Extend the FieldReferenceExpression
>> to
>> > > > > support
>> > > > > > > > nested
>> > > > > > > > > > >> > fields.
>> > > > > > > > > > >> > > > > > > >     - Change the index field type from
>> int
>> > > to
>> > > > > int[].
>> > > > > > > > > > >> > > > > > >
>> > > > > > > > > > >> > > > > > >     - Add a new method int[]
>> > > > getFieldIndexArray().
>> > > > > > > > > > >> > > > > > > >     - Deprecate the int getFieldIndex()
>> > > > method,
>> > > > > the
>> > > > > > > > code
>> > > > > > > > > > >> will
>> > > > > > > > > > >> > be
>> > > > > > > > > > >> > > > > > removed
>> > > > > > > > > > >> > > > > > > in
>> > > > > > > > > > >> > > > > > > > the next major version bump.
>> > > > > > > > > > >> > > > > > >
>> > > > > > > > > > >> > > > > > >
>> > > > > > > > > > >> > > > > > >
>> > > > > > > > > > >> > > > > > > 3. In the SupportsProjectionPushDown
>> > interface
>> > > > > > > > > > >> > > > > > > >     - add a new method
>> > > > > > > > > > >> > > > >
>> applyProjection(List<FieldReferenceExpression>,
>> > > > > > > > > > >> > > > > > > > DataType), with default implementation
>> > > > invoking
>> > > > > > > > > > >> > > > > > applyProjection(int[][],
>> > > > > > > > > > >> > > > > > > > DataType)
>> > > > > > > > > > >> > > > > > > >     - deprecate the current
>> > > > > applyProjection(int[][],
>> > > > > > > > > > >> DataType)
>> > > > > > > > > > >> > > > method
>> > > > > > > > > > >> > > > > > > >
>> > > > > > > > > > >> > > > > > > > Phase 2 (in the next major version
>> bump)
>> > > > > > > > > > >> > > > > > > > 1. remove the deprecated methods.
>> > > > > > > > > > >> > > > > > > >
>> > > > > > > > > > >> > > > > > > > Phase 3 (optional)
>> > > > > > > > > > >> > > > > > > > 1. deprecate and remove the
>> > > > > supportsNestedFilters() /
>> > > > > > > > > > >> > > > > > > > supportsNestedProjection() methods from
>> > the
>> > > > > > > > > > >> > > SupportsFilterPushDown
>> > > > > > > > > > >> > > > /
>> > > > > > > > > > >> > > > > > > > SupportsProjectionPushDown interfaces.
>> > > > > > > > > > >> > > > > > > >
>> > > > > > > > > > >> > > > > > > > Personally I prefer this alternative.
>> It
>> > > takes
>> > > > > longer
>> > > > > > > > to
>> > > > > > > > > > >> finish
>> > > > > > > > > > >> > > the
>> > > > > > > > > > >> > > > > > work,
>> > > > > > > > > > >> > > > > > > > but the API eventually becomes clean
>> and
>> > > > > consistent.
>> > > > > > > > > But I
>> > > > > > > > > > >> can
>> > > > > > > > > > >> > > live
>> > > > > > > > > > >> > > > > > with
>> > > > > > > > > > >> > > > > > > > the current proposal.
>> > > > > > > > > > >> > > > > > > >
>> > > > > > > > > > >> > > > > > > > Thanks,
>> > > > > > > > > > >> > > > > > > >
>> > > > > > > > > > >> > > > > > > > Jiangjie (Becket) Qin
>> > > > > > > > > > >> > > > > > > >
>> > > > > > > > > > >> > > > > > > > On Sat, Aug 19, 2023 at 12:09 AM
>> > > > Venkatakrishnan
>> > > > > > > > > > Sowrirajan
>> > > > > > > > > > >> <
>> > > > > > > > > > >> > > > > > > > vsowr...@asu.edu> wrote:
>> > > > > > > > > > >> > > > > > > >
>> > > > > > > > > > >> > > > > > > > > Gentle ping for reviews/feedback.
>> > > > > > > > > > >> > > > > > > > >
>> > > > > > > > > > >> > > > > > > > > On Tue, Aug 15, 2023, 5:37 PM
>> > > > Venkatakrishnan
>> > > > > > > > > > Sowrirajan <
>> > > > > > > > > > >> > > > > > > > vsowr...@asu.edu
>> > > > > > > > > > >> > > > > > > > > >
>> > > > > > > > > > >> > > > > > > > > wrote:
>> > > > > > > > > > >> > > > > > > > >
>> > > > > > > > > > >> > > > > > > > > > Hi All,
>> > > > > > > > > > >> > > > > > > > > >
>> > > > > > > > > > >> > > > > > > > > > I am opening this thread to discuss
>> > > > > FLIP-356:
>> > > > > > > > > Support
>> > > > > > > > > > >> > Nested
>> > > > > > > > > > >> > > > > Fields
>> > > > > > > > > > >> > > > > > > > > > Filter Pushdown. The FLIP can be
>> found
>> > > at
>> > > > > > > > > > >> > > > > > > > > >
>> > > > > > > > > > >> > > > > > > > >
>> > > > > > > > > > >> > > > > > > >
>> > > > > > > > > > >> > > > > > >
>> > > > > > > > > > >> > > > > >
>> > > > > > > > > > >> > > > >
>> > > > > > > > > > >> > > >
>> > > > > > > > > > >> > >
>> > > > > > > > > > >> >
>> > > > > > > > > > >>
>> > > > > > > > > >
>> > > > > > > > >
>> > > > > > > >
>> > > > >
>> > > >
>> > >
>> >
>> https://urldefense.com/v3/__https://cwiki.apache.org/confluence/display/FLINK/FLIP-356*3A*Support*Nested*Fields*Filter*Pushdown__;JSsrKysr!!IKRxdwAv5BmarQ!clxXJwshKpn559SAkQiieqgGe0ZduXCzUKCmYLtFIbQLmrmEEgdmuEIM8ZM1M3O_uGqOploU4ailqGpukAg$
>> > > > > > > > > > >> > > > > > > > > >
>> > > > > > > > > > >> > > > > > > > > > This FLIP adds support for pushing
>> > down
>> > > > > nested
>> > > > > > > > > fields
>> > > > > > > > > > >> > filters
>> > > > > > > > > > >> > > > to
>> > > > > > > > > > >> > > > > > the
>> > > > > > > > > > >> > > > > > > > > > underlying TableSource. In our data
>> > > lake,
>> > > > > we find
>> > > > > > > > a
>> > > > > > > > > > lot
>> > > > > > > > > > >> of
>> > > > > > > > > > >> > > > > datasets
>> > > > > > > > > > >> > > > > > > > have
>> > > > > > > > > > >> > > > > > > > > > nested fields and also user queries
>> > with
>> > > > > filters
>> > > > > > > > > > >> defined on
>> > > > > > > > > > >> > > the
>> > > > > > > > > > >> > > > > > > nested
>> > > > > > > > > > >> > > > > > > > > > fields. This would drastically
>> improve
>> > > the
>> > > > > > > > > performance
>> > > > > > > > > > >> for
>> > > > > > > > > > >> > > > those
>> > > > > > > > > > >> > > > > > sets
>> > > > > > > > > > >> > > > > > > > of
>> > > > > > > > > > >> > > > > > > > > > queries.
>> > > > > > > > > > >> > > > > > > > > >
>> > > > > > > > > > >> > > > > > > > > > Appreciate any comments or feedback
>> > you
>> > > > may
>> > > > > have
>> > > > > > > > on
>> > > > > > > > > > this
>> > > > > > > > > > >> > > > > proposal.
>> > > > > > > > > > >> > > > > > > > > >
>> > > > > > > > > > >> > > > > > > > > > Regards
>> > > > > > > > > > >> > > > > > > > > > Venkata krishnan
>> > > > > > > > > > >> > > > > > > > > >
>> > > > > > > > > > >> > > > > > > > >
>> > > > > > > > > > >> > > > > > > >
>> > > > > > > > > > >> > > > > > >
>> > > > > > > > > > >> > > > > >
>> > > > > > > > > > >> > > > >
>> > > > > > > > > > >> > > >
>> > > > > > > > > > >> > >
>> > > > > > > > > > >> >
>> > > > > > > > > > >>
>> > > > > > > > > > >
>> > > > > > > > > >
>> > > > > > > > >
>> > > > > > > >
>> > > > >
>> > > > >
>> > > >
>> > >
>> >
>>
>

Reply via email to