Got it, Martijn.

Unfortunately, I don't have edit access to the already created JIRA -
FLINK-20767 <https://issues.apache.org/jira/browse/FLINK-20767>. If you can
remove the task from the EPIC FLINK-16987 FLIP-95: Add new table source and
sink interfaces <https://issues.apache.org/jira/browse/FLINK-16987>, can
you please change it?

If not, I can open a new ticket, close this one and link the 2 tickets as
duplicated by.

Regards
Venkata krishnan


On Thu, Sep 21, 2023 at 12:40 AM Martijn Visser <martijnvis...@apache.org>
wrote:

> Hi Venkatakrishnan,
>
> The reason why I thought it's abandoned because the Jira ticket is
> part of the umbrella ticket for FLIP-95. Let's move the Jira ticket to
> its own dedicated task instead of nested to a FLIP-95 ticket.
>
> Thanks,
>
> Martijn
>
> On Wed, Sep 20, 2023 at 4:34 PM Becket Qin <becket....@gmail.com> wrote:
> >
> > Hi Martijn,
> >
> > This FLIP has passed voting[1]. It is a modification on top of the
> FLIP-95
> > interface.
> >
> > Thanks,
> >
> > Jiangjie (Becket) Qin
> >
> > [1]
> https://urldefense.com/v3/__https://lists.apache.org/thread/hysv9y1f48gtpr5vx3x40wtjb6cp9ky6__;!!IKRxdwAv5BmarQ!f6gg5kDGU-9tqM2rGpbK81L_7sOscG4aVKSjp0RchK1pevsMz_YrhlStS1tXduiLHoxjMP8_BjpJYrQc28-X111i$
> >
> > On Wed, Sep 20, 2023 at 9:29 PM Martijn Visser <martijnvis...@apache.org
> >
> > wrote:
> >
> > > For clarity purposes, this FLIP is being abandoned because it was part
> > > of FLIP-95?
> > >
> > > On Thu, Sep 7, 2023 at 3:01 AM Venkatakrishnan Sowrirajan
> > > <vsowr...@asu.edu> wrote:
> > > >
> > > > Hi everyone,
> > > >
> > > > Posted a PR (
> https://urldefense.com/v3/__https://github.com/apache/flink/pull/23313__;!!IKRxdwAv5BmarQ!f6gg5kDGU-9tqM2rGpbK81L_7sOscG4aVKSjp0RchK1pevsMz_YrhlStS1tXduiLHoxjMP8_BjpJYrQc2-0vM_Ac$
> ) to add nested
> > > > fields filter pushdown. Please review. Thanks.
> > > >
> > > > Regards
> > > > Venkata krishnan
> > > >
> > > >
> > > > On Tue, Sep 5, 2023 at 10:04 PM Venkatakrishnan Sowrirajan <
> > > vsowr...@asu.edu>
> > > > wrote:
> > > >
> > > > > Based on an offline discussion with Becket Qin, I added
> *fieldIndices *
> > > > > back which is the field index of the nested field at every level to
> > > the *NestedFieldReferenceExpression
> > > > > *in FLIP-356
> > > > > <
> > >
> https://urldefense.com/v3/__https://cwiki.apache.org/confluence/display/FLINK/FLIP-356*3A*Support*Nested*Fields*Filter*Pushdown__;JSsrKysr!!IKRxdwAv5BmarQ!f6gg5kDGU-9tqM2rGpbK81L_7sOscG4aVKSjp0RchK1pevsMz_YrhlStS1tXduiLHoxjMP8_BjpJYrQc27ttpcO0$
> > > >
> > > > > *. *2 reasons to do it:
> > > > >
> > > > > 1. Agree with using *fieldIndices *as the only contract to refer
> to the
> > > > > column from the underlying datasource.
> > > > > 2. To keep it consistent with *FieldReferenceExpression*
> > > > >
> > > > > Having said that, I see that with *projection pushdown, *index of
> the
> > > > > fields are used whereas with *filter pushdown (*based on scanning
> few
> > > > > tablesources) *FieldReferenceExpression*'s name is used for eg:
> even in
> > > > > the Flink's *FileSystemTableSource, IcebergSource, JDBCDatsource*.
> This
> > > > > way, I feel the contract is not quite clear and explicit. Wanted to
> > > > > understand other's thoughts as well.
> > > > >
> > > > > Regards
> > > > > Venkata krishnan
> > > > >
> > > > >
> > > > > On Tue, Sep 5, 2023 at 5:34 PM Becket Qin <becket....@gmail.com>
> > > wrote:
> > > > >
> > > > >> Hi Venkata,
> > > > >>
> > > > >>
> > > > >> > 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.
> > > > >>
> > > > >>
> > > > >> I don't think keeping only the field names array would work. At
> the
> > > end of
> > > > >> the day, the contract between Flink SQL and the connectors is
> based
> > > on the
> > > > >> indexes, not the names. Technically speaking, the connectors only
> > > emit a
> > > > >> bunch of RowData which is based on positions. The field names are
> > > added by
> > > > >> the SQL framework via the DDL for those RowData. In this sense,
> the
> > > > >> connectors may not be aware of the field names in Flink DDL at
> all.
> > > The
> > > > >> common language between Flink SQL and source is just positions.
> This
> > > is
> > > > >> also why ProjectionPushDown would work by only relying on the
> > > indexes, not
> > > > >> the field names. So I think the field index array is a must have
> here
> > > in
> > > > >> the NestedFieldReferenceExpression.
> > > > >>
> > > > >> Thanks,
> > > > >>
> > > > >> Jiangjie (Becket) Qin
> > > > >>
> > > > >> On Fri, Sep 1, 2023 at 8:12 AM Venkatakrishnan Sowrirajan <
> > > > >> vsowr...@asu.edu>
> > > > >> wrote:
> > > > >>
> > > > >> > Gentle ping on the vote for FLIP-356: Support Nested fields
> filter
> > > > >> pushdown
> > > > >> > <
> > > > >>
> > >
> https://urldefense.com/v3/__https://www.mail-archive.com/dev@flink.apache.org/msg69289.html__;!!IKRxdwAv5BmarQ!bOW26WlafOQQcb32eWtUiXBAl0cTCK1C6iYhDI2f_z__eczudAWmTRvjDiZg6gzlXmPXrDV4KJS5cFxagFE$
> > > > >> >.
> > > > >> >
> > > > >> > 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