BigQuery-根据其中一列中的值,按desc顺序对行进行排名,删除重复项

时间:2019-02-07 22:48:59

标签: google-bigquery standard-sql

对于每20分钟的时间间隔,我尝试查找/排列唯一的ip地址及其相应的端口号,这些端口会产生最大的流量,以mbps(每秒兆位)为单位降序排列。

每个IP地址在每20分钟内可以记录一次或多次记录。每次以20分钟的时间间隔记录一次IP地址时,它可能会列出相同的端口号,也可能没有。

例如,在下表中,IP地址192.168.10.1在列出的12:20期间显示了四次,端口号分别为443、80、80和80。在另一种情况下,IP地址192.168.10.2在12:40期间显示两次,端口号为443,列出两次,但mbps(带宽)列的值不同。

如果ip地址在特定时间段内显示多次,请检查其对应的端口,如果同一端口被列出多次,则仅选择/列出其端口产生最多流量的实例。每20分钟不允许重复IP和端口。

根据数据注入时间对表进行分区。每20分钟间隔的行以百万为单位。

查询将使用标准SQL。数据以字节为单位捕获,因此我需要以某种方式在查询中将这种转换并入mbps。

原始表:

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

我尝试使用几个查询来实现以上目标,但没有成功。任何帮助/指向正确的方向,将不胜感激。谢谢!

0 个答案:

没有答案