sql - 对(自定义)时间戳分区表的 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
两种情况都没有错误。只是空的结果。我究竟做错了什么?
解决方案
这怎么可能是真的?
TIMESTAMP_SUB(date, INTERVAL 24 HOUR) >= `date`
如果你减去 24 小时,那么它将小于 ,date
而不是大于date
。
至于您的第二个查询,您根本没有恰好在午夜的时间戳。大概,你打算这样:
WHERE DATE(date) = DATE('2019-02-19')
我强烈建议您更改列的名称。在 SQL 关键字之后命名列是一个坏主意。当它实际上是一个时间戳时,将它称为“日期”是一种误导和混淆。
推荐阅读
- powershell - Powershell Selenium:无法在亚马逊上找到元素
- python - 如何在没有 if/for 的情况下最小化一个数字
- r - 使用R中的echarts在radarchart中渐变颜色
- python - 仅设置某些小部件以随窗口调整大小
- python - Pyamg 不起作用(没有名为“pyamg.amg_core.evolution_strength”的模块)
- vaadin - 如何定义 CRUD 网格中的列?
- javascript - 使用 Next.js 的 scss 的类名约定
- javascript - Highcharts 标志在某些情况下不可见
- tensorflow - tf.nn.leaky_relu 和 tf.keras.layers.LeakyReLU 的区别?
- javascript - 在移动设备上第一次和第二次单击网页按钮时无法发送 GET 请求