Google BigQuery中的TIMESTAMP和标准SQL

时间:2017-09-25 07:05:56

标签: google-bigquery

我正在尝试(并且失败)使用标准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"一样没有成功。

感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

我认为有效时间戳的时间部分包含小时,分钟,秒。您的时间戳文字省略了秒部分。试着把它包括在内:

SELECT
    user_id
FROM
    dataset.table
WHERE
    timestamp > TIMESTAMP('2017-09-18 00:00:00')

您需要在时间戳中包含秒数以及当前时间戳无意义的原因是BigQuery内部将时间戳存储为纪元秒。如果不指定秒数,则无法可靠地存储时间戳。

来自documentation

  

您可以将TIMESTAMP数据类型描述为UNIX时间戳或日历日期时间。 BigQuery在内部将TIMESTAMP数据存储为具有微秒精度的UNIX时间戳。

答案 1 :(得分:1)

正如documentation of bigquery建议

  

日期和时间字符串

     

日期和时间字符串,格式为YYYY-MM-DD HH:MM:SS。 UTC和   支持Z说明符。

您提供的2017-09-18 00:00YYYY-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")

答案 2 :(得分:0)

在不指定额外零的情况下编写此表达式的另一种方法是:

TIMESTAMP(DATE "2017-09-18")