(自定义)时间戳分区表上的BigQuery查询返回零结果

时间:2019-03-19 02:37:25

标签: sql google-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

在两种情况下均无错误。只是空的结果。我在做什么错了?

1 个答案:

答案 0 :(得分:3)

这怎么可能是真的?

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

如果您减去24小时,则它将小于date,而不是大于date

对于第二个查询,您根本没有完全在午夜的时间戳。大概您打算这样做:

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

我强烈建议您更改列的名称。在SQL关键字后命名列是一个坏主意。在确实是时间戳的情况下称其为“日期”会产生误导和混乱。