Thank you for your reply @Leonard

Firstly the example result is a little strange for me too, the print
> window_time looks incorrect, Could you post your entire example especially
> your session time zone?


You can modify any of the tests in WindowAggregateITCase[1], e.g.
testEventTimeTumbleWindow:

  @TestTemplate
  def testEventTimeTumbleWindow(): Unit = {
    val sql =
      """
        |SELECT
        |  `name`,
        |  window_start,
        |  window_end,
        |  window_time,
        |  COUNT(*),
        |  SUM(`bigdec`),
        |  MAX(`double`),
        |  MIN(`float`),
        |  COUNT(DISTINCT `string`),
        |  concat_distinct_agg(`string`)
        |FROM TABLE(
        |   TUMBLE(TABLE T1, DESCRIPTOR(rowtime), INTERVAL '5' SECOND))
        |GROUP BY `name`, window_start, window_end, window_time
      """.stripMargin

    val sink = new TestingAppendSink
    tEnv.sqlQuery(sql).toDataStream.addSink(sink)
    env.execute()
  }

and you get the misleading results for timestamp_ltz:


a,2020-10-10T00:00,2020-10-10T00:00:05,2020-10-09T16:00:04.999Z,4,11.10,5.0,1.0,2,Hi|Comment#1

a,2020-10-10T00:00:05,2020-10-10T00:00:10,2020-10-09T16:00:09.999Z,1,3.33,null,3.0,1,Comment#2

b,2020-10-10T00:00:05,2020-10-10T00:00:10,2020-10-09T16:00:09.999Z,2,6.66,6.0,3.0,2,Hello|Hi

b,2020-10-10T00:00:15,2020-10-10T00:00:20,2020-10-09T16:00:19.999Z,1,4.44,4.0,4.0,1,Hi

b,2020-10-10T00:00:30,2020-10-10T00:00:35,2020-10-09T16:00:34.999Z,1,3.33,3.0,3.0,1,Comment#3

null,2020-10-10T00:00:30,2020-10-10T00:00:35,2020-10-09T16:00:34.999Z,1,7.77,7.0,7.0,0,null

We aims to address window correctness issue in DST timezone, there’re
> detailed explanation in CALCITE-4563.


Could you please explain that a bit more? I don't understand the problem.
>From my point of view, the problem you're describing there originates
exactly from the fact that we mix up TIMESTAMP_LTZ with TIMESTAMP. The way
I see it is that we want to put TIMESTAMP_LTZ into the windows of TIMESTAMP
type. TIMESTAMP_LTZ has Instant semantics, and as such I don't really
understand how DST comes to play there. Instant clearly identifies a point
in time and thus should be nicely grouped into equal windows.

What you're describing in the linked JIRA, in my opinion, is that you have
a TIMESTAMP_LTZ time attribute (instant semantics), but you want to group
by wall clock semantics (TIMESTAMP). I think this should be achieved, if
necessary, by first casting the time attribute to TIMESTAMP and then
performing the grouping. The casting would already take care of the DST
shift.

I still believe that window_start, window_end and window_time should return
the same type based on the input time attribute type.

Happy to hear your thoughts.

Best,
Dawid

On Fri, 8 Nov 2024 at 08:21, Leonard Xu <xbjt...@gmail.com> wrote:

> Thanks Dawid for bringing this ticket to dev mailing list and Timo’s
> kindly ping.
>
> Firstly the example result is a little strange for me too, the print
> window_time looks incorrect, Could you post your entire example especially
> your session time zone?
>
> Back to the window_start/end return type, both window TVF and legacy
> SqlGroupedWindowFunction share same return type TIMESTAMP which means
> timestamp literal, and it’s by design. We aims to address window
> correctness issue in DST timezone, there’re detailed explanation in
> CALCITE-4563.
>
>
> Best,
> Leonard
>
> [1]https://issues.apache.org/jira/browse/CALCITE-4563
>
>
>
> >> I wanted to bring your attention to FLINK-36665[1].
> >> I believe the current behaviour is confusing and I'd like to fix it.
> >> However, since window operations are a very important feature I'd like
> to
> >> gather feedback on to what extent we should keep backwards
> compatibility.
> >>    1. How should newly submitted queries behave? Are we fine with
> changing
> >>    the inference of these functions or would you prefer to have a
> feature flag
> >>    that would let us revert to the old inference logic? My preference
> would be
> >>    to simply change the inference. The current behaviour is very
> confusing and
> >>    I'd keep the behaviour for restored queries (see 2.)
> >>    2. My plan for migrated queries (queries restored from a compiled
> plan)
> >>    is that they won't be impacted. They'll keep producing the same
> results. We
> >>    have the output types serialized in the compiled plan which we can
> use to
> >>    produce the same type as before.
> >> What do you think?
> >> Best,
> >> Dawid
> >> [1] https://issues.apache.org/jira/browse/FLINK-36665
> >
>
>

Reply via email to