Google BigQuery 中的 TIMESTAMP 和标准 SQL
Posted
技术标签:
【中文标题】Google BigQuery 中的 TIMESTAMP 和标准 SQL【英文标题】:TIMESTAMP and Standard SQL in Google BigQuery 【发布时间】:2017-09-25 07:05:56 【问题描述】:我正在尝试(但失败)使用标准 SQL 在 BigQuery 中执行以下查询
SELECT
user_id
FROM
dataset.table
WHERE
timestamp > TIMESTAMP("2017-09-18 00:00")
我不断收到消息
Query Failed
Error: Invalid timestamp: '2017-09-18 00:00'
我绝望地尝试过使用2017-09-18T00:00
或类似旧版SQL timestamp > "2017-09-18 00:00"
,但没有成功。
感谢您的帮助。
【问题讨论】:
您的timestamp
列是什么类型的?
【参考方案1】:
我相信一个有效的时间戳有一个包含小时、分钟、和秒的时间部分。您的时间戳文字省略了秒部分。尝试包含它:
SELECT
user_id
FROM
dataset.table
WHERE
timestamp > TIMESTAMP('2017-09-18 00:00:00')
您需要在时间戳中包含秒数以及当前时间戳没有意义的原因是 BigQuery 在内部将时间戳存储为纪元秒数。如果不指定秒数,您的时间戳将无法可靠地存储。
来自documentation:
您可以将 TIMESTAMP 数据类型描述为 UNIX 时间戳或日历日期时间。 BigQuery 在内部将 TIMESTAMP 数据存储为具有微秒精度的 UNIX 时间戳。
【讨论】:
感谢您的解释。【参考方案2】:正如documentation of bigquery 建议的那样
日期和时间字符串
格式为 YYYY-MM-DD HH:MM:SS 的日期和时间字符串。 UTC 和 支持 Z 说明符。
您提供了2017-09-18 00:00
,即YYYY-MM-DD HH:MM
。
您需要提供2017-09-18 00:00:00
。
所以你的查询应该如下所示
SELECT
user_id
FROM
dataset.table
WHERE
timestamp > TIMESTAMP("2017-09-18 00:00:00")
【讨论】:
该死的,就是这样。感谢并为这个愚蠢的问题感到抱歉。 你介意举一个考虑时区的例子吗?由于某些原因,这似乎不起作用:TIMESTAMP("2017-01-09 00:30:00.000 UTC"),给出的时间戳将从 06:30:00 开始,在该字符串中指示“UTC”没有效果。【参考方案3】:在不指定额外零的情况下编写此表达式的另一种方法是:
TIMESTAMP(DATE "2017-09-18")
【讨论】:
以上是关于Google BigQuery 中的 TIMESTAMP 和标准 SQL的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Google Natural Language API 丰富 Bigquery 表中的数据?
Google Analytics 与 BigQuery 中的会话 - 差异