You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 23:01:03