Мы используем K SQL для выполнения некоторых агрегаций / фильтрации данных в реальном времени. Один из вариантов использования, который у нас есть, заключается в том, что нам нужно выполнить некоторую операцию в последние N дней определенного действия, это будет непрерывная операция. Так что это должно быть окно с перескоком.
Когда я попробовал запрос с длительностью перескоков, равной M дням, запрос K SQL возвратил M записей вместо 1 (на что надеялись).
Запрос:
select PROTO,
TIMESTAMPTOSTRING(WindowStart(), 'yyyy-MM-dd''T''HH:mm:ss''Z''', 'UTC') as "timestamp",
TIMESTAMPTOSTRING(WindowEnd(), 'yyyy-MM-dd''T''HH:mm:ss''Z''', 'UTC'),
COUNT(PROTO) AS Count
FROM DATASTREAM
WINDOW HOPPING (SIZE 5 DAYS, ADVANCE BY 1 DAY)
WHERE MSG like '%SOMESTRING%'
AND SPLIT(PROTO, '/')[0] = 'tcp'
GROUP BY PROTO;
tcp/22 | 2020-01-27T00:00:00Z | 2020-02-01T00:00:00Z | 1
tcp/22 | 2020-01-28T00:00:00Z | 2020-02-02T00:00:00Z | 1
tcp/22 | 2020-01-29T00:00:00Z | 2020-02-03T00:00:00Z | 1
tcp/22 | 2020-01-30T00:00:00Z | 2020-02-04T00:00:00Z | 1
tcp/22 | 2020-01-31T00:00:00Z | 2020-02-05T00:00:00Z | 1
Есть ли способ получить только первую запись или записи, для которых время окончания <= текущее время или любой другой обходной путь для получения 1 результата на окно? </p>
Пожалуйста, рассмотрите записи данных ниже.
{ "time": "2020-01-25 23:36:37 UTC", "msg": "Error"}
{ "time": "2020-01-25 23:36:38 UTC", "msg": "Error"}
{ "time": "2020-01-25 23:36:40 UTC", "msg": "Error"}
{ "time": "2020-01-26 23:36:37 UTC", "msg": "Error"}
{ "time": "2020-01-26 23:36:38 UTC", "msg": "Error"}
{ "time": "2020-01-26 23:36:39 UTC", "msg": "Error"}
{ "time": "2020-01-26 23:36:40 UTC", "msg": "Error"}
{ "time": "2020-01-27 23:36:37 UTC", "msg": "Error"}
{ "time": "2020-01-27 23:36:38 UTC", "msg": "Error"}
{ "time": "2020-01-27 23:36:39 UTC", "msg": "Error"}
{ "time": "2020-01-28 23:36:37 UTC", "msg": "Error"}
{ "time": "2020-01-28 23:36:38 UTC", "msg": "Error"}
{ "time": "2020-01-29 23:36:37 UTC", "msg": "Error"}
{ "time": "2020-01-29 23:36:38 UTC", "msg": "Error"}
{ "time": "2020-01-29 23:36:39 UTC", "msg": "Error"}
{ "time": "2020-01-29 23:36:40 UTC", "msg": "Error"}
Я ищу количество записей, у которых msg как Ошибка за последние 2 дня.
Если я уволю K SQL запрос 25-го числа в 23:36:37, я ожидал бы результат как:
2020-01-25T23:36:37Z | 1
2020-01-25T23:36:38Z | 2
2020-01-25T23:36:40Z | 3
2020-01-26T23:36:37Z | 4
2020-01-26T23:36:38Z | 5
2020-01-26T23:36:39Z | 6
2020-01-26T23:36:40Z | 7
2020-01-27T23:36:37Z | 5
2020-01-27T23:36:38Z | 6
2020-01-27T23:36:39Z | 7
2020-01-28T23:36:37Z | 4
2020-01-28T23:36:38Z | 5
2020-01-29T23:36:37Z | 3
2020-01-29T23:36:38Z | 4
2020-01-29T23:36:39Z | 5
2020-01-29T23:36:40Z | 6