Re: 如何实现event triggered window?
如果就是要 Event Trigger 那就是传统意义上的 Sliding Windows (Flink 的滑动窗口其实是 Hopping Window),这个确实是 OVER AGG 能搞定的 =。= Best, tison. Tony Wei 于2021年11月23日周二 下午2:06写道: > Hi Pinjie, > > 如果是需要 event triggered 的累計統計更新的話,可以考慮使用 SQL over aggregation > [1]。例如文件中提供的如下範例,計算當前 row 往前一小時內的加總結果。 > > > SELECT order_id, order_time, amount, > > SUM(amount) OVER ( > > PARTITION BY product > > ORDER BY order_time > > RANGE BETWEEN INTERVAL '1' HOUR PRECEDING AND CURRENT ROW > > ) AS one_hour_prod_amount_sumFROM Orders > > > > 但是這種作法只能根據收到的事件來觸發,無法根據處理時間。換句話說,如果 t=X 沒有數據進來的話,就不會有 t=(X-1) ~ X > 的累計統計輸出。 > 考慮更複雜的情況需要結合事件和處理時間來觸發的話,需要透過 Process Function API 或者用 DataStream API 自定義 > Trigger 的方式實現。 > > best regards, > > [1] > > https://nightlies.apache.org/flink/flink-docs-master/docs/dev/table/sql/queries/over-agg/ > > tison 於 2021年11月23日 週二 下午2:03寫道: > > > 如果你是想每时每刻(实际上开销很大,假设是每 1 分钟),那就用 Sliding Window > > > > Best, > > tison. > > > > > > tison 于2021年11月23日周二 下午2:00写道: > > > > > 你的理解里就是必须整点对齐嘛,那其实是可以加个 offset 不整点对齐的捏。 > > > > > > Best, > > > tison. > > > > > > > > > tison 于2021年11月23日周二 下午1:59写道: > > > > > >> > > >> > > > https://nightlies.apache.org/flink/flink-docs-release-1.14/docs/dev/table/sql/queries/window-tvf/ > > >> > > >> 你可以关注一下这里有个 offset 参数,这样就能用 tumbling window 了 =。= > > >> > > >> Best, > > >> tison. > > >> > > >> > > >> Pinjie Huang 于2021年11月23日周二 > > 下午1:18写道: > > >> > > >>> Hi Yidan, > > >>> > > >>> Tumbling window 只有 > > >>> t=0~1h > > >>> t=1~2h > > >>> 等等的window > > >>> > > >>> 我现在需要在 t=X 时刻,得到 t=(X-1) ~ X 的window 比如 > > >>> t=1.5h 时刻 我需要 t=0.5~1.5h 这个window > > >>> > > >>> On Tue, Nov 23, 2021 at 12:32 PM yidan zhao > > wrote: > > >>> > > >>> > 其实问题还是没描述清楚,所以遇到问题究竟是啥,没发现tumbling window不行。 > > >>> > > > >>> > zhiyuan su 于2021年11月22日周一 下午4:59写道: > > >>> > > > >>> > > 感觉你的场景是近实时累计统计,你可以参考下window TVF 看下是否满足 > > >>> > > > > >>> > > > > >>> > > > >>> > > > https://flink-learning.org.cn/article/detail/a8b0895d4271bf6b770927eea214612d?tab=SQL&page=1 > > >>> > > 具体在第2章第一节 > > >>> > > > > >>> > > Pinjie Huang 于2021年11月22日周一 > > >>> > 下午3:52写道: > > >>> > > > > >>> > > > Hi friends, > > >>> > > > > > >>> > > > Flink 自带的window 有tumlbing sliding 和 session 但是似乎没有event > > triggerred。 > > >>> > > > > > >>> > > > 比如说 想知道过去1小时event A trigger的次数, > > >>> > > > > > >>> > > > 如果使用tumbling window和1h window > > >>> > > > |1h | 1h | > > >>> > > > t=0 > > >>> > > > 在t=1.5h时刻,读取数据,是t=1h 时刻过去一小时的数据,而不是实时的。 > > >>> > > > > > >>> > > > 使用sliding window 的话需要define非常小的slide,而且依旧可能有延迟。 > > >>> > > > > > >>> > > > 如果想知道实时的数据,需要基于event来更新state,如何实现event triggered window? > > >>> > > > > > >>> > > > > >>> > > > >>> > > >>> > > >>> -- > > >>> Thanks, > > >>> Pinjie Huang > > >>> > > >> > > >
Re: 如何实现event triggered window?
Hi Pinjie, 如果是需要 event triggered 的累計統計更新的話,可以考慮使用 SQL over aggregation [1]。例如文件中提供的如下範例,計算當前 row 往前一小時內的加總結果。 > SELECT order_id, order_time, amount, > SUM(amount) OVER ( > PARTITION BY product > ORDER BY order_time > RANGE BETWEEN INTERVAL '1' HOUR PRECEDING AND CURRENT ROW > ) AS one_hour_prod_amount_sumFROM Orders > > 但是這種作法只能根據收到的事件來觸發,無法根據處理時間。換句話說,如果 t=X 沒有數據進來的話,就不會有 t=(X-1) ~ X 的累計統計輸出。 考慮更複雜的情況需要結合事件和處理時間來觸發的話,需要透過 Process Function API 或者用 DataStream API 自定義 Trigger 的方式實現。 best regards, [1] https://nightlies.apache.org/flink/flink-docs-master/docs/dev/table/sql/queries/over-agg/ tison 於 2021年11月23日 週二 下午2:03寫道: > 如果你是想每时每刻(实际上开销很大,假设是每 1 分钟),那就用 Sliding Window > > Best, > tison. > > > tison 于2021年11月23日周二 下午2:00写道: > > > 你的理解里就是必须整点对齐嘛,那其实是可以加个 offset 不整点对齐的捏。 > > > > Best, > > tison. > > > > > > tison 于2021年11月23日周二 下午1:59写道: > > > >> > >> > https://nightlies.apache.org/flink/flink-docs-release-1.14/docs/dev/table/sql/queries/window-tvf/ > >> > >> 你可以关注一下这里有个 offset 参数,这样就能用 tumbling window 了 =。= > >> > >> Best, > >> tison. > >> > >> > >> Pinjie Huang 于2021年11月23日周二 > 下午1:18写道: > >> > >>> Hi Yidan, > >>> > >>> Tumbling window 只有 > >>> t=0~1h > >>> t=1~2h > >>> 等等的window > >>> > >>> 我现在需要在 t=X 时刻,得到 t=(X-1) ~ X 的window 比如 > >>> t=1.5h 时刻 我需要 t=0.5~1.5h 这个window > >>> > >>> On Tue, Nov 23, 2021 at 12:32 PM yidan zhao > wrote: > >>> > >>> > 其实问题还是没描述清楚,所以遇到问题究竟是啥,没发现tumbling window不行。 > >>> > > >>> > zhiyuan su 于2021年11月22日周一 下午4:59写道: > >>> > > >>> > > 感觉你的场景是近实时累计统计,你可以参考下window TVF 看下是否满足 > >>> > > > >>> > > > >>> > > >>> > https://flink-learning.org.cn/article/detail/a8b0895d4271bf6b770927eea214612d?tab=SQL&page=1 > >>> > > 具体在第2章第一节 > >>> > > > >>> > > Pinjie Huang 于2021年11月22日周一 > >>> > 下午3:52写道: > >>> > > > >>> > > > Hi friends, > >>> > > > > >>> > > > Flink 自带的window 有tumlbing sliding 和 session 但是似乎没有event > triggerred。 > >>> > > > > >>> > > > 比如说 想知道过去1小时event A trigger的次数, > >>> > > > > >>> > > > 如果使用tumbling window和1h window > >>> > > > |1h | 1h | > >>> > > > t=0 > >>> > > > 在t=1.5h时刻,读取数据,是t=1h 时刻过去一小时的数据,而不是实时的。 > >>> > > > > >>> > > > 使用sliding window 的话需要define非常小的slide,而且依旧可能有延迟。 > >>> > > > > >>> > > > 如果想知道实时的数据,需要基于event来更新state,如何实现event triggered window? > >>> > > > > >>> > > > >>> > > >>> > >>> > >>> -- > >>> Thanks, > >>> Pinjie Huang > >>> > >> >
Re: 如何实现event triggered window?
如果你是想每时每刻(实际上开销很大,假设是每 1 分钟),那就用 Sliding Window Best, tison. tison 于2021年11月23日周二 下午2:00写道: > 你的理解里就是必须整点对齐嘛,那其实是可以加个 offset 不整点对齐的捏。 > > Best, > tison. > > > tison 于2021年11月23日周二 下午1:59写道: > >> >> https://nightlies.apache.org/flink/flink-docs-release-1.14/docs/dev/table/sql/queries/window-tvf/ >> >> 你可以关注一下这里有个 offset 参数,这样就能用 tumbling window 了 =。= >> >> Best, >> tison. >> >> >> Pinjie Huang 于2021年11月23日周二 下午1:18写道: >> >>> Hi Yidan, >>> >>> Tumbling window 只有 >>> t=0~1h >>> t=1~2h >>> 等等的window >>> >>> 我现在需要在 t=X 时刻,得到 t=(X-1) ~ X 的window 比如 >>> t=1.5h 时刻 我需要 t=0.5~1.5h 这个window >>> >>> On Tue, Nov 23, 2021 at 12:32 PM yidan zhao wrote: >>> >>> > 其实问题还是没描述清楚,所以遇到问题究竟是啥,没发现tumbling window不行。 >>> > >>> > zhiyuan su 于2021年11月22日周一 下午4:59写道: >>> > >>> > > 感觉你的场景是近实时累计统计,你可以参考下window TVF 看下是否满足 >>> > > >>> > > >>> > >>> https://flink-learning.org.cn/article/detail/a8b0895d4271bf6b770927eea214612d?tab=SQL&page=1 >>> > > 具体在第2章第一节 >>> > > >>> > > Pinjie Huang 于2021年11月22日周一 >>> > 下午3:52写道: >>> > > >>> > > > Hi friends, >>> > > > >>> > > > Flink 自带的window 有tumlbing sliding 和 session 但是似乎没有event triggerred。 >>> > > > >>> > > > 比如说 想知道过去1小时event A trigger的次数, >>> > > > >>> > > > 如果使用tumbling window和1h window >>> > > > |1h | 1h | >>> > > > t=0 >>> > > > 在t=1.5h时刻,读取数据,是t=1h 时刻过去一小时的数据,而不是实时的。 >>> > > > >>> > > > 使用sliding window 的话需要define非常小的slide,而且依旧可能有延迟。 >>> > > > >>> > > > 如果想知道实时的数据,需要基于event来更新state,如何实现event triggered window? >>> > > > >>> > > >>> > >>> >>> >>> -- >>> Thanks, >>> Pinjie Huang >>> >>
Re: 如何实现event triggered window?
你的理解里就是必须整点对齐嘛,那其实是可以加个 offset 不整点对齐的捏。 Best, tison. tison 于2021年11月23日周二 下午1:59写道: > > https://nightlies.apache.org/flink/flink-docs-release-1.14/docs/dev/table/sql/queries/window-tvf/ > > 你可以关注一下这里有个 offset 参数,这样就能用 tumbling window 了 =。= > > Best, > tison. > > > Pinjie Huang 于2021年11月23日周二 下午1:18写道: > >> Hi Yidan, >> >> Tumbling window 只有 >> t=0~1h >> t=1~2h >> 等等的window >> >> 我现在需要在 t=X 时刻,得到 t=(X-1) ~ X 的window 比如 >> t=1.5h 时刻 我需要 t=0.5~1.5h 这个window >> >> On Tue, Nov 23, 2021 at 12:32 PM yidan zhao wrote: >> >> > 其实问题还是没描述清楚,所以遇到问题究竟是啥,没发现tumbling window不行。 >> > >> > zhiyuan su 于2021年11月22日周一 下午4:59写道: >> > >> > > 感觉你的场景是近实时累计统计,你可以参考下window TVF 看下是否满足 >> > > >> > > >> > >> https://flink-learning.org.cn/article/detail/a8b0895d4271bf6b770927eea214612d?tab=SQL&page=1 >> > > 具体在第2章第一节 >> > > >> > > Pinjie Huang 于2021年11月22日周一 >> > 下午3:52写道: >> > > >> > > > Hi friends, >> > > > >> > > > Flink 自带的window 有tumlbing sliding 和 session 但是似乎没有event triggerred。 >> > > > >> > > > 比如说 想知道过去1小时event A trigger的次数, >> > > > >> > > > 如果使用tumbling window和1h window >> > > > |1h | 1h | >> > > > t=0 >> > > > 在t=1.5h时刻,读取数据,是t=1h 时刻过去一小时的数据,而不是实时的。 >> > > > >> > > > 使用sliding window 的话需要define非常小的slide,而且依旧可能有延迟。 >> > > > >> > > > 如果想知道实时的数据,需要基于event来更新state,如何实现event triggered window? >> > > > >> > > >> > >> >> >> -- >> Thanks, >> Pinjie Huang >> >
Re: 如何实现event triggered window?
哦哦,懂了,那还有另一个问题。你什么时候需要知道呢? 是只有半小时时刻吗,还是随时随刻都可能,如果是随时随刻都希望能拿到过去1h,这个本身就没意义,比如1s分成1000ms,每个ms你都希望拿到过去1h的数据,只能按照sliding window做,而且这个性能消耗很高,取决于你究竟多久需要拿到一次。 如果你只是固定的不希望用0-1,1-2,而是需要0.5-1.5,1.5-2.5这样的话使用offset就可以实现。 Pinjie Huang 于2021年11月23日周二 下午1:18写道: > Hi Yidan, > > Tumbling window 只有 > t=0~1h > t=1~2h > 等等的window > > 我现在需要在 t=X 时刻,得到 t=(X-1) ~ X 的window 比如 > t=1.5h 时刻 我需要 t=0.5~1.5h 这个window > > On Tue, Nov 23, 2021 at 12:32 PM yidan zhao wrote: > > > 其实问题还是没描述清楚,所以遇到问题究竟是啥,没发现tumbling window不行。 > > > > zhiyuan su 于2021年11月22日周一 下午4:59写道: > > > > > 感觉你的场景是近实时累计统计,你可以参考下window TVF 看下是否满足 > > > > > > > > > https://flink-learning.org.cn/article/detail/a8b0895d4271bf6b770927eea214612d?tab=SQL&page=1 > > > 具体在第2章第一节 > > > > > > Pinjie Huang 于2021年11月22日周一 > > 下午3:52写道: > > > > > > > Hi friends, > > > > > > > > Flink 自带的window 有tumlbing sliding 和 session 但是似乎没有event triggerred。 > > > > > > > > 比如说 想知道过去1小时event A trigger的次数, > > > > > > > > 如果使用tumbling window和1h window > > > > |1h | 1h | > > > > t=0 > > > > 在t=1.5h时刻,读取数据,是t=1h 时刻过去一小时的数据,而不是实时的。 > > > > > > > > 使用sliding window 的话需要define非常小的slide,而且依旧可能有延迟。 > > > > > > > > 如果想知道实时的数据,需要基于event来更新state,如何实现event triggered window? > > > > > > > > > > > > -- > Thanks, > Pinjie Huang >
Re: 如何实现event triggered window?
https://nightlies.apache.org/flink/flink-docs-release-1.14/docs/dev/table/sql/queries/window-tvf/ 你可以关注一下这里有个 offset 参数,这样就能用 tumbling window 了 =。= Best, tison. Pinjie Huang 于2021年11月23日周二 下午1:18写道: > Hi Yidan, > > Tumbling window 只有 > t=0~1h > t=1~2h > 等等的window > > 我现在需要在 t=X 时刻,得到 t=(X-1) ~ X 的window 比如 > t=1.5h 时刻 我需要 t=0.5~1.5h 这个window > > On Tue, Nov 23, 2021 at 12:32 PM yidan zhao wrote: > > > 其实问题还是没描述清楚,所以遇到问题究竟是啥,没发现tumbling window不行。 > > > > zhiyuan su 于2021年11月22日周一 下午4:59写道: > > > > > 感觉你的场景是近实时累计统计,你可以参考下window TVF 看下是否满足 > > > > > > > > > https://flink-learning.org.cn/article/detail/a8b0895d4271bf6b770927eea214612d?tab=SQL&page=1 > > > 具体在第2章第一节 > > > > > > Pinjie Huang 于2021年11月22日周一 > > 下午3:52写道: > > > > > > > Hi friends, > > > > > > > > Flink 自带的window 有tumlbing sliding 和 session 但是似乎没有event triggerred。 > > > > > > > > 比如说 想知道过去1小时event A trigger的次数, > > > > > > > > 如果使用tumbling window和1h window > > > > |1h | 1h | > > > > t=0 > > > > 在t=1.5h时刻,读取数据,是t=1h 时刻过去一小时的数据,而不是实时的。 > > > > > > > > 使用sliding window 的话需要define非常小的slide,而且依旧可能有延迟。 > > > > > > > > 如果想知道实时的数据,需要基于event来更新state,如何实现event triggered window? > > > > > > > > > > > > -- > Thanks, > Pinjie Huang >
Re: 如何实现event triggered window?
Hi Yidan, Tumbling window 只有 t=0~1h t=1~2h 等等的window 我现在需要在 t=X 时刻,得到 t=(X-1) ~ X 的window 比如 t=1.5h 时刻 我需要 t=0.5~1.5h 这个window On Tue, Nov 23, 2021 at 12:32 PM yidan zhao wrote: > 其实问题还是没描述清楚,所以遇到问题究竟是啥,没发现tumbling window不行。 > > zhiyuan su 于2021年11月22日周一 下午4:59写道: > > > 感觉你的场景是近实时累计统计,你可以参考下window TVF 看下是否满足 > > > > > https://flink-learning.org.cn/article/detail/a8b0895d4271bf6b770927eea214612d?tab=SQL&page=1 > > 具体在第2章第一节 > > > > Pinjie Huang 于2021年11月22日周一 > 下午3:52写道: > > > > > Hi friends, > > > > > > Flink 自带的window 有tumlbing sliding 和 session 但是似乎没有event triggerred。 > > > > > > 比如说 想知道过去1小时event A trigger的次数, > > > > > > 如果使用tumbling window和1h window > > > |1h | 1h | > > > t=0 > > > 在t=1.5h时刻,读取数据,是t=1h 时刻过去一小时的数据,而不是实时的。 > > > > > > 使用sliding window 的话需要define非常小的slide,而且依旧可能有延迟。 > > > > > > 如果想知道实时的数据,需要基于event来更新state,如何实现event triggered window? > > > > > > -- Thanks, Pinjie Huang
Re: 如何实现event triggered window?
其实问题还是没描述清楚,所以遇到问题究竟是啥,没发现tumbling window不行。 zhiyuan su 于2021年11月22日周一 下午4:59写道: > 感觉你的场景是近实时累计统计,你可以参考下window TVF 看下是否满足 > > https://flink-learning.org.cn/article/detail/a8b0895d4271bf6b770927eea214612d?tab=SQL&page=1 > 具体在第2章第一节 > > Pinjie Huang 于2021年11月22日周一 下午3:52写道: > > > Hi friends, > > > > Flink 自带的window 有tumlbing sliding 和 session 但是似乎没有event triggerred。 > > > > 比如说 想知道过去1小时event A trigger的次数, > > > > 如果使用tumbling window和1h window > > |1h | 1h | > > t=0 > > 在t=1.5h时刻,读取数据,是t=1h 时刻过去一小时的数据,而不是实时的。 > > > > 使用sliding window 的话需要define非常小的slide,而且依旧可能有延迟。 > > > > 如果想知道实时的数据,需要基于event来更新state,如何实现event triggered window? > > >
Re: 如何实现event triggered window?
感觉你的场景是近实时累计统计,你可以参考下window TVF 看下是否满足 https://flink-learning.org.cn/article/detail/a8b0895d4271bf6b770927eea214612d?tab=SQL&page=1 具体在第2章第一节 Pinjie Huang 于2021年11月22日周一 下午3:52写道: > Hi friends, > > Flink 自带的window 有tumlbing sliding 和 session 但是似乎没有event triggerred。 > > 比如说 想知道过去1小时event A trigger的次数, > > 如果使用tumbling window和1h window > |1h | 1h | > t=0 > 在t=1.5h时刻,读取数据,是t=1h 时刻过去一小时的数据,而不是实时的。 > > 使用sliding window 的话需要define非常小的slide,而且依旧可能有延迟。 > > 如果想知道实时的数据,需要基于event来更新state,如何实现event triggered window? >
如何实现event triggered window?
Hi friends, Flink 自带的window 有tumlbing sliding 和 session 但是似乎没有event triggerred。 比如说 想知道过去1小时event A trigger的次数, 如果使用tumbling window和1h window |1h | 1h | t=0 在t=1.5h时刻,读取数据,是t=1h 时刻过去一小时的数据,而不是实时的。 使用sliding window 的话需要define非常小的slide,而且依旧可能有延迟。 如果想知道实时的数据,需要基于event来更新state,如何实现event triggered window?