【问题标题】:Check whether table gets updated every five minutes检查表是否每五分钟更新一次
【发布时间】:2016-11-10 01:52:03
【问题描述】:

我正在检查 Google Big Query 中的表是否每 5 分钟更新一次。我们在表中有一个 DateTime 字段,它从指定时间开始每 5 分钟获取一条记录。我必须获取表的开始时间(最后一条记录),并检查我们是否有从当前 DateTime 开始的最后 10 分钟的记录。在结果表中,对于每台机器,我应该根据表是否每 5 分钟更新一次来选择“是”或“否”。

当前查询:

SELECT * FROM [Poll_20160505]
WHERE MachineName = 'P130'
ORDER BY DateTime DESC

当前输出:

MachineName DateTime
P130        2016-07-07 15:54:13.407
P130        2016-07-07 15:49:13.438
P130        2016-07-07 15:44:13.437
P130        2016-07-07 15:39:13.426
P130        2016-07-07 15:34:13.419
.
.
P130        2016-07-07 00:09:13.037
P130        2016-07-07 00:04:13.005

预期输出:

MachineName DateTime
P130        Yes

编辑:

如果当前时间戳和表中最新时间戳之间的差异大于 8 分钟,我应该选择“是”(bcz 表每 5 分钟更新一次,提供 3 分钟的缓冲区)。

从上表中,我必须找到当前时间戳和第一条记录的时间戳(2016-07-07 15:54:13.407)之间的差异,如果大于 8 分钟,那么我应该有一个“不”,否则我应该“是”。

【问题讨论】:

  • 造成你困难的部分是什么?
  • @DanBracuk:我添加了一个编辑。我无法找到存储为字符串的两个时间戳之间的区别。
  • 是与否的标准尚不清楚 - 你说 - I should have a "yes" or "no" based on whether table gets updated every 5 mins - 是最后 N 分钟还是从第一次记录开始?所以即使是 5 分钟的间隔也应该产生 no?
  • @MikhailBerlyant:如果所有记录都在 7 分钟(2 分钟的缓冲)差异内,我会回答“是”。如果我们每 7 分钟都没有新记录,那我应该说“不”
  • 还不完全清楚。我仍然可以用许多不同的方式阅读它。你能举一个两个/三个连续记录的例子,它们会产生yes,而另一个两个/三个会产生no的例子,并说明原因

标签: sql google-bigquery


【解决方案1】:

希望如此简单

SELECT 
  MachineName, 
  CASE 
    WHEN TIMESTAMP_TO_SEC(CURRENT_TIMESTAMP()) - TIMESTAMP_TO_SEC(recentDateTime) < 8 * 60 THEN "Yes" 
    ELSE "No"
  END AS Healthy
FROM (
  SELECT MachineName, MAX(DateTime) AS recentDateTime 
  FROM YourTable
  GROUP BY MachineName
) 

【讨论】:

    猜你喜欢
    • 2014-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-23
    • 1970-01-01
    • 2011-12-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多