首页 文章

带有条件的bigquery查询计数列

提问于
浏览
0

我有一个BigQuery表,其结构如下:

file_id    |    file_name    |    error_time_stamp
_ _ _ _ _ _| _ _ _ _ _ _ _ _ | _ _ _ _ _ _ _ _ _ _ _ _ 

  1        |    abcd.txt     |     2015-08-19 19:29:22
  2        |    efgh.txt     |     2015-08-19 19:31:25
  1        |    abcd.txt     |     2015-08-19 19:32:20
  2        |    efgh.txt     |     2015-08-19 19:33:40
  2        |    efgh.txt     |     2015-08-19 19:34:36

我想查询此表以查找file_id的唯一计数和降序排序 . 我使用查询:

SELECT file_id,file_name,count(file_id)作为计数器FROM [dataset.tablename] group by file_id,file_name ORDER BY计数器DESC LIMIT 1000

此查询工作正常,并提供如下所需的结果 .

file_id    |    file_name    |    counter
_ _ _ _ _ _| _ _ _ _ _ _ _ _ | _ _ _ _ _ _

   2       |    efgh.txt     |     3
   1       |    abcd.txt     |     2

现在我想找到基于error_time_stamp的计数器大于19:30:00(这是时间戳 . 这里给出的日期时间格式只是用于readablitiy . 我使用epoch long timestamp来查询) .

SELECT pp,ss,count(pp)AS counter FROM(SELECT file_id as pp,file_name as ss FROM [dataset.tablename]其中error_time_stamp> = 1440076613)AS main_data group by pp,ss ORDER BY counter DESC LIMIT 1000

现在file_id 1的预期计数是1.但我仍然得到2.我的查询有什么问题?

1 回答

  • 1

    BigQuery时间戳具有微秒级的分辨率,因此您可能无意中与非常小/早期的时间戳进行比较 .

    我建议在过滤时使用 SEC_TO_TIMESTAMPTIMESTAMP . 例如,你可以写:

    WHERE error_time_stamp >= SEC_TO_TIMESTAMP(1440076613)
    

    要么:

    WHERE error_time_stamp >= TIMESTAMP('2015-08-19 19:30:00')
    

相关问题