Hi Gabriel,

In your scenario, I guess you should be based on Event time.
In this case, I think you can implement self-triggering by customizing the
trigger of the window, and then combine ProcessWindowFunction[1] to define
your calculation logic.
Because most of your time is based on Watermark, and very few scenes
require timing triggers.

A similar example is here.[2]

[1]:
https://ci.apache.org/projects/flink/flink-docs-release-1.6/dev/stream/operators/windows.html#processwindowfunction
[2]:
https://stackoverflow.com/questions/47059762/apache-flink-send-event-if-no-data-was-received-for-x-minutes

Thanks, vino.


Gabriel Pelielo | Stone <[email protected]> 于2018年8月27日周一 下午11:29写道:

> Hello everyone.
>
>
> I'm currently developing a flink program to aggregate information about my
> company's clients' credit card transactions. Each transaction has a
> clientId and a transactionDate related to it. What I want to do is make a
> Sliding week time window with size 21 days sliding every 1 hour, comparing
> the hourly number of transactions of a client to their last week's number
> of transactions in the same hour, for example:
>
>
>
>    - Monday, August 13th 10:00 to 11:00 => 42 transactions.
>    - Monday, August 20th 10:00 to 11:00 => 20 transactions.
>    - Monday, August 27th 10:00 to 11:00 => 29 transactions.
>
>
> My problem is that if a client does not make a single transaction for a
> whole hour, I don't get a 0 appended to my resulting list of transaction.
> What I need as the final result is a list containing 3 elements, each
> representing the count of transactions, the start and the end of the
> window, for example:
>
>
> *TransactionProfile(ClientId1, 2018-02-26T14:00, 2018-03-19T14:00, 15, 0,
> 10).*
>
>
> I have a keyed stream with the key being the clientId and my ideia to
> solve this problem was to append a 0 to the list of the clientIds that did
> not make any transactions on that hour whenever another clientId has
> finished its window, but I don't know how to achieve this. Any help would
> be appreciated.
>
>
> I'm coding in Scala with Flink 1.4 and a piece of my code is the following:
>
> val profileStream: DataStream[Profile] = streamFromKafka
>   .map(openTransaction => Transaction(openTransaction.clientId, 
> openTransaction.transactionDate))
>   .keyBy(trx => trx.clientId)
>   .window(SlidingEventWeekTimeWindows.of(Time.days(21), Time.hours(1)))
>   .aggregate(new CountAggregate(), new TransactionProcessWindowFunction())
>
>
> Best Regards,
>
>
>
>
>
>
> * Gabriel Pelielo*
> Fraud Detection
>
> + 55 21 98603 9725
> [email protected]
> stone.com.br <http://www.stone.com.br/>
>
>
> *O conteúdo desta mensagem é confidencial e destinado exclusivamente aos
> destinatários. Caso a receba por engano, favor destruí-la e notificar o
> remetente de imediato. O correio eletrônico não configura meio seguro para
> transmissão de dados e o remetente NÃO se responsabiliza por eventual erro,
> atraso, extravio, interceptação ou infecção por vírus. Cabe ao destinatário
> solicitar versão física sempre que necessário.*
>
> * The content of this message is confidential and was intended solely to
> its recipient. **In case this message is received by mistake, please
> destroy it and notify the sender immediately. Electronic mails are not a
> safe channel for data transmission and the sender accepts NO liability for
> eventual errors, delays, loss, interception or virus infection. When
> necessary, the receiver must request a hard-copy version.*
>
>

Reply via email to