Hi,
I'm sorry but I still think this is not possible. Windows are usually
associated with a key, so if there is no element to which we can assign a
window then there is also no key to which the window would belong.

Cheers,
Aljoscha

On Thu, 21 Apr 2016 at 22:35 Maxim <mfat...@gmail.com> wrote:

> I think the best way to support such a feature is to extend WindowAssigner
> with ability to be called on timer and checkpoint its state the same way it
> is done by the Trigger.
> Such WindowAssigner would be able to create Windows based on time even if
> no event is received.
>
> On Thu, Apr 21, 2016 at 1:57 AM, Aljoscha Krettek <aljos...@apache.org>
> wrote:
>
>> Hi,
>> I'm afraid this is not possible with our windowing model (expect with
>> hacks using GlobalWindow, as you mentioned). The reason is, that windows
>> only come into existence once there is an element that has a window. Before
>> that, the system has no reference point about what windows there should
>> exist because there is no knowledge about time except when looking at
>> elements.
>>
>> Cheers,
>> Aljoscha
>>
>> On Thu, 21 Apr 2016 at 01:31 Maxim <mfat...@gmail.com> wrote:
>>
>>> I have the following use case:
>>>
>>> Input stream of timestamped "on" and "off" events received out of order.
>>> I need to produce an event with time that system was "on" every 15
>>> minutes. Events should be produced only for intervals that system was "on".
>>>
>>> When 15 minute window has at least one record it is triggered and the
>>> required aggregate is created, but when no event is received within 15
>>> minute period window is not triggered and nothing is produced.
>>>
>>> I understand that it is not feasible to trigger on empty windows when
>>> the set of keys is unbounded. But it would be nice to give the control for
>>> such triggering to a window function. In my case the window function could
>>> enable the empty triggering for the current key when the last event in the
>>> evaluated window is "on" and disable it if is "off".
>>> The strawman API for such feature:
>>>
>>> public void apply(String key, TimeWindow window, Iterable<OnOffEvent> 
>>> input, Collector<Aggregate> out) throws Exception {
>>>
>>>     ...
>>>
>>>     RuntimeContext context = this.getRuntimeContext();
>>>
>>>     if (lastEvent.isOn()) {
>>>
>>>        context.enableEmptyWindowTriggering();
>>>
>>>     } else {
>>>
>>>        context.disableEmptyWindowTriggering();
>>>
>>>     }
>>>
>>> }
>>>
>>> I could implement the same logic using global window and custom trigger
>>> and evictor, but it looks like ugly workaround to me.
>>>
>>> Is there any better way to solve this use case?
>>>
>>> Thanks,
>>>
>>> Maxim.
>>>
>>>
>

Reply via email to