如何在BigQuery中通过表数据计算各命令的执行时间?
在BigQuery中计算命令执行时间
针对你的需求,这里提供两种简单易理解的实现方式,适合BigQuery新手使用:
方法一:条件聚合(推荐,代码更简洁)
通过按命令名称分组,分别提取START和DONE状态对应的时间戳,再计算差值:
SELECT `Command Name`, -- 计算执行时间(单位:秒) TIMESTAMP_DIFF( MAX(CASE WHEN Status = 'DONE' THEN Timestamp END), MAX(CASE WHEN Status = 'START' THEN Timestamp END), SECOND ) AS execution_time_seconds, -- 也可以计算为分钟/小时,按需替换单位 TIMESTAMP_DIFF( MAX(CASE WHEN Status = 'DONE' THEN Timestamp END), MAX(CASE WHEN Status = 'START' THEN Timestamp END), MINUTE ) AS execution_time_minutes FROM -- 替换成你的项目、数据集、表名 `your-project.your-dataset.your-table` GROUP BY `Command Name`;
说明:
CASE WHEN语句筛选对应状态的时间戳,MAX()确保每个命令只取到唯一的START/DONE时间(适合每个命令只有一对START/DONE记录的场景)TIMESTAMP_DIFF是BigQuery内置函数,用于计算两个时间戳的差值,第三个参数指定输出单位(可选:SECOND、MINUTE、HOUR、DAY等)
方法二:自连接
将表自身连接,匹配同一命令的START和DONE记录:
SELECT s.`Command Name`, TIMESTAMP_DIFF(d.Timestamp, s.Timestamp, SECOND) AS execution_time_seconds FROM `your-project.your-dataset.your-table` s JOIN `your-project.your-dataset.your-table` d ON s.`Command Name` = d.`Command Name` AND s.Status = 'START' AND d.Status = 'DONE';
说明:
- 用
s代表START记录的表别名,d代表DONE记录的表别名 - 通过
JOIN条件将同一命令的两条记录关联,直接计算时间差
使用时记得把代码中的your-project.your-dataset.your-table替换成你实际的项目、数据集和表名即可。
内容的提问来源于stack exchange,提问作者user3523860
相关产品推荐
相关产品推荐

