Я использую Athena в AWS с журналами Windows Event Manager для создания некоторых запросов для событий безопасности. Одним из них является то, что я хочу запросить машины, сообщающие о 3 или более неудачных попытках входа в систему менее чем за 5 минут.
Столбец метки времени отформатирован так: 2019-03-25T19:18:10.7954381Z
Я уже завершил поиск машин с определенным идентификатором события: SELECT machinename,
COUNT(eventid)
FROM windows
WHERE eventid = 4625
GROUP BY machinename
HAVING COUNT(eventid = 4625) >= 3;
Он просто возвращает все машины с этой четностью, большей или равной 3, для любой отметки времени.
Моя проблема заключается в следующем: как бы я реализовал логику в SQL, чтобы проверить, произошла ли конкретная вечерняя ошибка в течение 5 минут с таким типом отметки времени, а не просто отображать все времена?
Это мой первый набег в SQL; любая помощь очень ценится. Спасибо!
EDIT:
У Тео было решение. Размещение здесь:
SELECT
FROM_UNIXTIME(
FLOOR(
TO_UNIXTIME(
DATE_PARSE(substr(timecreated, 1, 16), '%Y-%m-%dT%H:%i')
)/300
) * 300
) AS five_minute_window,
machine-name,
COUNT(event-id) AS event_count
FROM table
WHERE event-id = 4625
GROUP BY 1, machine-name
HAVING COUNT(event-id = 4625) >= 3;
Мне пришлось сбрить доли секунды, поскольку были некоторые аномальные метки времени, которые не были отформатированы как таковые (только целые секунды).