Hi guys,
    Since there are no further comments, Kindly ping for the vote thread
[1] :D

Thanks,
Aitozi.

[1]: https://lists.apache.org/thread/7g5n2vshosom2dj9bp7x4n01okrnx4xx

Aitozi <gjying1...@gmail.com> 于2023年6月26日周一 10:31写道:

> Hi Lincoln,
>     Thanks for your confirmation. I have updated the consensus to the FLIP
> doc.
> If there are no other comments, I'd like to restart the vote process in
> [1] today.
>
> https://lists.apache.org/thread/7g5n2vshosom2dj9bp7x4n01okrnx4xx
>
> Thanks,
> Aitozi.
>
> Lincoln Lee <lincoln.8...@gmail.com> 于2023年6月21日周三 22:29写道:
>
>> Hi Aitozi,
>>
>> Thanks for your updates!
>>
>> By the design of hints, the hints after select clause belong to the query
>> hints category, and this new hint is also a kind of join hints[1].
>> Join table function is one of the join type defined by flink sql joins[2],
>> all existing join hints[1] omit the 'join' keyword,
>> so I would prefer the 'ASYNC_TABLE_FUNC' (which is actually the one for
>> 'ASYNC_TABLE_FUNC_JOIN').
>>
>> Since a short Chinese holiday is coming, I suggest waiting for other
>> people's responses before continuing to vote (next monday?)
>>
>> Btw, I discussed with @fudian offline about pyflink support, there should
>> be no known issues, so you can create a subtask with pyflink support after
>> the vote passed.
>>
>> [1]
>>
>> https://nightlies.apache.org/flink/flink-docs-master/docs/dev/table/sql/queries/hints/#join-hints
>> [2]
>>
>> https://nightlies.apache.org/flink/flink-docs-master/docs/dev/table/sql/queries/joins/
>>
>> Best,
>> Lincoln Lee
>>
>>
>> Aitozi <gjying1...@gmail.com> 于2023年6月18日周日 21:18写道:
>>
>> > Hi all,
>> >     Sorry for the late reply, I have a discussion with Lincoln offline,
>> > mainly about
>> > the naming of the hints option. Thanks Lincoln for the valuable
>> > suggestions.
>> >
>> > Let me answer the last email inline.
>> >
>> > >For `JavaAsyncTableFunc0` in flip, can you use a scenario like RPC
>> call as
>> > an example?
>> >
>> > Sure, will give an example when adding the doc of async udtf and will
>> > update the FLIP simultaneously
>> >
>> > >For the name of this query hint, 'LATERAL' (include its internal
>> options)
>> > don't show any relevance to async, but I haven't thought of a suitable
>> name
>> > at the moment,
>> >
>> > After some discussion with Lincoln, We prefer to choose one of the
>> > `ASYNC_TABLE_FUNC` and `ASYNC_LATERAL`.
>> > Besides, In my opinion the keyword `lateral`'s use scenario is wider
>> than
>> > the table function join, but in this case we only want to config
>> > the async table function, So I'm a bit more lean to the
>> `ASYNC_TABLE_FUNC`.
>> > Looking forward to some inputs if you guys have
>> > some better suggestion on the naming.
>> >
>> > For the usage of the hints config option, I have updated the section
>> > of ConfigOption, you can refer to the FLIP
>> > for more details.
>> >
>> > >Also, the terms 'correlate join' and 'lateral join' are not the same
>> as in
>> > the current joins page[1], so maybe it would be better if we unified
>> them
>> > into  'join table function'
>> >
>> > Yes, we should unified to the 'join table function', updated.
>> >
>> > Best,
>> > Aitozi
>> >
>> > Lincoln Lee <lincoln.8...@gmail.com> 于2023年6月15日周四 09:15写道:
>> >
>> > > Hi Aitozi,
>> > >
>> > > Thanks for your reply!  Gives sql users more flexibility to get
>> > > asynchronous processing capabilities via lateral join table function
>> +1
>> > for
>> > > this
>> > >
>> > > For `JavaAsyncTableFunc0` in flip, can you use a scenario like RPC
>> call
>> > as
>> > > an example?
>> > >
>> > > For the name of this query hint, 'LATERAL' (include its internal
>> options)
>> > > don't show any relevance to async, but I haven't thought of a suitable
>> > name
>> > > at the moment,
>> > > maybe we need to highlight the async keyword directly, we can also
>> see if
>> > > others have better candidates
>> > >
>> > > For the hint option "timeout = '180s'" should be "'timeout' = '180s'",
>> > > seems a typo in the flip. And use upper case for all keywords in sql
>> > > examples.
>> > > Also, the terms 'correlate join' and 'lateral join' are not the same
>> as
>> > in
>> > > the current joins page[1], so maybe it would be better if we unified
>> them
>> > > into  'join table function'
>> > >
>> > > [1]
>> > >
>> > >
>> >
>> https://nightlies.apache.org/flink/flink-docs-master/docs/dev/table/sql/queries/joins/#table-function
>> > >
>> > > Best,
>> > > Lincoln Lee
>> > >
>> > >
>> > > Aitozi <gjying1...@gmail.com> 于2023年6月14日周三 16:11写道:
>> > >
>> > > > Hi Lincoln
>> > > >
>> > > >     Very thanks for your valuable question. I will try to answer
>> your
>> > > > questions inline.
>> > > >
>> > > > >Does the async udtf bring any additional benefits besides a
>> > > > lighter implementation?
>> > > >
>> > > > IMO, async udtf is more than a lighter implementation. It can act
>> as a
>> > > > general way for sql users to use the async operator. And they don't
>> > have
>> > > to
>> > > > bind the async function with a table (a LookupTable), and they are
>> not
>> > > > forced to join on an equality join condition, and they can use it
>> to do
>> > > > more than enrich data.
>> > > >
>> > > > The async lookup join is more like a subset/specific usage of async
>> > udtf.
>> > > > The specific version has more opportunity to be optimized (like push
>> > > down)
>> > > > is acceptable. Async table function should be categorized to
>> > used-defined
>> > > > function.
>> > > >
>> > > > >Should users
>> > > >
>> > > > migrate to the lookup source when they encounter similar
>> requirements
>> > or
>> > > >
>> > > > problems, or should we develop an additional set of similar
>> mechanisms?
>> > > >
>> > > > As I clarified above, the lookup join is a specific usage of async
>> > udtf.
>> > > So
>> > > > it deserves more refined optimization like caching / retryable. But
>> it
>> > > may
>> > > > not all
>> > > >
>> > > > suitable for the async udtf. As function, it can be deterministic/or
>> > > > non-deterministic. So caching is not suitable, and we also do not
>> have
>> > a
>> > > > common cache for the udf now. So I think optimization like
>> > caching/retry
>> > > > should be handed over to the function implementor.
>> > > >
>> > > > > the newly added query hint need a different name that
>> > > > can be easier related to the lateral operation as the current join
>> > > hints[5]
>> > > > do.
>> > > >
>> > > >
>> > > > What about using LATERAL?
>> > > >
>> > > > as below
>> > > >
>> > > > SELECT /*+ LATERAL('output-mode' = 'ordered', 'capacity' = '200',
>> > > timeout =
>> > > > '180s') */ a, c1, c2
>> > > >
>> > > > FROM T1
>> > > >
>> > > > LEFT JOIN lateral TABLE (async_split(b)) AS T(c1, c2) ON true
>> > > >
>> > > > >For the async func example, since the target scenario is an
>> external
>> > io
>> > > > operation, it's better to add the `close` method to actively release
>> > > > resources as a good example for users
>> > > >
>> > > >
>> > > > Make sense to me, will update the FLIP
>> > > >
>> > > > Best,
>> > > >
>> > > > Aitozi.
>> > > >
>> > > > Lincoln Lee <lincoln.8...@gmail.com> 于2023年6月14日周三 14:24写道:
>> > > >
>> > > > > Hi Aitozi,
>> > > > >
>> > > > > Sorry for the lately reply here!  Supports async
>> > > > udtf(`AsyncTableFunction`)
>> > > > > directly in sql seems like an attractive feature, but there're two
>> > > issues
>> > > > > that need to be addressed before we can be sure to add it:
>> > > > > 1. As mentioned in the flip[1], the current lookup function can
>> > already
>> > > > > implement the requirements, but it requires implementing an extra
>> > > > > `LookupTableSource` and explicitly declaring the table schema
>> (which
>> > > can
>> > > > > help implementers the various push-down optimizations supported by
>> > the
>> > > > > planner). Does the async udtf bring any additional benefits
>> besides a
>> > > > > lighter implementation?
>> > > > > 2. FLIP-221[2] abstracts a reusable cache and metric
>> infrastructure
>> > for
>> > > > > lookup sources, which are important to improve performance and
>> > > > > observability for high overhead external io scenarios, how do we
>> > > > integrate
>> > > > > and reuse these capabilities after introducing async udtf? Should
>> > users
>> > > > > migrate to the lookup source when they encounter similar
>> requirements
>> > > or
>> > > > > problems, or should we develop an additional set of similar
>> > mechanisms?
>> > > > (a
>> > > > > similarly case:  FLIP-234[3] introduced the retryable capability
>> for
>> > > > lookup
>> > > > > join)
>> > > > >
>> > > > > For the flip itself,
>> > > > > 1. Considering the 'options' is already used as the dynamic table
>> > > > > options[4] in flink, the newly added query hint need a different
>> name
>> > > > that
>> > > > > can be easier related to the lateral operation as the current join
>> > > > hints[5]
>> > > > > do.
>> > > > > 2. For the async func example, since the target scenario is an
>> > external
>> > > > io
>> > > > > operation, it's better to add the `close` method to actively
>> release
>> > > > > resources as a good example for users. Also in terms of the
>> > determinism
>> > > > of
>> > > > > a function, it is important to remind users that unless the
>> behavior
>> > of
>> > > > the
>> > > > > function is deterministic, it needs to be explicitly declared as
>> > > > > non-deterministic.
>> > > > >
>> > > > > [1].
>> > > > >
>> > > > >
>> > > >
>> > >
>> >
>> https://cwiki.apache.org/confluence/display/FLINK/FLIP-313%3A+Add+support+of+User+Defined+AsyncTableFunction?src=contextnavpagetreemode
>> > > > > [2].
>> > > > >
>> > > > >
>> > > >
>> > >
>> >
>> https://cwiki.apache.org/confluence/display/FLINK/FLIP-221%3A+Abstraction+for+lookup+source+cache+and+metric?src=contextnavpagetreemode
>> > > > > [3].
>> > > > >
>> > > > >
>> > > >
>> > >
>> >
>> https://cwiki.apache.org/confluence/display/FLINK/FLIP-234%3A+Support+Retryable+Lookup+Join+To+Solve+Delayed+Updates+Issue+In+External+Systems?src=contextnavpagetreemode
>> > > > > [4].
>> > > > >
>> > > > >
>> > > >
>> > >
>> >
>> https://cwiki.apache.org/confluence/display/FLINK/FLIP-113%3A+Supports+Dynamic+Table+Options+for+Flink+SQL?src=contextnavpagetreemode
>> > > > > [5].
>> > > > >
>> > > > >
>> > > >
>> > >
>> >
>> https://cwiki.apache.org/confluence/display/FLINK/FLIP-229%3A+Introduces+Join+Hint+for+Flink+SQL+Batch+Job?src=contextnavpagetreemode
>> > > > >
>> > > > > Best,
>> > > > > Lincoln Lee
>> > > > >
>> > > > >
>> > > > > Aitozi <gjying1...@gmail.com> 于2023年6月13日周二 11:30写道:
>> > > > >
>> > > > > > Get your meaning now, thanks :)
>> > > > > >
>> > > > > > Best,
>> > > > > > Aitozi.
>> > > > > >
>> > > > > > Feng Jin <jinfeng1...@gmail.com> 于2023年6月13日周二 11:16写道:
>> > > > > >
>> > > > > > > Hi Aitozi,
>> > > > > > >
>> > > > > > > Sorry for the confusing description.
>> > > > > > >
>> > > > > > > What I meant was that if we need to remind users about tire
>> > safety
>> > > > > > issues,
>> > > > > > > we should introduce the new UDTF interface instead of
>> executing
>> > the
>> > > > > > > original UDTF asynchronously. Therefore, I agree with
>> introducing
>> > > the
>> > > > > > > AsyncTableFunction.
>> > > > > > >
>> > > > > > > Best,
>> > > > > > > Feng
>> > > > > > >
>> > > > > > > On Tue, Jun 13, 2023 at 10:42 AM Aitozi <gjying1...@gmail.com
>> >
>> > > > wrote:
>> > > > > > >
>> > > > > > > > Hi Feng,
>> > > > > > > >     Thanks for your question. We do not provide a way to
>> switch
>> > > the
>> > > > > > UDTF
>> > > > > > > > between sync and async way,
>> > > > > > > > So there should be no thread safety problem here.
>> > > > > > > >
>> > > > > > > > Best,
>> > > > > > > > Aitozi
>> > > > > > > >
>> > > > > > > > Feng Jin <jinfeng1...@gmail.com> 于2023年6月13日周二 10:31写道:
>> > > > > > > >
>> > > > > > > > > Hi Aitozi, We do need to remind users about thread safety
>> > > issues.
>> > > > > > Thank
>> > > > > > > > you
>> > > > > > > > > for your efforts on this FLIP. I have no further
>> questions.
>> > > > > > > > > Best, Feng
>> > > > > > > > >
>> > > > > > > > >
>> > > > > > > > > On Tue, Jun 13, 2023 at 6:05 AM Jing Ge
>> > > > <j...@ververica.com.invalid
>> > > > > >
>> > > > > > > > > wrote:
>> > > > > > > > >
>> > > > > > > > > > Hi Aitozi,
>> > > > > > > > > >
>> > > > > > > > > > Thanks for taking care of that part. I have no other
>> > concern.
>> > > > > > > > > >
>> > > > > > > > > > Best regards,
>> > > > > > > > > > Jing
>> > > > > > > > > >
>> > > > > > > > > >
>> > > > > > > > > > On Mon, Jun 12, 2023 at 5:38 PM Aitozi <
>> > gjying1...@gmail.com
>> > > >
>> > > > > > wrote:
>> > > > > > > > > >
>> > > > > > > > > > > BTW, If there are no other more blocking issue /
>> > comments,
>> > > I
>> > > > > > would
>> > > > > > > > like
>> > > > > > > > > > to
>> > > > > > > > > > > start a VOTE in another thread this wednesday 6.14
>> > > > > > > > > > >
>> > > > > > > > > > > Thanks,
>> > > > > > > > > > > Aitozi.
>> > > > > > > > > > >
>> > > > > > > > > > > Aitozi <gjying1...@gmail.com> 于2023年6月12日周一 23:34写道:
>> > > > > > > > > > >
>> > > > > > > > > > > > Hi, Jing,
>> > > > > > > > > > > >     Thanks for your explanation. I get your point
>> now.
>> > > > > > > > > > > >
>> > > > > > > > > > > > For the performance part, I think it's a good idea
>> to
>> > run
>> > > > > with
>> > > > > > > > > > returning
>> > > > > > > > > > > a
>> > > > > > > > > > > > big table case, the memory consumption
>> > > > > > > > > > > > should be a point to be taken care about. Because in
>> > the
>> > > > > > ordered
>> > > > > > > > > mode,
>> > > > > > > > > > > the
>> > > > > > > > > > > > head element in buffer may affect the
>> > > > > > > > > > > > total memory consumption.
>> > > > > > > > > > > >
>> > > > > > > > > > > >
>> > > > > > > > > > > > Thanks,
>> > > > > > > > > > > > Aitozi.
>> > > > > > > > > > > >
>> > > > > > > > > > > >
>> > > > > > > > > > > >
>> > > > > > > > > > > > Jing Ge <j...@ververica.com.invalid> 于2023年6月12日周一
>> > > > 20:28写道:
>> > > > > > > > > > > >
>> > > > > > > > > > > >> Hi Aitozi,
>> > > > > > > > > > > >>
>> > > > > > > > > > > >> Which key will be used for lookup is not an issue,
>> > only
>> > > > one
>> > > > > > row
>> > > > > > > > will
>> > > > > > > > > > be
>> > > > > > > > > > > >> required for each key in order to enrich it. True,
>> it
>> > > > > depends
>> > > > > > on
>> > > > > > > > the
>> > > > > > > > > > > >> implementation whether multiple rows or single row
>> for
>> > > > each
>> > > > > > key
>> > > > > > > > will
>> > > > > > > > > > be
>> > > > > > > > > > > >> returned. However, for the lookup & enrichment
>> > scenario,
>> > > > one
>> > > > > > > > row/key
>> > > > > > > > > > is
>> > > > > > > > > > > >> recommended, otherwise, like I mentioned
>> previously,
>> > > > > > enrichment
>> > > > > > > > > won't
>> > > > > > > > > > > >> work.
>> > > > > > > > > > > >>
>> > > > > > > > > > > >> I am a little bit concerned about returning a big
>> > table
>> > > > for
>> > > > > > each
>> > > > > > > > > key,
>> > > > > > > > > > > >> since
>> > > > > > > > > > > >> it will take the async call longer to return and
>> need
>> > > more
>> > > > > > > memory.
>> > > > > > > > > The
>> > > > > > > > > > > >> performance tests should cover this scenario. This
>> is
>> > > not
>> > > > a
>> > > > > > > > blocking
>> > > > > > > > > > > issue
>> > > > > > > > > > > >> for this FLIP.
>> > > > > > > > > > > >>
>> > > > > > > > > > > >> Best regards,
>> > > > > > > > > > > >> Jing
>> > > > > > > > > > > >>
>> > > > > > > > > > > >> On Sat, Jun 10, 2023 at 4:11 AM Aitozi <
>> > > > > gjying1...@gmail.com>
>> > > > > > > > > wrote:
>> > > > > > > > > > > >>
>> > > > > > > > > > > >> > Hi Jing,
>> > > > > > > > > > > >> >     I means the join key is not necessary to be
>> the
>> > > > > primary
>> > > > > > > key
>> > > > > > > > or
>> > > > > > > > > > > >> unique
>> > > > > > > > > > > >> > index of the database.
>> > > > > > > > > > > >> > In this situation, we may queried out multi rows
>> for
>> > > one
>> > > > > > join
>> > > > > > > > > key. I
>> > > > > > > > > > > >> think
>> > > > > > > > > > > >> > that's why the
>> > > > > > > > > > > >> > LookupFunction#lookup will return a collection of
>> > > > RowData.
>> > > > > > > > > > > >> >
>> > > > > > > > > > > >> > BTW, I think the behavior of lookup join will not
>> > > affect
>> > > > > the
>> > > > > > > > > > semantic
>> > > > > > > > > > > of
>> > > > > > > > > > > >> > the async udtf.
>> > > > > > > > > > > >> > We use the Async TableFunction here and the table
>> > > > function
>> > > > > > can
>> > > > > > > > > > collect
>> > > > > > > > > > > >> > multiple rows.
>> > > > > > > > > > > >> >
>> > > > > > > > > > > >> > Thanks,
>> > > > > > > > > > > >> > Atiozi.
>> > > > > > > > > > > >> >
>> > > > > > > > > > > >> >
>> > > > > > > > > > > >> >
>> > > > > > > > > > > >> > Jing Ge <j...@ververica.com.invalid>
>> 于2023年6月10日周六
>> > > > > 00:15写道:
>> > > > > > > > > > > >> >
>> > > > > > > > > > > >> > > Hi Aitozi,
>> > > > > > > > > > > >> > >
>> > > > > > > > > > > >> > > The keyRow used in this case contains all
>> keys[1].
>> > > > > > > > > > > >> > >
>> > > > > > > > > > > >> > > Best regards,
>> > > > > > > > > > > >> > > Jing
>> > > > > > > > > > > >> > >
>> > > > > > > > > > > >> > > [1]
>> > > > > > > > > > > >> > >
>> > > > > > > > > > > >> > >
>> > > > > > > > > > > >> >
>> > > > > > > > > > > >>
>> > > > > > > > > > >
>> > > > > > > > > >
>> > > > > > > > >
>> > > > > > > >
>> > > > > > >
>> > > > > >
>> > > > >
>> > > >
>> > >
>> >
>> https://github.com/apache/flink/blob/191ec6ca3943d7119f14837efe112e074d815c47/flink-table/flink-table-common/src/main/java/org/apache/flink/table/functions/LookupFunction.java#L49
>> > > > > > > > > > > >> > >
>> > > > > > > > > > > >> > >
>> > > > > > > > > > > >> > > On Fri, Jun 9, 2023 at 3:42 PM Aitozi <
>> > > > > > gjying1...@gmail.com
>> > > > > > > >
>> > > > > > > > > > wrote:
>> > > > > > > > > > > >> > >
>> > > > > > > > > > > >> > > > Hi Jing,
>> > > > > > > > > > > >> > > >
>> > > > > > > > > > > >> > > >      The performance test is added to the
>> FLIP.
>> > > > > > > > > > > >> > > >
>> > > > > > > > > > > >> > > >      As I know, The lookup join can return
>> multi
>> > > > rows,
>> > > > > > it
>> > > > > > > > > > depends
>> > > > > > > > > > > on
>> > > > > > > > > > > >> > > > whether  the join key
>> > > > > > > > > > > >> > > > is the primary key of the external database
>> or
>> > > not.
>> > > > > The
>> > > > > > > > > `lookup`
>> > > > > > > > > > > [1]
>> > > > > > > > > > > >> > will
>> > > > > > > > > > > >> > > > return a collection of
>> > > > > > > > > > > >> > > > joined result, and each of them will be
>> > collected
>> > > > > > > > > > > >> > > >
>> > > > > > > > > > > >> > > >
>> > > > > > > > > > > >> > > > [1]:
>> > > > > > > > > > > >> > > >
>> > > > > > > > > > > >> > > >
>> > > > > > > > > > > >> > >
>> > > > > > > > > > > >> >
>> > > > > > > > > > > >>
>> > > > > > > > > > >
>> > > > > > > > > >
>> > > > > > > > >
>> > > > > > > >
>> > > > > > >
>> > > > > >
>> > > > >
>> > > >
>> > >
>> >
>> https://github.com/apache/flink/blob/191ec6ca3943d7119f14837efe112e074d815c47/flink-table/flink-table-common/src/main/java/org/apache/flink/table/functions/LookupFunction.java#L52
>> > > > > > > > > > > >> > > >
>> > > > > > > > > > > >> > > >
>> > > > > > > > > > > >> > > > Thanks,
>> > > > > > > > > > > >> > > > Aitozi.
>> > > > > > > > > > > >> > > >
>> > > > > > > > > > > >> > > > Jing Ge <j...@ververica.com.invalid>
>> > 于2023年6月9日周五
>> > > > > > > 17:05写道:
>> > > > > > > > > > > >> > > >
>> > > > > > > > > > > >> > > > > Hi Aitozi,
>> > > > > > > > > > > >> > > > >
>> > > > > > > > > > > >> > > > > Thanks for the feedback. Looking forward to
>> > the
>> > > > > > > > performance
>> > > > > > > > > > > tests.
>> > > > > > > > > > > >> > > > >
>> > > > > > > > > > > >> > > > > Afaik, lookup returns one row for each key
>> [1]
>> > > > [2].
>> > > > > > > > > > > Conceptually,
>> > > > > > > > > > > >> the
>> > > > > > > > > > > >> > > > > lookup function is used to enrich column(s)
>> > from
>> > > > the
>> > > > > > > > > dimension
>> > > > > > > > > > > >> table.
>> > > > > > > > > > > >> > > If,
>> > > > > > > > > > > >> > > > > for the given key, there will be more than
>> one
>> > > > row,
>> > > > > > > there
>> > > > > > > > > will
>> > > > > > > > > > > be
>> > > > > > > > > > > >> no
>> > > > > > > > > > > >> > > way
>> > > > > > > > > > > >> > > > to
>> > > > > > > > > > > >> > > > > know which row will be used to enrich the
>> key.
>> > > > > > > > > > > >> > > > >
>> > > > > > > > > > > >> > > > > [1]
>> > > > > > > > > > > >> > > > >
>> > > > > > > > > > > >> > > > >
>> > > > > > > > > > > >> > > >
>> > > > > > > > > > > >> > >
>> > > > > > > > > > > >> >
>> > > > > > > > > > > >>
>> > > > > > > > > > >
>> > > > > > > > > >
>> > > > > > > > >
>> > > > > > > >
>> > > > > > >
>> > > > > >
>> > > > >
>> > > >
>> > >
>> >
>> https://github.com/apache/flink/blob/191ec6ca3943d7119f14837efe112e074d815c47/flink-table/flink-table-common/src/main/java/org/apache/flink/table/functions/LookupFunction.java#L49
>> > > > > > > > > > > >> > > > > [2]
>> > > > > > > > > > > >> > > > >
>> > > > > > > > > > > >> > > > >
>> > > > > > > > > > > >> > > >
>> > > > > > > > > > > >> > >
>> > > > > > > > > > > >> >
>> > > > > > > > > > > >>
>> > > > > > > > > > >
>> > > > > > > > > >
>> > > > > > > > >
>> > > > > > > >
>> > > > > > >
>> > > > > >
>> > > > >
>> > > >
>> > >
>> >
>> https://github.com/apache/flink/blob/191ec6ca3943d7119f14837efe112e074d815c47/flink-table/flink-table-common/src/main/java/org/apache/flink/table/functions/TableFunction.java#L196
>> > > > > > > > > > > >> > > > >
>> > > > > > > > > > > >> > > > > Best regards,
>> > > > > > > > > > > >> > > > > Jing
>> > > > > > > > > > > >> > > > >
>> > > > > > > > > > > >> > > > > On Fri, Jun 9, 2023 at 5:18 AM Aitozi <
>> > > > > > > > gjying1...@gmail.com
>> > > > > > > > > >
>> > > > > > > > > > > >> wrote:
>> > > > > > > > > > > >> > > > >
>> > > > > > > > > > > >> > > > > > Hi Jing
>> > > > > > > > > > > >> > > > > >     Thanks for your good questions. I
>> have
>> > > > updated
>> > > > > > the
>> > > > > > > > > > example
>> > > > > > > > > > > >> to
>> > > > > > > > > > > >> > the
>> > > > > > > > > > > >> > > > > FLIP.
>> > > > > > > > > > > >> > > > > >
>> > > > > > > > > > > >> > > > > > > Only one row for each lookup
>> > > > > > > > > > > >> > > > > > lookup can also return multi rows, based
>> on
>> > > the
>> > > > > > query
>> > > > > > > > > > result.
>> > > > > > > > > > > >> [1]
>> > > > > > > > > > > >> > > > > >
>> > > > > > > > > > > >> > > > > > [1]:
>> > > > > > > > > > > >> > > > > >
>> > > > > > > > > > > >> > > > > >
>> > > > > > > > > > > >> > > > >
>> > > > > > > > > > > >> > > >
>> > > > > > > > > > > >> > >
>> > > > > > > > > > > >> >
>> > > > > > > > > > > >>
>> > > > > > > > > > >
>> > > > > > > > > >
>> > > > > > > > >
>> > > > > > > >
>> > > > > > >
>> > > > > >
>> > > > >
>> > > >
>> > >
>> >
>> https://github.com/apache/flink/blob/191ec6ca3943d7119f14837efe112e074d815c47/flink-table/flink-table-common/src/main/java/org/apache/flink/table/functions/LookupFunction.java#L56
>> > > > > > > > > > > >> > > > > >
>> > > > > > > > > > > >> > > > > > > If we use async calls with lateral
>> join,
>> > my
>> > > > gut
>> > > > > > > > feeling
>> > > > > > > > > is
>> > > > > > > > > > > >> > > > > > that we might have many more async calls
>> > than
>> > > > > lookup
>> > > > > > > > > join. I
>> > > > > > > > > > > am
>> > > > > > > > > > > >> not
>> > > > > > > > > > > >> > > > > really
>> > > > > > > > > > > >> > > > > > sure if we will be facing potential
>> issues
>> > in
>> > > > this
>> > > > > > > case
>> > > > > > > > or
>> > > > > > > > > > > not.
>> > > > > > > > > > > >> > > > > >
>> > > > > > > > > > > >> > > > > > IMO, the work pattern is similar to the
>> > lookup
>> > > > > > > function,
>> > > > > > > > > for
>> > > > > > > > > > > >> each
>> > > > > > > > > > > >> > row
>> > > > > > > > > > > >> > > > > from
>> > > > > > > > > > > >> > > > > > the left table,
>> > > > > > > > > > > >> > > > > > it will evaluate the eval method once, so
>> > the
>> > > > > async
>> > > > > > > call
>> > > > > > > > > > > numbers
>> > > > > > > > > > > >> > will
>> > > > > > > > > > > >> > > > not
>> > > > > > > > > > > >> > > > > > change.
>> > > > > > > > > > > >> > > > > > and the maximum calls in flight is
>> limited
>> > by
>> > > > the
>> > > > > > > Async
>> > > > > > > > > > > >> operators
>> > > > > > > > > > > >> > > > buffer
>> > > > > > > > > > > >> > > > > > capacity
>> > > > > > > > > > > >> > > > > > which will be controlled by the option.
>> > > > > > > > > > > >> > > > > >
>> > > > > > > > > > > >> > > > > > BTW, for the naming of these option, I
>> > updated
>> > > > the
>> > > > > > > FLIP
>> > > > > > > > > > about
>> > > > > > > > > > > >> this
>> > > > > > > > > > > >> > > you
>> > > > > > > > > > > >> > > > > can
>> > > > > > > > > > > >> > > > > > refer to
>> > > > > > > > > > > >> > > > > > the section of "ConfigOption" and
>> "Rejected
>> > > > > > > > Alternatives"
>> > > > > > > > > > > >> > > > > >
>> > > > > > > > > > > >> > > > > > In the end, for the performance
>> evaluation,
>> > > I'd
>> > > > > like
>> > > > > > > to
>> > > > > > > > do
>> > > > > > > > > > > some
>> > > > > > > > > > > >> > tests
>> > > > > > > > > > > >> > > > and
>> > > > > > > > > > > >> > > > > > will update it to the FLIP doc
>> > > > > > > > > > > >> > > > > >
>> > > > > > > > > > > >> > > > > > Thanks,
>> > > > > > > > > > > >> > > > > > Aitozi.
>> > > > > > > > > > > >> > > > > >
>> > > > > > > > > > > >> > > > > >
>> > > > > > > > > > > >> > > > > > Jing Ge <j...@ververica.com.invalid>
>> > > > 于2023年6月9日周五
>> > > > > > > > > 07:23写道:
>> > > > > > > > > > > >> > > > > >
>> > > > > > > > > > > >> > > > > > > Hi Aitozi,
>> > > > > > > > > > > >> > > > > > >
>> > > > > > > > > > > >> > > > > > > Thanks for the clarification. The code
>> > > example
>> > > > > > looks
>> > > > > > > > > > > >> > interesting. I
>> > > > > > > > > > > >> > > > > would
>> > > > > > > > > > > >> > > > > > > suggest adding them into the FLIP. The
>> > > > > description
>> > > > > > > > with
>> > > > > > > > > > code
>> > > > > > > > > > > >> > > examples
>> > > > > > > > > > > >> > > > > > will
>> > > > > > > > > > > >> > > > > > > help readers understand the motivation
>> and
>> > > how
>> > > > > to
>> > > > > > > use
>> > > > > > > > > it.
>> > > > > > > > > > > >> Afaiac,
>> > > > > > > > > > > >> > > it
>> > > > > > > > > > > >> > > > > is a
>> > > > > > > > > > > >> > > > > > > valid feature for Flink users.
>> > > > > > > > > > > >> > > > > > >
>> > > > > > > > > > > >> > > > > > > As we knew, lookup join is based on
>> > temporal
>> > > > > join,
>> > > > > > > > i.e.
>> > > > > > > > > > FOR
>> > > > > > > > > > > >> > > > SYSTEM_TIME
>> > > > > > > > > > > >> > > > > > AS
>> > > > > > > > > > > >> > > > > > > OF which is also used in your code
>> > example.
>> > > > > > Temporal
>> > > > > > > > > join
>> > > > > > > > > > > >> > performs
>> > > > > > > > > > > >> > > > the
>> > > > > > > > > > > >> > > > > > > lookup based on the processing time
>> match.
>> > > > Only
>> > > > > > one
>> > > > > > > > row
>> > > > > > > > > > for
>> > > > > > > > > > > >> each
>> > > > > > > > > > > >> > > > > > > lookup(afaiu, I need to check the
>> source
>> > > code
>> > > > to
>> > > > > > > > double
>> > > > > > > > > > > >> confirm)
>> > > > > > > > > > > >> > > will
>> > > > > > > > > > > >> > > > > > > return for further enrichment. One the
>> > other
>> > > > > hand,
>> > > > > > > > > lateral
>> > > > > > > > > > > >> join
>> > > > > > > > > > > >> > > will
>> > > > > > > > > > > >> > > > > have
>> > > > > > > > > > > >> > > > > > > sub-queries correlated with every
>> > individual
>> > > > > value
>> > > > > > > of
>> > > > > > > > > the
>> > > > > > > > > > > >> > reference
>> > > > > > > > > > > >> > > > > table
>> > > > > > > > > > > >> > > > > > > from the preceding part of the query
>> and
>> > > each
>> > > > > sub
>> > > > > > > > query
>> > > > > > > > > > will
>> > > > > > > > > > > >> > return
>> > > > > > > > > > > >> > > > > > > multiple rows. If we use async calls
>> with
>> > > > > lateral
>> > > > > > > > join,
>> > > > > > > > > my
>> > > > > > > > > > > gut
>> > > > > > > > > > > >> > > > feeling
>> > > > > > > > > > > >> > > > > is
>> > > > > > > > > > > >> > > > > > > that we might have many more async
>> calls
>> > > than
>> > > > > > lookup
>> > > > > > > > > > join. I
>> > > > > > > > > > > >> am
>> > > > > > > > > > > >> > not
>> > > > > > > > > > > >> > > > > > really
>> > > > > > > > > > > >> > > > > > > sure if we will be facing potential
>> issues
>> > > in
>> > > > > this
>> > > > > > > > case
>> > > > > > > > > or
>> > > > > > > > > > > >> not.
>> > > > > > > > > > > >> > > > > Possible
>> > > > > > > > > > > >> > > > > > > issues I can think of now e.g. too many
>> > PRC
>> > > > > calls,
>> > > > > > > too
>> > > > > > > > > > many
>> > > > > > > > > > > >> async
>> > > > > > > > > > > >> > > > calls
>> > > > > > > > > > > >> > > > > > > processing, the sub query will return a
>> > > table
>> > > > > > which
>> > > > > > > > > might
>> > > > > > > > > > be
>> > > > > > > > > > > >> > (too)
>> > > > > > > > > > > >> > > > big,
>> > > > > > > > > > > >> > > > > > and
>> > > > > > > > > > > >> > > > > > > might cause performance issues. I would
>> > > > suggest
>> > > > > > > > > preparing
>> > > > > > > > > > > some
>> > > > > > > > > > > >> > use
>> > > > > > > > > > > >> > > > > cases
>> > > > > > > > > > > >> > > > > > > and running some performance tests to
>> > check
>> > > > it.
>> > > > > > > These
>> > > > > > > > > are
>> > > > > > > > > > my
>> > > > > > > > > > > >> > > concerns
>> > > > > > > > > > > >> > > > > > about
>> > > > > > > > > > > >> > > > > > > using async calls with lateral join and
>> > I'd
>> > > > like
>> > > > > > to
>> > > > > > > > > share
>> > > > > > > > > > > with
>> > > > > > > > > > > >> > you,
>> > > > > > > > > > > >> > > > > happy
>> > > > > > > > > > > >> > > > > > > to discuss with you and hear different
>> > > > opinions,
>> > > > > > > > > hopefully
>> > > > > > > > > > > the
>> > > > > > > > > > > >> > > > > > > discussion could help me understand it
>> > more
>> > > > > > deeply.
>> > > > > > > > > Please
>> > > > > > > > > > > >> > correct
>> > > > > > > > > > > >> > > me
>> > > > > > > > > > > >> > > > > if
>> > > > > > > > > > > >> > > > > > I
>> > > > > > > > > > > >> > > > > > > am wrong.
>> > > > > > > > > > > >> > > > > > >
>> > > > > > > > > > > >> > > > > > > Best regards,
>> > > > > > > > > > > >> > > > > > > Jing
>> > > > > > > > > > > >> > > > > > >
>> > > > > > > > > > > >> > > > > > >
>> > > > > > > > > > > >> > > > > > > On Thu, Jun 8, 2023 at 7:22 AM Aitozi <
>> > > > > > > > > > gjying1...@gmail.com
>> > > > > > > > > > > >
>> > > > > > > > > > > >> > > wrote:
>> > > > > > > > > > > >> > > > > > >
>> > > > > > > > > > > >> > > > > > > > Hi Mason,
>> > > > > > > > > > > >> > > > > > > >     Thanks for your input. I think
>> if we
>> > > > > support
>> > > > > > > the
>> > > > > > > > > > user
>> > > > > > > > > > > >> > defined
>> > > > > > > > > > > >> > > > > async
>> > > > > > > > > > > >> > > > > > > > table function,
>> > > > > > > > > > > >> > > > > > > > user will be able to use it to hold a
>> > > batch
>> > > > > data
>> > > > > > > > then
>> > > > > > > > > > > >> handle it
>> > > > > > > > > > > >> > > at
>> > > > > > > > > > > >> > > > > one
>> > > > > > > > > > > >> > > > > > > time
>> > > > > > > > > > > >> > > > > > > > in the customized function.
>> > > > > > > > > > > >> > > > > > > >
>> > > > > > > > > > > >> > > > > > > > AsyncSink is meant for the sink
>> > operator.
>> > > I
>> > > > > have
>> > > > > > > not
>> > > > > > > > > > > figure
>> > > > > > > > > > > >> out
>> > > > > > > > > > > >> > > how
>> > > > > > > > > > > >> > > > > to
>> > > > > > > > > > > >> > > > > > > > integrate in this case.
>> > > > > > > > > > > >> > > > > > > >
>> > > > > > > > > > > >> > > > > > > > Thanks,
>> > > > > > > > > > > >> > > > > > > > Atiozi.
>> > > > > > > > > > > >> > > > > > > >
>> > > > > > > > > > > >> > > > > > > >
>> > > > > > > > > > > >> > > > > > > > Mason Chen <mas.chen6...@gmail.com>
>> > > > > > 于2023年6月8日周四
>> > > > > > > > > > 12:40写道:
>> > > > > > > > > > > >> > > > > > > >
>> > > > > > > > > > > >> > > > > > > > > Hi Aitozi,
>> > > > > > > > > > > >> > > > > > > > >
>> > > > > > > > > > > >> > > > > > > > > I think it makes sense to make it
>> > easier
>> > > > for
>> > > > > > SQL
>> > > > > > > > > users
>> > > > > > > > > > > to
>> > > > > > > > > > > >> > make
>> > > > > > > > > > > >> > > > > RPCs.
>> > > > > > > > > > > >> > > > > > Do
>> > > > > > > > > > > >> > > > > > > > you
>> > > > > > > > > > > >> > > > > > > > > think your proposal can extend to
>> the
>> > > > > ability
>> > > > > > to
>> > > > > > > > > batch
>> > > > > > > > > > > >> data
>> > > > > > > > > > > >> > for
>> > > > > > > > > > > >> > > > the
>> > > > > > > > > > > >> > > > > > > RPC?
>> > > > > > > > > > > >> > > > > > > > > This is also another common
>> strategy
>> > to
>> > > > > > increase
>> > > > > > > > > > > >> throughput.
>> > > > > > > > > > > >> > > > Also,
>> > > > > > > > > > > >> > > > > > have
>> > > > > > > > > > > >> > > > > > > > you
>> > > > > > > > > > > >> > > > > > > > > considered solving this a bit
>> > > differently
>> > > > by
>> > > > > > > > > > leveraging
>> > > > > > > > > > > >> > Flink's
>> > > > > > > > > > > >> > > > > > > > AsyncSink?
>> > > > > > > > > > > >> > > > > > > > >
>> > > > > > > > > > > >> > > > > > > > > Best,
>> > > > > > > > > > > >> > > > > > > > > Mason
>> > > > > > > > > > > >> > > > > > > > >
>> > > > > > > > > > > >> > > > > > > > > On Mon, Jun 5, 2023 at 1:50 AM
>> Aitozi
>> > <
>> > > > > > > > > > > >> gjying1...@gmail.com>
>> > > > > > > > > > > >> > > > > wrote:
>> > > > > > > > > > > >> > > > > > > > >
>> > > > > > > > > > > >> > > > > > > > > > One more thing for discussion:
>> > > > > > > > > > > >> > > > > > > > > >
>> > > > > > > > > > > >> > > > > > > > > > In our internal implementation,
>> we
>> > > reuse
>> > > > > the
>> > > > > > > > > option
>> > > > > > > > > > > >> > > > > > > > > >
>> > > > `table.exec.async-lookup.buffer-capacity`
>> > > > > > and
>> > > > > > > > > > > >> > > > > > > > > >
>> `table.exec.async-lookup.timeout` to
>> > > > > config
>> > > > > > > > > > > >> > > > > > > > > > the async udtf. Do you think we
>> > should
>> > > > add
>> > > > > > two
>> > > > > > > > > extra
>> > > > > > > > > > > >> option
>> > > > > > > > > > > >> > > to
>> > > > > > > > > > > >> > > > > > > > > distinguish
>> > > > > > > > > > > >> > > > > > > > > > from the lookup option such as
>> > > > > > > > > > > >> > > > > > > > > >
>> > > > > > > > > > > >> > > > > > > > > >
>> > > `table.exec.async-udtf.buffer-capacity`
>> > > > > > > > > > > >> > > > > > > > > > `table.exec.async-udtf.timeout`
>> > > > > > > > > > > >> > > > > > > > > >
>> > > > > > > > > > > >> > > > > > > > > >
>> > > > > > > > > > > >> > > > > > > > > > Best,
>> > > > > > > > > > > >> > > > > > > > > > Aitozi.
>> > > > > > > > > > > >> > > > > > > > > >
>> > > > > > > > > > > >> > > > > > > > > >
>> > > > > > > > > > > >> > > > > > > > > >
>> > > > > > > > > > > >> > > > > > > > > > Aitozi <gjying1...@gmail.com>
>> > > > > 于2023年6月5日周一
>> > > > > > > > > 12:20写道:
>> > > > > > > > > > > >> > > > > > > > > >
>> > > > > > > > > > > >> > > > > > > > > > > Hi Jing,
>> > > > > > > > > > > >> > > > > > > > > > >
>> > > > > > > > > > > >> > > > > > > > > > >     > what is the difference
>> > between
>> > > > the
>> > > > > > RPC
>> > > > > > > > > call
>> > > > > > > > > > or
>> > > > > > > > > > > >> > query
>> > > > > > > > > > > >> > > > you
>> > > > > > > > > > > >> > > > > > > > > mentioned
>> > > > > > > > > > > >> > > > > > > > > > > and the lookup in a very
>> > > > > > > > > > > >> > > > > > > > > > > general way
>> > > > > > > > > > > >> > > > > > > > > > >
>> > > > > > > > > > > >> > > > > > > > > > > I think the RPC call or query
>> > > service
>> > > > is
>> > > > > > > quite
>> > > > > > > > > > > >> similar to
>> > > > > > > > > > > >> > > the
>> > > > > > > > > > > >> > > > > > > lookup
>> > > > > > > > > > > >> > > > > > > > > > join.
>> > > > > > > > > > > >> > > > > > > > > > > But lookup join should work
>> > > > > > > > > > > >> > > > > > > > > > > with `LookupTableSource`.
>> > > > > > > > > > > >> > > > > > > > > > >
>> > > > > > > > > > > >> > > > > > > > > > > Let's see how we can perform an
>> > > async
>> > > > > RPC
>> > > > > > > call
>> > > > > > > > > > with
>> > > > > > > > > > > >> > lookup
>> > > > > > > > > > > >> > > > > join:
>> > > > > > > > > > > >> > > > > > > > > > >
>> > > > > > > > > > > >> > > > > > > > > > > (1) Implement an
>> > AsyncTableFunction
>> > > > with
>> > > > > > RPC
>> > > > > > > > > call
>> > > > > > > > > > > >> logic.
>> > > > > > > > > > > >> > > > > > > > > > > (2) Implement a
>> > `LookupTableSource`
>> > > > > > > connector
>> > > > > > > > > run
>> > > > > > > > > > > with
>> > > > > > > > > > > >> > the
>> > > > > > > > > > > >> > > > > async
>> > > > > > > > > > > >> > > > > > > udtf
>> > > > > > > > > > > >> > > > > > > > > > > defined in (1).
>> > > > > > > > > > > >> > > > > > > > > > > (3) Then define a DDL of this
>> look
>> > > up
>> > > > > > table
>> > > > > > > in
>> > > > > > > > > SQL
>> > > > > > > > > > > >> > > > > > > > > > >
>> > > > > > > > > > > >> > > > > > > > > > > CREATE TEMPORARY TABLE
>> Customers (
>> > > > > > > > > > > >> > > > > > > > > > >   id INT,
>> > > > > > > > > > > >> > > > > > > > > > >   name STRING,
>> > > > > > > > > > > >> > > > > > > > > > >   country STRING,
>> > > > > > > > > > > >> > > > > > > > > > >   zip STRING
>> > > > > > > > > > > >> > > > > > > > > > > ) WITH (
>> > > > > > > > > > > >> > > > > > > > > > >   'connector' = 'custom'
>> > > > > > > > > > > >> > > > > > > > > > > );
>> > > > > > > > > > > >> > > > > > > > > > >
>> > > > > > > > > > > >> > > > > > > > > > > (4) Run with the query as
>> below:
>> > > > > > > > > > > >> > > > > > > > > > >
>> > > > > > > > > > > >> > > > > > > > > > > SELECT o.order_id, o.total,
>> > > c.country,
>> > > > > > c.zip
>> > > > > > > > > > > >> > > > > > > > > > > FROM Orders AS o
>> > > > > > > > > > > >> > > > > > > > > > >   JOIN Customers FOR
>> SYSTEM_TIME
>> > AS
>> > > OF
>> > > > > > > > > o.proc_time
>> > > > > > > > > > > AS
>> > > > > > > > > > > >> c
>> > > > > > > > > > > >> > > > > > > > > > >     ON o.customer_id = c.id;
>> > > > > > > > > > > >> > > > > > > > > > >
>> > > > > > > > > > > >> > > > > > > > > > > This example is from doc
>> > > > > > > > > > > >> > > > > > > > > > > <
>> > > > > > > > > > > >> > > > > > > > > >
>> > > > > > > > > > > >> > > > > > > > >
>> > > > > > > > > > > >> > > > > > > >
>> > > > > > > > > > > >> > > > > > >
>> > > > > > > > > > > >> > > > > >
>> > > > > > > > > > > >> > > > >
>> > > > > > > > > > > >> > > >
>> > > > > > > > > > > >> > >
>> > > > > > > > > > > >> >
>> > > > > > > > > > > >>
>> > > > > > > > > > >
>> > > > > > > > > >
>> > > > > > > > >
>> > > > > > > >
>> > > > > > >
>> > > > > >
>> > > > >
>> > > >
>> > >
>> >
>> https://nightlies.apache.org/flink/flink-docs-release-1.17/docs/dev/table/sql/queries/joins/#lookup-join
>> > > > > > > > > > > >> > > > > > > > > > >.You
>> > > > > > > > > > > >> > > > > > > > > > > can image the look up process
>> as
>> > an
>> > > > > async
>> > > > > > > RPC
>> > > > > > > > > call
>> > > > > > > > > > > >> > process.
>> > > > > > > > > > > >> > > > > > > > > > >
>> > > > > > > > > > > >> > > > > > > > > > > Let's see how we can perform an
>> > > async
>> > > > > RPC
>> > > > > > > call
>> > > > > > > > > > with
>> > > > > > > > > > > >> > lateral
>> > > > > > > > > > > >> > > > > join:
>> > > > > > > > > > > >> > > > > > > > > > >
>> > > > > > > > > > > >> > > > > > > > > > > (1) Implement an
>> > AsyncTableFunction
>> > > > with
>> > > > > > RPC
>> > > > > > > > > call
>> > > > > > > > > > > >> logic.
>> > > > > > > > > > > >> > > > > > > > > > > (2) Run query with
>> > > > > > > > > > > >> > > > > > > > > > >
>> > > > > > > > > > > >> > > > > > > > > > > Create function f1 as '...' ;
>> > > > > > > > > > > >> > > > > > > > > > >
>> > > > > > > > > > > >> > > > > > > > > > > SELECT o.order_id, o.total,
>> > > c.country,
>> > > > > > c.zip
>> > > > > > > > > FROM
>> > > > > > > > > > > >> Orders
>> > > > > > > > > > > >> > > > > lateral
>> > > > > > > > > > > >> > > > > > > > table
>> > > > > > > > > > > >> > > > > > > > > > > (f1(order_id)) as T(...);
>> > > > > > > > > > > >> > > > > > > > > > >
>> > > > > > > > > > > >> > > > > > > > > > > As you can see, the lateral
>> join
>> > > > version
>> > > > > > is
>> > > > > > > > more
>> > > > > > > > > > > >> simple
>> > > > > > > > > > > >> > and
>> > > > > > > > > > > >> > > > > > > intuitive
>> > > > > > > > > > > >> > > > > > > > > to
>> > > > > > > > > > > >> > > > > > > > > > > users. Users do not have to
>> wrap a
>> > > > > > > > > > > >> > > > > > > > > > > LookupTableSource for the
>> purpose
>> > of
>> > > > > using
>> > > > > > > > async
>> > > > > > > > > > > udtf.
>> > > > > > > > > > > >> > > > > > > > > > >
>> > > > > > > > > > > >> > > > > > > > > > > In the end, We can also see the
>> > user
>> > > > > > defined
>> > > > > > > > > async
>> > > > > > > > > > > >> table
>> > > > > > > > > > > >> > > > > function
>> > > > > > > > > > > >> > > > > > > is
>> > > > > > > > > > > >> > > > > > > > an
>> > > > > > > > > > > >> > > > > > > > > > > enhancement of the current
>> lateral
>> > > > table
>> > > > > > > join
>> > > > > > > > > > > >> > > > > > > > > > > which only supports sync
>> lateral
>> > > join
>> > > > > now.
>> > > > > > > > > > > >> > > > > > > > > > >
>> > > > > > > > > > > >> > > > > > > > > > > Best,
>> > > > > > > > > > > >> > > > > > > > > > > Aitozi.
>> > > > > > > > > > > >> > > > > > > > > > >
>> > > > > > > > > > > >> > > > > > > > > > >
>> > > > > > > > > > > >> > > > > > > > > > > Jing Ge
>> > <j...@ververica.com.invalid
>> > > >
>> > > > > > > > > 于2023年6月2日周五
>> > > > > > > > > > > >> > 19:37写道:
>> > > > > > > > > > > >> > > > > > > > > > >
>> > > > > > > > > > > >> > > > > > > > > > >> Hi Aitozi,
>> > > > > > > > > > > >> > > > > > > > > > >>
>> > > > > > > > > > > >> > > > > > > > > > >> Thanks for the update. Just
>> out
>> > of
>> > > > > > > curiosity,
>> > > > > > > > > > what
>> > > > > > > > > > > is
>> > > > > > > > > > > >> > the
>> > > > > > > > > > > >> > > > > > > difference
>> > > > > > > > > > > >> > > > > > > > > > >> between the RPC call or query
>> you
>> > > > > > mentioned
>> > > > > > > > and
>> > > > > > > > > > the
>> > > > > > > > > > > >> > lookup
>> > > > > > > > > > > >> > > > in
>> > > > > > > > > > > >> > > > > a
>> > > > > > > > > > > >> > > > > > > very
>> > > > > > > > > > > >> > > > > > > > > > >> general way? Since Lateral
>> join
>> > is
>> > > > used
>> > > > > > in
>> > > > > > > > the
>> > > > > > > > > > > FLIP.
>> > > > > > > > > > > >> Is
>> > > > > > > > > > > >> > > > there
>> > > > > > > > > > > >> > > > > > any
>> > > > > > > > > > > >> > > > > > > > > > special
>> > > > > > > > > > > >> > > > > > > > > > >> thought for that? Sorry for
>> > asking
>> > > so
>> > > > > > many
>> > > > > > > > > > > questions.
>> > > > > > > > > > > >> > The
>> > > > > > > > > > > >> > > > FLIP
>> > > > > > > > > > > >> > > > > > > > > contains
>> > > > > > > > > > > >> > > > > > > > > > >> limited information to
>> understand
>> > > the
>> > > > > > > > > motivation.
>> > > > > > > > > > > >> > > > > > > > > > >>
>> > > > > > > > > > > >> > > > > > > > > > >> Best regards,
>> > > > > > > > > > > >> > > > > > > > > > >> Jing
>> > > > > > > > > > > >> > > > > > > > > > >>
>> > > > > > > > > > > >> > > > > > > > > > >> On Fri, Jun 2, 2023 at 3:48 AM
>> > > > Aitozi <
>> > > > > > > > > > > >> > > gjying1...@gmail.com
>> > > > > > > > > > > >> > > > >
>> > > > > > > > > > > >> > > > > > > wrote:
>> > > > > > > > > > > >> > > > > > > > > > >>
>> > > > > > > > > > > >> > > > > > > > > > >> > Hi Jing,
>> > > > > > > > > > > >> > > > > > > > > > >> >     I have updated the
>> proposed
>> > > > > changes
>> > > > > > > to
>> > > > > > > > > the
>> > > > > > > > > > > >> FLIP.
>> > > > > > > > > > > >> > > IMO,
>> > > > > > > > > > > >> > > > > > lookup
>> > > > > > > > > > > >> > > > > > > > has
>> > > > > > > > > > > >> > > > > > > > > > its
>> > > > > > > > > > > >> > > > > > > > > > >> > clear
>> > > > > > > > > > > >> > > > > > > > > > >> > async call requirement is
>> due
>> > to
>> > > > its
>> > > > > IO
>> > > > > > > > heavy
>> > > > > > > > > > > >> > operator.
>> > > > > > > > > > > >> > > In
>> > > > > > > > > > > >> > > > > our
>> > > > > > > > > > > >> > > > > > > > > usage,
>> > > > > > > > > > > >> > > > > > > > > > >> sql
>> > > > > > > > > > > >> > > > > > > > > > >> > users have
>> > > > > > > > > > > >> > > > > > > > > > >> > logic to do some RPC call or
>> > > query
>> > > > > the
>> > > > > > > > > > > third-party
>> > > > > > > > > > > >> > > service
>> > > > > > > > > > > >> > > > > > which
>> > > > > > > > > > > >> > > > > > > > is
>> > > > > > > > > > > >> > > > > > > > > > >> also IO
>> > > > > > > > > > > >> > > > > > > > > > >> > intensive.
>> > > > > > > > > > > >> > > > > > > > > > >> > In these case, we'd like to
>> > > > leverage
>> > > > > > the
>> > > > > > > > > async
>> > > > > > > > > > > >> > function
>> > > > > > > > > > > >> > > to
>> > > > > > > > > > > >> > > > > > > improve
>> > > > > > > > > > > >> > > > > > > > > the
>> > > > > > > > > > > >> > > > > > > > > > >> > throughput.
>> > > > > > > > > > > >> > > > > > > > > > >> >
>> > > > > > > > > > > >> > > > > > > > > > >> > Thanks,
>> > > > > > > > > > > >> > > > > > > > > > >> > Aitozi.
>> > > > > > > > > > > >> > > > > > > > > > >> >
>> > > > > > > > > > > >> > > > > > > > > > >> > Jing Ge
>> > > <j...@ververica.com.invalid
>> > > > >
>> > > > > > > > > > > 于2023年6月1日周四
>> > > > > > > > > > > >> > > > 22:55写道:
>> > > > > > > > > > > >> > > > > > > > > > >> >
>> > > > > > > > > > > >> > > > > > > > > > >> > > Hi Aitozi,
>> > > > > > > > > > > >> > > > > > > > > > >> > >
>> > > > > > > > > > > >> > > > > > > > > > >> > > Sorry for the late reply.
>> > Would
>> > > > you
>> > > > > > > like
>> > > > > > > > to
>> > > > > > > > > > > >> update
>> > > > > > > > > > > >> > the
>> > > > > > > > > > > >> > > > > > > proposed
>> > > > > > > > > > > >> > > > > > > > > > >> changes
>> > > > > > > > > > > >> > > > > > > > > > >> > > with more details into the
>> > FLIP
>> > > > > too?
>> > > > > > > > > > > >> > > > > > > > > > >> > > I got your point. It looks
>> > > like a
>> > > > > > > > rational
>> > > > > > > > > > > idea.
>> > > > > > > > > > > >> > > > However,
>> > > > > > > > > > > >> > > > > > > since
>> > > > > > > > > > > >> > > > > > > > > > lookup
>> > > > > > > > > > > >> > > > > > > > > > >> > has
>> > > > > > > > > > > >> > > > > > > > > > >> > > its clear async call
>> > > requirement,
>> > > > > are
>> > > > > > > > there
>> > > > > > > > > > any
>> > > > > > > > > > > >> real
>> > > > > > > > > > > >> > > use
>> > > > > > > > > > > >> > > > > > cases
>> > > > > > > > > > > >> > > > > > > > > that
>> > > > > > > > > > > >> > > > > > > > > > >> > > need this change? This
>> will
>> > > help
>> > > > us
>> > > > > > > > > > understand
>> > > > > > > > > > > >> the
>> > > > > > > > > > > >> > > > > > motivation.
>> > > > > > > > > > > >> > > > > > > > > After
>> > > > > > > > > > > >> > > > > > > > > > >> all,
>> > > > > > > > > > > >> > > > > > > > > > >> > > lateral join and temporal
>> > > lookup
>> > > > > > > join[1]
>> > > > > > > > > are
>> > > > > > > > > > > >> quite
>> > > > > > > > > > > >> > > > > > different.
>> > > > > > > > > > > >> > > > > > > > > > >> > >
>> > > > > > > > > > > >> > > > > > > > > > >> > > Best regards,
>> > > > > > > > > > > >> > > > > > > > > > >> > > Jing
>> > > > > > > > > > > >> > > > > > > > > > >> > >
>> > > > > > > > > > > >> > > > > > > > > > >> > >
>> > > > > > > > > > > >> > > > > > > > > > >> > > [1]
>> > > > > > > > > > > >> > > > > > > > > > >> > >
>> > > > > > > > > > > >> > > > > > > > > > >> > >
>> > > > > > > > > > > >> > > > > > > > > > >> >
>> > > > > > > > > > > >> > > > > > > > > > >>
>> > > > > > > > > > > >> > > > > > > > > >
>> > > > > > > > > > > >> > > > > > > > >
>> > > > > > > > > > > >> > > > > > > >
>> > > > > > > > > > > >> > > > > > >
>> > > > > > > > > > > >> > > > > >
>> > > > > > > > > > > >> > > > >
>> > > > > > > > > > > >> > > >
>> > > > > > > > > > > >> > >
>> > > > > > > > > > > >> >
>> > > > > > > > > > > >>
>> > > > > > > > > > >
>> > > > > > > > > >
>> > > > > > > > >
>> > > > > > > >
>> > > > > > >
>> > > > > >
>> > > > >
>> > > >
>> > >
>> >
>> https://github.com/apache/flink/blob/d90a72da2fd601ca4e2a46700e91ec5b348de2ad/flink-table/flink-table-common/src/main/java/org/apache/flink/table/functions/AsyncTableFunction.java#L54
>> > > > > > > > > > > >> > > > > > > > > > >> > >
>> > > > > > > > > > > >> > > > > > > > > > >> > > On Wed, May 31, 2023 at
>> > 8:53 AM
>> > > > > > Aitozi
>> > > > > > > <
>> > > > > > > > > > > >> > > > > > gjying1...@gmail.com>
>> > > > > > > > > > > >> > > > > > > > > > wrote:
>> > > > > > > > > > > >> > > > > > > > > > >> > >
>> > > > > > > > > > > >> > > > > > > > > > >> > > > Hi Jing,
>> > > > > > > > > > > >> > > > > > > > > > >> > > >     What do you think
>> about
>> > > it?
>> > > > > Can
>> > > > > > > we
>> > > > > > > > > move
>> > > > > > > > > > > >> > forward
>> > > > > > > > > > > >> > > > this
>> > > > > > > > > > > >> > > > > > > > > feature?
>> > > > > > > > > > > >> > > > > > > > > > >> > > >
>> > > > > > > > > > > >> > > > > > > > > > >> > > > Thanks,
>> > > > > > > > > > > >> > > > > > > > > > >> > > > Aitozi.
>> > > > > > > > > > > >> > > > > > > > > > >> > > >
>> > > > > > > > > > > >> > > > > > > > > > >> > > > Aitozi <
>> > gjying1...@gmail.com
>> > > >
>> > > > > > > > > > 于2023年5月29日周一
>> > > > > > > > > > > >> > > 09:56写道:
>> > > > > > > > > > > >> > > > > > > > > > >> > > >
>> > > > > > > > > > > >> > > > > > > > > > >> > > > > Hi Jing,
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >     > "Do you mean to
>> > > support
>> > > > > the
>> > > > > > > > > > > >> > > AyncTableFunction
>> > > > > > > > > > > >> > > > > > beyond
>> > > > > > > > > > > >> > > > > > > > the
>> > > > > > > > > > > >> > > > > > > > > > >> > > > > LookupTableSource?"
>> > > > > > > > > > > >> > > > > > > > > > >> > > > > Yes, I mean to support
>> > the
>> > > > > > > > > > > AyncTableFunction
>> > > > > > > > > > > >> > > beyond
>> > > > > > > > > > > >> > > > > the
>> > > > > > > > > > > >> > > > > > > > > > >> > > > LookupTableSource.
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >
>> > > > > > > > > > > >> > > > > > > > > > >> > > > > The
>> "AsyncTableFunction"
>> > is
>> > > > the
>> > > > > > > > > function
>> > > > > > > > > > > with
>> > > > > > > > > > > >> > > > ability
>> > > > > > > > > > > >> > > > > to
>> > > > > > > > > > > >> > > > > > > be
>> > > > > > > > > > > >> > > > > > > > > > >> executed
>> > > > > > > > > > > >> > > > > > > > > > >> > > > async
>> > > > > > > > > > > >> > > > > > > > > > >> > > > > (with
>> AsyncWaitOperator).
>> > > > > > > > > > > >> > > > > > > > > > >> > > > > The async lookup join
>> is
>> > a
>> > > > one
>> > > > > of
>> > > > > > > > usage
>> > > > > > > > > > of
>> > > > > > > > > > > >> this.
>> > > > > > > > > > > >> > > So,
>> > > > > > > > > > > >> > > > > we
>> > > > > > > > > > > >> > > > > > > > don't
>> > > > > > > > > > > >> > > > > > > > > > >> have to
>> > > > > > > > > > > >> > > > > > > > > > >> > > > bind
>> > > > > > > > > > > >> > > > > > > > > > >> > > > > the AyncTableFunction
>> > with
>> > > > > > > > > > > LookupTableSource.
>> > > > > > > > > > > >> > > > > > > > > > >> > > > > If User-defined
>> > > > > > AsyncTableFunction
>> > > > > > > is
>> > > > > > > > > > > >> supported,
>> > > > > > > > > > > >> > > > user
>> > > > > > > > > > > >> > > > > > can
>> > > > > > > > > > > >> > > > > > > > > > directly
>> > > > > > > > > > > >> > > > > > > > > > >> > use
>> > > > > > > > > > > >> > > > > > > > > > >> > > > > lateral table syntax
>> to
>> > > > perform
>> > > > > > > async
>> > > > > > > > > > > >> operation.
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >
>> > > > > > > > > > > >> > > > > > > > > > >> > > > > > "It would be better
>> if
>> > > you
>> > > > > > could
>> > > > > > > > > > > elaborate
>> > > > > > > > > > > >> the
>> > > > > > > > > > > >> > > > > > proposed
>> > > > > > > > > > > >> > > > > > > > > > changes
>> > > > > > > > > > > >> > > > > > > > > > >> wrt
>> > > > > > > > > > > >> > > > > > > > > > >> > > the
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >
>> CorrelatedCodeGenerator
>> > > with
>> > > > > more
>> > > > > > > > > > details"
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >
>> > > > > > > > > > > >> > > > > > > > > > >> > > > > In the proposal, we
>> use
>> > > > lateral
>> > > > > > > table
>> > > > > > > > > > > syntax
>> > > > > > > > > > > >> to
>> > > > > > > > > > > >> > > > > support
>> > > > > > > > > > > >> > > > > > > the
>> > > > > > > > > > > >> > > > > > > > > > async
>> > > > > > > > > > > >> > > > > > > > > > >> > table
>> > > > > > > > > > > >> > > > > > > > > > >> > > > > function. So the
>> planner
>> > > will
>> > > > > > also
>> > > > > > > > > treat
>> > > > > > > > > > > this
>> > > > > > > > > > > >> > > > > statement
>> > > > > > > > > > > >> > > > > > > to a
>> > > > > > > > > > > >> > > > > > > > > > >> > > > > CommonExecCorrelate
>> node.
>> > > So
>> > > > > the
>> > > > > > > > > runtime
>> > > > > > > > > > > code
>> > > > > > > > > > > >> > > should
>> > > > > > > > > > > >> > > > > be
>> > > > > > > > > > > >> > > > > > > > > > generated
>> > > > > > > > > > > >> > > > > > > > > > >> in
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >
>> CorrelatedCodeGenerator.
>> > > > > > > > > > > >> > > > > > > > > > >> > > > > In
>> > CorrelatedCodeGenerator,
>> > > > we
>> > > > > > will
>> > > > > > > > > know
>> > > > > > > > > > > the
>> > > > > > > > > > > >> > > > > > > TableFunction's
>> > > > > > > > > > > >> > > > > > > > > > Kind
>> > > > > > > > > > > >> > > > > > > > > > >> of
>> > > > > > > > > > > >> > > > > > > > > > >> > > > > `FunctionKind.Table`
>> or
>> > > > > > > > > > > >> > `FunctionKind.ASYNC_TABLE`
>> > > > > > > > > > > >> > > > > > > > > > >> > > > > For
>> > > > `FunctionKind.ASYNC_TABLE`
>> > > > > > we
>> > > > > > > > can
>> > > > > > > > > > > >> generate
>> > > > > > > > > > > >> > a
>> > > > > > > > > > > >> > > > > > > > > > >> AsyncWaitOperator
>> > > > > > > > > > > >> > > > > > > > > > >> > to
>> > > > > > > > > > > >> > > > > > > > > > >> > > > > execute the async
>> table
>> > > > > function.
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >
>> > > > > > > > > > > >> > > > > > > > > > >> > > > > Thanks,
>> > > > > > > > > > > >> > > > > > > > > > >> > > > > Aitozi.
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >
>> > > > > > > > > > > >> > > > > > > > > > >> > > > > Jing Ge
>> > > > > > <j...@ververica.com.invalid
>> > > > > > > >
>> > > > > > > > > > > >> > > 于2023年5月29日周一
>> > > > > > > > > > > >> > > > > > > 03:22写道:
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> Hi Aitozi,
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >>
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> Thanks for the
>> > > > clarification.
>> > > > > > The
>> > > > > > > > > naming
>> > > > > > > > > > > >> > "Lookup"
>> > > > > > > > > > > >> > > > > might
>> > > > > > > > > > > >> > > > > > > > > suggest
>> > > > > > > > > > > >> > > > > > > > > > >> > using
>> > > > > > > > > > > >> > > > > > > > > > >> > > it
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> for table look up.
>> But
>> > > > > > > conceptually
>> > > > > > > > > what
>> > > > > > > > > > > the
>> > > > > > > > > > > >> > > eval()
>> > > > > > > > > > > >> > > > > > > method
>> > > > > > > > > > > >> > > > > > > > > will
>> > > > > > > > > > > >> > > > > > > > > > >> do
>> > > > > > > > > > > >> > > > > > > > > > >> > is
>> > > > > > > > > > > >> > > > > > > > > > >> > > to
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> get a collection of
>> > > > > results(Row,
>> > > > > > > > > > RowData)
>> > > > > > > > > > > >> from
>> > > > > > > > > > > >> > > the
>> > > > > > > > > > > >> > > > > > given
>> > > > > > > > > > > >> > > > > > > > > keys.
>> > > > > > > > > > > >> > > > > > > > > > >> How
>> > > > > > > > > > > >> > > > > > > > > > >> > it
>> > > > > > > > > > > >> > > > > > > > > > >> > > > will
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> be done depends on
>> the
>> > > > > > > > implementation,
>> > > > > > > > > > > i.e.
>> > > > > > > > > > > >> you
>> > > > > > > > > > > >> > > can
>> > > > > > > > > > > >> > > > > > > > implement
>> > > > > > > > > > > >> > > > > > > > > > >> your
>> > > > > > > > > > > >> > > > > > > > > > >> > own
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> Source[1][2]. The
>> > example
>> > > in
>> > > > > the
>> > > > > > > > FLIP
>> > > > > > > > > > > >> should be
>> > > > > > > > > > > >> > > > able
>> > > > > > > > > > > >> > > > > to
>> > > > > > > > > > > >> > > > > > > be
>> > > > > > > > > > > >> > > > > > > > > > >> handled
>> > > > > > > > > > > >> > > > > > > > > > >> > in
>> > > > > > > > > > > >> > > > > > > > > > >> > > > this
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> way.
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >>
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> Do you mean to
>> support
>> > the
>> > > > > > > > > > > AyncTableFunction
>> > > > > > > > > > > >> > > beyond
>> > > > > > > > > > > >> > > > > the
>> > > > > > > > > > > >> > > > > > > > > > >> > > > LookupTableSource?
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> It would be better if
>> > you
>> > > > > could
>> > > > > > > > > > elaborate
>> > > > > > > > > > > >> the
>> > > > > > > > > > > >> > > > > proposed
>> > > > > > > > > > > >> > > > > > > > > changes
>> > > > > > > > > > > >> > > > > > > > > > >> wrt
>> > > > > > > > > > > >> > > > > > > > > > >> > the
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >>
>> CorrelatedCodeGenerator
>> > > with
>> > > > > > more
>> > > > > > > > > > details.
>> > > > > > > > > > > >> > > Thanks!
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >>
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> Best regards,
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> Jing
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >>
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> [1]
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >>
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >>
>> > > > > > > > > > > >> > > > > > > > > > >> > > >
>> > > > > > > > > > > >> > > > > > > > > > >> > >
>> > > > > > > > > > > >> > > > > > > > > > >> >
>> > > > > > > > > > > >> > > > > > > > > > >>
>> > > > > > > > > > > >> > > > > > > > > >
>> > > > > > > > > > > >> > > > > > > > >
>> > > > > > > > > > > >> > > > > > > >
>> > > > > > > > > > > >> > > > > > >
>> > > > > > > > > > > >> > > > > >
>> > > > > > > > > > > >> > > > >
>> > > > > > > > > > > >> > > >
>> > > > > > > > > > > >> > >
>> > > > > > > > > > > >> >
>> > > > > > > > > > > >>
>> > > > > > > > > > >
>> > > > > > > > > >
>> > > > > > > > >
>> > > > > > > >
>> > > > > > >
>> > > > > >
>> > > > >
>> > > >
>> > >
>> >
>> https://github.com/apache/flink/blob/678370b18e1b6c4a23e5ce08f8efd05675a0cc17/flink-table/flink-table-common/src/main/java/org/apache/flink/table/connector/source/LookupTableSource.java#L64
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> [2]
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >>
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >>
>> > > > > > > > > > > >> > > > > > > > > > >> > > >
>> > > > > > > > > > > >> > > > > > > > > > >> > >
>> > > > > > > > > > > >> > > > > > > > > > >> >
>> > > > > > > > > > > >> > > > > > > > > > >>
>> > > > > > > > > > > >> > > > > > > > > >
>> > > > > > > > > > > >> > > > > > > > >
>> > > > > > > > > > > >> > > > > > > >
>> > > > > > > > > > > >> > > > > > >
>> > > > > > > > > > > >> > > > > >
>> > > > > > > > > > > >> > > > >
>> > > > > > > > > > > >> > > >
>> > > > > > > > > > > >> > >
>> > > > > > > > > > > >> >
>> > > > > > > > > > > >>
>> > > > > > > > > > >
>> > > > > > > > > >
>> > > > > > > > >
>> > > > > > > >
>> > > > > > >
>> > > > > >
>> > > > >
>> > > >
>> > >
>> >
>> https://github.com/apache/flink/blob/678370b18e1b6c4a23e5ce08f8efd05675a0cc17/flink-table/flink-table-common/src/main/java/org/apache/flink/table/connector/source/AsyncTableFunctionProvider.java#L49
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >>
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> On Sat, May 27, 2023
>> at
>> > > > > 9:48 AM
>> > > > > > > > > Aitozi <
>> > > > > > > > > > > >> > > > > > > > gjying1...@gmail.com
>> > > > > > > > > > > >> > > > > > > > > >
>> > > > > > > > > > > >> > > > > > > > > > >> > wrote:
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >>
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> > Hi Jing,
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> >     Thanks for your
>> > > > > response.
>> > > > > > As
>> > > > > > > > > > stated
>> > > > > > > > > > > in
>> > > > > > > > > > > >> > the
>> > > > > > > > > > > >> > > > > FLIP,
>> > > > > > > > > > > >> > > > > > > the
>> > > > > > > > > > > >> > > > > > > > > > >> purpose
>> > > > > > > > > > > >> > > > > > > > > > >> > of
>> > > > > > > > > > > >> > > > > > > > > > >> > > > this
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> > FLIP is meant to
>> > support
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> > user-defined async
>> > table
>> > > > > > > function.
>> > > > > > > > > As
>> > > > > > > > > > > >> > described
>> > > > > > > > > > > >> > > > in
>> > > > > > > > > > > >> > > > > > > flink
>> > > > > > > > > > > >> > > > > > > > > > >> document
>> > > > > > > > > > > >> > > > > > > > > > >> > > [1]
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> >
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> > Async table
>> functions
>> > > are
>> > > > > > > special
>> > > > > > > > > > > >> functions
>> > > > > > > > > > > >> > for
>> > > > > > > > > > > >> > > > > table
>> > > > > > > > > > > >> > > > > > > > > sources
>> > > > > > > > > > > >> > > > > > > > > > >> that
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> perform
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> > > a lookup.
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> > >
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> >
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> > So end user can not
>> > > > directly
>> > > > > > > > define
>> > > > > > > > > > and
>> > > > > > > > > > > >> use
>> > > > > > > > > > > >> > > async
>> > > > > > > > > > > >> > > > > > table
>> > > > > > > > > > > >> > > > > > > > > > >> function
>> > > > > > > > > > > >> > > > > > > > > > >> > > now.
>> > > > > > > > > > > >> > > > > > > > > > >> > > > An
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> > user case is
>> reported
>> > in
>> > > > [2]
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> >
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> > So, in conclusion,
>> no
>> > > new
>> > > > > > > > interface
>> > > > > > > > > is
>> > > > > > > > > > > >> > > > introduced,
>> > > > > > > > > > > >> > > > > > but
>> > > > > > > > > > > >> > > > > > > we
>> > > > > > > > > > > >> > > > > > > > > > >> extend
>> > > > > > > > > > > >> > > > > > > > > > >> > the
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> > ability to support
>> > > > > > user-defined
>> > > > > > > > > async
>> > > > > > > > > > > >> table
>> > > > > > > > > > > >> > > > > function.
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> >
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> > [1]:
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> >
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> >
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >>
>> > > > > > > > > > > >> > > > > > > > > > >> > > >
>> > > > > > > > > > > >> > > > > > > > > > >> > >
>> > > > > > > > > > > >> > > > > > > > > > >> >
>> > > > > > > > > > > >> > > > > > > > > > >>
>> > > > > > > > > > > >> > > > > > > > > >
>> > > > > > > > > > > >> > > > > > > > >
>> > > > > > > > > > > >> > > > > > > >
>> > > > > > > > > > > >> > > > > > >
>> > > > > > > > > > > >> > > > > >
>> > > > > > > > > > > >> > > > >
>> > > > > > > > > > > >> > > >
>> > > > > > > > > > > >> > >
>> > > > > > > > > > > >> >
>> > > > > > > > > > > >>
>> > > > > > > > > > >
>> > > > > > > > > >
>> > > > > > > > >
>> > > > > > > >
>> > > > > > >
>> > > > > >
>> > > > >
>> > > >
>> > >
>> >
>> https://nightlies.apache.org/flink/flink-docs-release-1.17/docs/dev/table/functions/udfs/
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> > [2]:
>> > > > > > > > > > > >> > > > > > > > > > >> > >
>> > > > > > > > > > > >> > > > > > > >
>> > > > > > > > > > > >> >
>> > > > > > > >
>> > https://lists.apache.org/thread/qljwd40v5ntz6733cwcdr8s4z97b343b
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> >
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> > Thanks.
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> > Aitozi.
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> >
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> >
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> > Jing Ge
>> > > > > > > > <j...@ververica.com.invalid
>> > > > > > > > > >
>> > > > > > > > > > > >> > > > 于2023年5月27日周六
>> > > > > > > > > > > >> > > > > > > > > 06:40写道:
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> >
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> > > Hi Aitozi,
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> > >
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> > > Thanks for your
>> > > > proposal.
>> > > > > I
>> > > > > > am
>> > > > > > > > not
>> > > > > > > > > > > quite
>> > > > > > > > > > > >> > sure
>> > > > > > > > > > > >> > > > if
>> > > > > > > > > > > >> > > > > I
>> > > > > > > > > > > >> > > > > > > > > > understood
>> > > > > > > > > > > >> > > > > > > > > > >> > your
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> > thoughts
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> > > correctly. You
>> > > > described a
>> > > > > > > > special
>> > > > > > > > > > > case
>> > > > > > > > > > > >> > > > > > > implementation
>> > > > > > > > > > > >> > > > > > > > of
>> > > > > > > > > > > >> > > > > > > > > > the
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> > >
>> AsyncTableFunction
>> > > with
>> > > > on
>> > > > > > > > public
>> > > > > > > > > > API
>> > > > > > > > > > > >> > > changes.
>> > > > > > > > > > > >> > > > > > Would
>> > > > > > > > > > > >> > > > > > > > you
>> > > > > > > > > > > >> > > > > > > > > > >> please
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> elaborate
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> > > your purpose of
>> > > writing
>> > > > a
>> > > > > > FLIP
>> > > > > > > > > > > >> according to
>> > > > > > > > > > > >> > > the
>> > > > > > > > > > > >> > > > > > FLIP
>> > > > > > > > > > > >> > > > > > > > > > >> > > > documentation[1]?
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> > > Thanks!
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> > >
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> > > [1]
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> > >
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> > >
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> >
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >>
>> > > > > > > > > > > >> > > > > > > > > > >> > > >
>> > > > > > > > > > > >> > > > > > > > > > >> > >
>> > > > > > > > > > > >> > > > > > > > > > >> >
>> > > > > > > > > > > >> > > > > > > > > > >>
>> > > > > > > > > > > >> > > > > > > > > >
>> > > > > > > > > > > >> > > > > > > > >
>> > > > > > > > > > > >> > > > > > > >
>> > > > > > > > > > > >> > > > > > >
>> > > > > > > > > > > >> > > > > >
>> > > > > > > > > > > >> > > > >
>> > > > > > > > > > > >> > > >
>> > > > > > > > > > > >> > >
>> > > > > > > > > > > >> >
>> > > > > > > > > > > >>
>> > > > > > > > > > >
>> > > > > > > > > >
>> > > > > > > > >
>> > > > > > > >
>> > > > > > >
>> > > > > >
>> > > > >
>> > > >
>> > >
>> >
>> https://cwiki.apache.org/confluence/display/FLINK/Flink+Improvement+Proposals
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> > >
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> > > Best regards,
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> > > Jing
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> > >
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> > > On Wed, May 24,
>> 2023
>> > > at
>> > > > > > > 1:07 PM
>> > > > > > > > > > > Aitozi <
>> > > > > > > > > > > >> > > > > > > > > > gjying1...@gmail.com
>> > > > > > > > > > > >> > > > > > > > > > >> >
>> > > > > > > > > > > >> > > > > > > > > > >> > > > wrote:
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> > >
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> > > > May I ask for
>> some
>> > > > > > feedback
>> > > > > > > > :D
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> > > >
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> > > > Thanks,
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> > > > Aitozi
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> > > >
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> > > > Aitozi <
>> > > > > > > gjying1...@gmail.com>
>> > > > > > > > > > > >> > > 于2023年5月23日周二
>> > > > > > > > > > > >> > > > > > > 19:14写道:
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> > > > >
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> > > > > Just catch an
>> > user
>> > > > > case
>> > > > > > > > report
>> > > > > > > > > > > from
>> > > > > > > > > > > >> > > Giannis
>> > > > > > > > > > > >> > > > > > > Polyzos
>> > > > > > > > > > > >> > > > > > > > > for
>> > > > > > > > > > > >> > > > > > > > > > >> this
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> usage:
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> > > > >
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> > > > >
>> > > > > > > > > > > >> > > > > > > > > > >> > > >
>> > > > > > > > > > > >> > > > > > > > >
>> > > > > > > > > > > >> > >
>> > > > > > > > >
>> > > https://lists.apache.org/thread/qljwd40v5ntz6733cwcdr8s4z97b343b
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> > > > >
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> > > > > Aitozi <
>> > > > > > > > gjying1...@gmail.com>
>> > > > > > > > > > > >> > > > 于2023年5月23日周二
>> > > > > > > > > > > >> > > > > > > > 17:45写道:
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> > > > > >
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> > > > > > Hi guys,
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> > > > > >     I want
>> to
>> > > > bring
>> > > > > > up a
>> > > > > > > > > > > >> discussion
>> > > > > > > > > > > >> > > about
>> > > > > > > > > > > >> > > > > > > adding
>> > > > > > > > > > > >> > > > > > > > > > >> support
>> > > > > > > > > > > >> > > > > > > > > > >> > of
>> > > > > > > > > > > >> > > > > > > > > > >> > > > User
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> > > > > > Defined
>> > > > > > > AsyncTableFunction
>> > > > > > > > > in
>> > > > > > > > > > > >> Flink.
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> > > > > > Currently,
>> > async
>> > > > > table
>> > > > > > > > > > function
>> > > > > > > > > > > >> are
>> > > > > > > > > > > >> > > > special
>> > > > > > > > > > > >> > > > > > > > > functions
>> > > > > > > > > > > >> > > > > > > > > > >> for
>> > > > > > > > > > > >> > > > > > > > > > >> > > > table
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> > > source
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> > > > > > to perform
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> > > > > > async
>> lookup.
>> > > > > However,
>> > > > > > > > it's
>> > > > > > > > > > > worth
>> > > > > > > > > > > >> to
>> > > > > > > > > > > >> > > > > support
>> > > > > > > > > > > >> > > > > > > the
>> > > > > > > > > > > >> > > > > > > > > user
>> > > > > > > > > > > >> > > > > > > > > > >> > > defined
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> async
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> > > > > > table
>> > function.
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> > > > > > Because, in
>> > this
>> > > > > way,
>> > > > > > > the
>> > > > > > > > > end
>> > > > > > > > > > > SQL
>> > > > > > > > > > > >> > user
>> > > > > > > > > > > >> > > > can
>> > > > > > > > > > > >> > > > > > > > leverage
>> > > > > > > > > > > >> > > > > > > > > > it
>> > > > > > > > > > > >> > > > > > > > > > >> to
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> perform
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> > the
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> > > > > > async
>> > operation
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> > > > > > which is
>> > useful
>> > > to
>> > > > > > > maximum
>> > > > > > > > > the
>> > > > > > > > > > > >> system
>> > > > > > > > > > > >> > > > > > > throughput
>> > > > > > > > > > > >> > > > > > > > > > >> > especially
>> > > > > > > > > > > >> > > > > > > > > > >> > > > for
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> IO
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> > > > > > bottleneck
>> > case.
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> > > > > >
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> > > > > > You can
>> find
>> > > some
>> > > > > more
>> > > > > > > > > detail
>> > > > > > > > > > in
>> > > > > > > > > > > >> [1].
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> > > > > >
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> > > > > > Looking
>> > forward
>> > > to
>> > > > > > > > feedback
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> > > > > >
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> > > > > >
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> > > > > > [1]:
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> > > >
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> > >
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> >
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >>
>> > > > > > > > > > > >> > > > > > > > > > >> > > >
>> > > > > > > > > > > >> > > > > > > > > > >> > >
>> > > > > > > > > > > >> > > > > > > > > > >> >
>> > > > > > > > > > > >> > > > > > > > > > >>
>> > > > > > > > > > > >> > > > > > > > > >
>> > > > > > > > > > > >> > > > > > > > >
>> > > > > > > > > > > >> > > > > > > >
>> > > > > > > > > > > >> > > > > > >
>> > > > > > > > > > > >> > > > > >
>> > > > > > > > > > > >> > > > >
>> > > > > > > > > > > >> > > >
>> > > > > > > > > > > >> > >
>> > > > > > > > > > > >> >
>> > > > > > > > > > > >>
>> > > > > > > > > > >
>> > > > > > > > > >
>> > > > > > > > >
>> > > > > > > >
>> > > > > > >
>> > > > > >
>> > > > >
>> > > >
>> > >
>> >
>> https://cwiki.apache.org/confluence/display/FLINK/%5BFLIP-313%5D+Add+support+of+User+Defined+AsyncTableFunction
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> > > > > >
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> > > > > > Thanks,
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> > > > > > Aitozi.
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> > > >
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> > >
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >> >
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >>
>> > > > > > > > > > > >> > > > > > > > > > >> > > > >
>> > > > > > > > > > > >> > > > > > > > > > >> > > >
>> > > > > > > > > > > >> > > > > > > > > > >> > >
>> > > > > > > > > > > >> > > > > > > > > > >> >
>> > > > > > > > > > > >> > > > > > > > > > >>
>> > > > > > > > > > > >> > > > > > > > > > >
>> > > > > > > > > > > >> > > > > > > > > >
>> > > > > > > > > > > >> > > > > > > > >
>> > > > > > > > > > > >> > > > > > > >
>> > > > > > > > > > > >> > > > > > >
>> > > > > > > > > > > >> > > > > >
>> > > > > > > > > > > >> > > > >
>> > > > > > > > > > > >> > > >
>> > > > > > > > > > > >> > >
>> > > > > > > > > > > >> >
>> > > > > > > > > > > >>
>> > > > > > > > > > > >
>> > > > > > > > > > >
>> > > > > > > > > >
>> > > > > > > > >
>> > > > > > > >
>> > > > > > >
>> > > > > >
>> > > > >
>> > > >
>> > >
>> >
>>
>

Reply via email to