首页 > 解决方案 > 对(自定义)时间戳分区表的 BigQuery 查询返回零结果

问题描述

我在具有以下架构的数据集中有一个表:

date TIMESTAMP
id INTEGER
...

该表在日期列上进行分区。

在 BQ UI 中显示表格的预览显示它在 2 月份有很多行:

date, id, ...
2019-02-19 16:18:00 UTC, 534480012, ...
2019-02-19 16:23:00 UTC, 534423879, ...

但是,此查询返回零结果:

SELECT id FROM `<project>.<dataset>.<table>`
WHERE 
  TIMESTAMP_SUB(date, INTERVAL 60*24 HOUR) <= `date` AND
  TIMESTAMP_SUB(date, INTERVAL 24 HOUR) >= `date`

(是的,在撰写本文时,应该会出现 2 月的行。)

更重要的是,甚至“默认”查询返回零结果:

SELECT id FROM `<project>.<dataset>.<table>` WHERE date = TIMESTAMP("2019-02-19") LIMIT 1000

两种情况都没有错误。只是空的结果。我究竟做错了什么?

标签: sqlgoogle-bigquery

解决方案


这怎么可能是真的?

TIMESTAMP_SUB(date, INTERVAL 24 HOUR) >= `date`

如果你减去 24 小时,那么它将小于 ,date而不是大于date

至于您的第二个查询,您根本没有恰好在午夜的时间戳。大概,你打算这样:

WHERE DATE(date) = DATE('2019-02-19') 

我强烈建议您更改列的名称。在 SQL 关键字之后命名列是一个坏主意。当它实际上是一个时间戳时,将它称为“日期”是一种误导和混淆。


推荐阅读