BigQuery - ранжирование строк в порядке убывания, основанное на значениях в одном из столбцов, удаление дубликатов - PullRequest
0 голосов
/ 08 февраля 2019

Для каждого 20-минутного интервала я пытаюсь найти / ранжировать уникальные IP-адреса с соответствующими номерами портов, которые генерируют наибольший объем трафика, в Мбит / с (мегабит в секунду), в порядке убывания.

Каждый IP-адрес может или может быть записан более одного раза в каждый 20-минутный период.Каждый раз, когда IP-адрес записывается с интервалом в 20 минут, он может иметь или не иметь один и тот же номер порта в списке.

Например, в приведенной ниже таблице IP-адрес 192.168.10.1 показывает четыревремя в течение периода, указанного как 12:20, с номерами портов 443, 80, 80 и 80 соответственно.В другом сценарии ip-адрес 192.168.10.2 отображается дважды в течение периода 12:40 с тем же номером порта 443, указанным дважды, но с другими значениями для столбца mbps (полоса пропускания).

ЕслиIP-адрес отображается более одного раза за определенный период, проверьте его соответствующий порт, и, если один и тот же порт указан более одного раза, выберите / перечислите только тот экземпляр, порт которого генерировал наибольшее количество трафика.Не допускается дублирование ips и портов для каждого 20-минутного периода.

Таблица разбита на части в зависимости от времени ввода данных.Строки за 20-минутный интервал исчисляются миллионами.

Запрос должен быть в стандартном SQL.Данные записываются в байтах, поэтому мне нужно каким-то образом также включить это преобразование в мегабиты в запрос.

исходная таблица:

Row  time                ip_address          port        mbps

1    01/01/2019 00:00    192.168.10.1        443         100
2    01/01/2019 00:00    192.168.10.1        443         150
3    01/01/2019 00:00    192.168.10.1        80          120
4    01/01/2019 00:00    192.168.10.1        80          123
5    01/01/2019 00:20    192.168.10.2        80          200
6    01/01/2019 00:20    192.168.10.1        80          100
7    01/01/2019 00:20    192.168.10.2        80          210
8    01/01/2019 00:20    192.168.10.1        80          110
9    01/01/2019 00:40    192.168.10.2        443         200
10   01/01/2019 00:40    192.168.10.3        443         300
11   01/01/2019 00:40    192.168.10.2        443         220
12   01/01/2019 00:40    192.168.10.1        443         300
13   01/01/2019 00:00    192.168.10.3        443         90
14   01/01/2019 00:00    192.168.10.2        80          100
15   01/01/2019 00:00    192.168.10.1        443         500

Передавая выше через запрос, я хотел бычтобы получить следующие результаты:

Row  time                ip_address          port        mbps

1    01/01/2019 00:00    192.168.10.1        443         150
2    01/01/2019 00:00    192.168.10.1        80          123
3    01/01/2019 00:20    192.168.10.1        80          110
4    01/01/2019 00:20    192.168.10.2        80          200
5    01/01/2019 00:40    192.168.10.1        443         300
6    01/01/2019 00:40    192.168.10.2        443         220
7    01/01/2019 00:40    192.168.10.3        443         300
8    01/01/2019 00:00    192.168.10.1        443         500
9    01/01/2019 00:00    192.168.10.2        80          100
10   01/01/2019 00:00    192.168.10.3        443         90

Я попытался использовать несколько запросов для достижения вышеупомянутого безуспешно.Любая помощь / указание в правильном направлении, будет принята с благодарностью.Спасибо!

...