184 похожих чатов

Доброе утро всем любителям шарад и загадок 🙂 Памагите с запросом,

ибо не хватает познаний во встроенных агрегирующих функциях 🙁

дано: 3 таблицы:
1) traffic - траффик с фаервола с разобранными по типам пакетами и количеством отправленных/полученных Bytes + ip-адреса
2) dns - сопоставление ip-адреса и dns-имени
3) windows_security - логи windows с логинами пользователей и dns-именами компьютеров
само-собой в каждой таблице имеется EventTime

нужно: отобразить таблицу с логинами пользователей, что запускали torrent-ы в выбранный промежуток времени ( конечная цель - grafana )

предполагаемый порядок действий следующий:
1) выбрать логины пользователей за указаный промежуток времени ( поля Login + ComputerName )
2) добавление в выборку к ComputerName информации о ip-адресе компьютера поле IP ( из таблицы dns )
3) добавление к выборке по полю IP из таблицы traffic информации о наличии трафика по протоколу torrent
но, данный порядок затрагивает лишь доменные windows компьютеры , а по факту может оказаться, что torrent запускались на условно серверах, что не прописаны в dns.
поэтому, есть второй порядок действий, который частично уже работает:
1) выбрать информацию о наличии torrent траффика c полями ip-адрес MegaBytesSent MegaBytesReceived MegaBytes
2) добавление в выборку к ip-адресу информации ComputerName ( из таблицы dns )
3) выбрать логины пользователей за указаный промежуток времени что пользовали torrent

Тот запрос, что имеется к настоящему моменту. частично работает, но, не предполагает того, что в обозначеный промежуток времени terrent-траффик суммируется и не предполагает что за обозначенный промежуток времени за компьютером могли работать несколько пользователей.

SELECT
IP,
ComputerName,
MegaBytesSent,
MegaBytesReceived,
MegaBytes,
TargetUserName
FROM
(
SELECT
IP,
ComputerName,
MegaBytesSent,
MegaBytesReceived,
MegaBytes
FROM
(
SELECT
IP,
(sum(Bytes) / 1000000) AS MegaBytes,
(sum(BytesSent) / 1000000) AS MegaBytesSent,
(sum(BytesReceived) / 1000000) AS MegaBytesReceived,
FROM
traffic
WHERE
EventDate BETWEEN today() - 2 AND today()
AND Application = 'torrent'
AND IP LIKE '192.%'
GROUP BY
IP
HAVING
MegaBytes > 10
) ANY
LEFT JOIN (
SELECT
IP,
ComputerName
FROM
dns
) USING (IP)
) ANY
INNER JOIN (
SELECT
EventTime,
ComputerName,
TargetUserName
FROM
windows_security
WHERE
EventDate BETWEEN today() - 2 AND today()
AND EventID = 4624
AND (
LogonType = '7'
OR LogonType = '2'
)
) USING ComputerName

Какими еще функциями следует воспользоваться, чтобы сделать такую хитрую сортировку?
Если кто-то сталкивался с аналогичными задачами, то, можете просто накидать полезных для меня функций.

1 ответов

14 просмотров

По хорошему надо все это собрать в одну таблицу еще до КХ (на этапе ETL). А так, надо сначало сджойнить, а потом уже считать sum (группировать). Для джойна по несовпадающим промежуткам времени можно округлять (например до часа) или использовать ASOF JOIN.

Похожие вопросы

Обсуждают сегодня

Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
И никого не интересует какие пакеты кто использует. ((% Заходишь на сайт симфони и видишь поддержку Украины - по законам РФ это ж экстремизм. Только никто не отказывается от с...
Am Ambrion
11
лучше скажите, причём тут паскаль?
Alexey Kulakov
36
Чтобы перехватить все нажимания буков на форме, надо хук ставить? Пробовал на форме ОнКейДаун, оно ловит клаву если фокус не на компоненте с вводом текста
Serjone
15
Но, может, есть уже проверенная? Наши требования такие: 1. Сообщения должны приходить из Инста в CRM оду 2. Должна быть возможность подключить несколько экаунтов Инстаграм. Р...
Alexander Sharoiko MSE / Александр Шаройко
7
Народ! Впервые клиенту пришло письмо от РКН, у вас, дескать, есть яндекс метрика, а нигде не написано, что вы ее юзаете. Никто не сталкивался?
Sasha Beep
14
Всем привет! вывожу на общей стр дочерние ресурсыв каждом ресурсе галерея, и первая фотка должна выводиться на общей [!DocLister? &prepare=photo !]
Alekso
12
Я правильно понимаю что нет способов получить список ожидающих заявок на вступление в группу с помощью бота из mtproto?
Шамиль Прилов
7
А можно вопрос? Мне сегодня сказали что у меня функция (которая просто заполняет массив значениями) не правильная void Full(double * arr, int n) { for (int i = 0; i < n; i...
† C E †
7
Добрый вечер. Хочу чтобы у меня в классе поле было функцией, которая возвращает строку. Делаю так: interface ... TGetOutPath = function : String of object; ... protec...
Kirill Filippenok
12
Карта сайта