Подходит ли функция Match_Recognize Flink для захвата этого типа шаблона?
Я пытаюсь поймать события по схеме, описанной ниже:
- Начальное событие = событие SalePackageA (Покупатель A, приобретающий PackageA)
- 2-е событие = событие PackageUsage (клиент A использует PackageA)
- 3-е событие = событие PackageUsage (клиент A использует PackageA)
- 4-е событие = событие PackageUsage (клиент A использует PackageA)
- ...
- N-е событие = событие PackageUsage (клиент A использует PackageA)
- Stop event = событие SalePackageA (клиент A снова покупает PackageA)
То есть: клиент приобрел какой-то пакет данных с балансом 2048 МБ, затем клиент его использует - я получаю использованные байты в каждом событии PackageUsage.
Итак, match_recognize должен кричать при каждом событии PackageUsage с некоторой логикой агрегирования:
( SalePackageA.Initial_Balance_Bytes - sum(present_event__PackageUsage.usage_bytes + sum(all_previous__PackageUsages.usage_bytes)) ) as Remaining_Balance
И когда тот же Клиент покупает тот же Пакет, этот «поток» должен быть прерван, и новый «поток» начнется заново.
Подходит ли CEP Flink для описанного случая? Есть идеи / предложения, как реализовать это с помощью CEP?
1 ответ
MATCH_RECOGNIZE и CEP не подходят для ваших требований (потому что вам нужно сообщать об остатке после каждого события использования).
Я предлагаю реализовать это с помощью ключевой функции процесса.