Для каждого 20-минутного интервала я пытаюсь найти максимальное значение полосы пропускания (столбец mbps
в таблице ниже), который генерирует каждый из уникальных IP-адресов, с соответствующим номером порта.
Каждый IP-адрес может отображаться или не отображаться более одного раза в течение каждого 20-минутного периода.Каждый раз, когда IP-адрес записывается с интервалом в 20 минут, он может иметь или не иметь один и тот же номер порта в списке.
Например, в приведенной ниже таблице IP-адрес 192.168.10.1 показывает трив течение периода, указанного как 12:20, с номерами портов 443, 80 и 80 соответственно.В другом сценарии ip-адрес 192.168.10.2 отображается дважды в течение периода 12:40 с тем же номером порта 443, указанным дважды, но с другими значениями для столбца mbps (полоса пропускания).
Цель состоит в том, чтобы выбрать и перечислить каждый уникальный IP-адрес только один раз для каждого двадцатиминутного периода, сортируя по Мбит / с в порядке DESC.
Таблица разбита на основе времениввода данных.
Я планирую написать задание cron для автоматизации этого запроса.Работа cron будет выполняться каждый час, 7 дней в неделю.Запрос должен быть в стандартном SQL.
исходная таблица:
Row time ip_address port mbps
1 01/01/2019 12:20 192.168.10.1 443 100
2 01/01/2019 12:20 192.168.10.1 80 120
3 01/01/2019 12:20 192.168.10.2 80 200
4 01/01/2019 12:20 192.168.10.1 80 110
5 01/01/2019 12:40 192.168.10.2 443 200
6 01/01/2019 12:40 192.168.10.3 443 300
7 01/01/2019 12:40 192.168.10.2 443 200
8 01/01/2019 12:40 192.168.10.1 443 300
9 01/01/2019 13:00 192.168.10.3 443 90
10 01/01/2019 13:00 192.168.10.2 80 100
11 01/01/2019 13:00 192.168.10.1 443 500
, выполнив код ниже,
#standardSQL
SELECT
FORMAT_TIMESTAMP("%d/%m/%Y %H:%M", TIMESTAMP_SECONDS, 'Europe/London') AS time,
ip_address,
port,
SUM(bandwidth) AS mbps,
FROM
dataset1.table1
WHERE
_PARTITIONDATE = DATE_SUB(CURRENT_DATE(),INTERVAL 0 DAY)
AND timestamp > TIMESTAMP_ADD(CURRENT_TIMESTAMP(),INTERVAL -40 MINUTE)
GROUP BY
time,
ip_address,
port
ORDER BY
time,
mbps DESC
Я получаю эту таблицу,
Row time ip_address port mbps
1 01/01/2019 12:20 192.168.10.2 80 200
2 01/01/2019 12:20 192.168.10.1 80 120
3 01/01/2019 12:20 192.168.10.1 80 110
4 01/01/2019 12:20 192.168.10.1 443 100
5 01/01/2019 12:40 192.168.10.1 443 300
6 01/01/2019 12:40 192.168.10.3 443 300
7 01/01/2019 12:40 192.168.10.2 25 200
8 01/01/2019 12:40 192.168.10.2 443 160
9 01/01/2019 13:00 192.168.10.1 443 500
10 01/01/2019 13:00 192.168.10.2 80 100
11 01/01/2019 13:00 192.168.10.3 443 90
что не то, что я хочу.Вместо этого я хочу это:
Row time ip_address port mbps
1 01/01/2019 12:20 192.168.10.2 80 200
2 01/01/2019 12:20 192.168.10.1 80 120
3 01/01/2019 12:40 192.168.10.1 443 300
4 01/01/2019 12:40 192.168.10.3 443 300
5 01/01/2019 12:40 192.168.10.2 25 200
6 01/01/2019 13:00 192.168.10.1 443 500
7 01/01/2019 13:00 192.168.10.2 80 100
8 01/01/2019 13:00 192.168.10.3 443 90
Что я делаю не так?