我在 bigquery 中有一列,时间格式如下。时间(时间以 utc 为单位)以 15 分钟为间隔增加(从 00:10 开始),并持续一整天直到 23:......
00:10
00:25
00:40
...
现在我想检查我们是否有使用查询更新的数据。那就是每个时间点我们应该有多个条目(按时间分组时计数应该> 0)。如果在特定点没有计数,我的查询应该返回一个标志,并引发该标志。 如果我们在 01:05 运行查询,我们知道应该有四个非零计数点 (00:10 00:25 00:40 00:55) 我们如何使用查询来比较和确保这一点?
select timecolumn as time, count(*) as cnt
from 'project.dataset.table'
group by 1
order by 1
会给出以下内容
00:10 5
00:25 5
00:40 10
....
select timecolumn as time, count(*) as cnt
from 'project.dataset.table'
我相信你可以跳过
group by
并做这样的事情
with required_times as (
select * from unnest(GENERATE_TIMESTAMP_ARRAY(
date_add(timestamp_trunc(current_timestamp(), DAY), INTERVAL 10 MINUTE),
date_add(timestamp_trunc(current_timestamp(), DAY), INTERVAL 1 DAY),
INTERVAL 15 MINUTE)) as timecolumn
),
my_data_table as (
select * from unnest(GENERATE_TIMESTAMP_ARRAY(
date_add(timestamp_trunc(current_timestamp(), DAy), INTERVAL 10 MINUTE),
date_add(timestamp_trunc(current_timestamp(), DAY), INTERVAL 23 HOUR),
INTERVAL 15 MINUTE)) as timecolumn
)
select
required_times.timecolumn
from
required_times
left join my_data_table on required_times.timecolumn = my_data_table.timecolumn
where
my_data_table.timecolumn is null
将返回这个,因为一天中最后一个小时的记录从 my_data_table 中丢失