Re: 如何实现event triggered window?

2021-11-23 文章 tison
如果就是要 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=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?

2021-11-22 文章 Tony Wei
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=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?

2021-11-22 文章 tison
如果你是想每时每刻(实际上开销很大,假设是每 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=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?

2021-11-22 文章 tison
你的理解里就是必须整点对齐嘛,那其实是可以加个 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=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?

2021-11-22 文章 yidan zhao
哦哦,懂了,那还有另一个问题。你什么时候需要知道呢?
是只有半小时时刻吗,还是随时随刻都可能,如果是随时随刻都希望能拿到过去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=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?

2021-11-22 文章 tison
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=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?

2021-11-22 文章 Pinjie Huang
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=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?

2021-11-22 文章 yidan zhao
其实问题还是没描述清楚,所以遇到问题究竟是啥,没发现tumbling window不行。

zhiyuan su  于2021年11月22日周一 下午4:59写道:

> 感觉你的场景是近实时累计统计,你可以参考下window TVF 看下是否满足
>
> https://flink-learning.org.cn/article/detail/a8b0895d4271bf6b770927eea214612d?tab=SQL=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?

2021-11-22 文章 zhiyuan su
感觉你的场景是近实时累计统计,你可以参考下window TVF 看下是否满足
https://flink-learning.org.cn/article/detail/a8b0895d4271bf6b770927eea214612d?tab=SQL=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?
>