Hi Fabian,

thanks for proposing this FLIP. I agree that this join is super common, after talking to many people at conferences, I could imagine it will be one of the most used kinds of joins going forward.

Tightly coupling it with watermarks fits both from a semantical point of view but also with other efforts such as FLIP-558 (Improvements to SinkUpsertMaterializer and changelog disorder) [1]. In the near future, we should work on more automated watermarking to power these watermark-based operators, but this is an orthogonal effort.

Overall I'm strongly +1 on this. Also +1 on the syntax improvements for lateral table functions by dropping the TABLE() wrapper.

Cheers,
Timo

[1] https://cwiki.apache.org/confluence/display/FLINK/FLIP-558%3A+Improvements+to+SinkUpsertMaterializer+and+changelog+disorder

On 18.05.26 11:47, Gustavo de Morais wrote:
Hi Fabian,

In general a strong +1 for the feature, without getting into the details of
the FLIP yet. This is a missing feature for years and I'm happy that we're
putting the time to address this - while also getting rid of some of the
hard restrictions we had. Thanks!

Kind regards,
Gustavo

On Fri, 15 May 2026 at 16:39, Fabian Hueske <[email protected]> wrote:

Hi everyone,

I'd like to start a discussion on FLIP-579: LATERAL SNAPSHOT Join [1].

Enriching a stream with data from a (slowly changing) dynamic table is a
super common use case.
Flink SQL features Temporal Joins [2] to address these use cases.
However, SQL users can only use the event-time variant which has many
limitations (heavy dependency on frequent WM updates on both inputs,
build-side table requires a PK, the join predicate must include the
build-side PK, etc).
The processing-time temporal join is disabled (due to build-side
initialization issues [3]) and temporal table function joins are
only available in Table API.

FLIP-579 proposes a new temporal join operator that operates in
processing-time and addresses the limitations of the existing
implementations:
* initialization of the build-side before joining
* no requirement of continuous, frequent build-side WMs (after the
initialization completed)
* no requirement for a PK on the build-side
* table function-based syntax [4] via a built-in SNAPSHOT function
(proposed in FLIP-517 [4])

Looking forward to your feedback.

Best,
Fabian

[1]

https://cwiki.apache.org/confluence/display/FLINK/FLIP-579%3A+LATERAL+SNAPSHOT+Join
[2]

https://nightlies.apache.org/flink/flink-docs-stable/docs/dev/table/sql/queries/joins/#temporal-joins
[3] https://issues.apache.org/jira/browse/FLINK-19830
[4]

https://nightlies.apache.org/flink/flink-docs-stable/docs/dev/table/sql/queries/joins/#temporal-table-function-join
[5]

https://cwiki.apache.org/confluence/display/FLINK/FLIP-517%3A+Better+Handling+of+Dynamic+Table+Primitives+with+PTFs#FLIP517:BetterHandlingofDynamicTablePrimitiveswithPTFs-SNAPSHOTfortemporaljoins



Reply via email to