【发布时间】:2019-02-04 15:09:11
【问题描述】:
对于每 20 分钟的时间间隔,我试图找到带宽的最大值(下表中的 mbps 列),每个唯一的 IP 地址生成,以及相应的端口号。
每个 IP 地址在每 20 分钟内可能会或可能不会出现超过一次。每次在 20 分钟的时间间隔内记录一个 IP 地址时,它可能会列出相同的端口号,也可能不会列出。
例如,在下表中,IP 地址 192.168.10.1 在列为 12:20 的时间段内出现了 3 次,端口号分别为 443、80 和 80。在另一种情况下,IP 地址 192.168.10.2 在 12:40 期间出现了两次,使用相同的端口号 443,列出了两次,但 mbps(带宽)列的值不同。
目标是在每 20 分钟的时间段内,仅选择并列出每个唯一的 IP 地址一次,并按 DESC 顺序按 mbps 排序。
根据数据注入的时间对表进行分区。
我打算编写一个 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
我做错了什么?
【问题讨论】:
标签: google-bigquery bigquery-standard-sql