首页 文章

Google BigQuery中的TIMESTAMP和标准SQL

提问于
浏览
0

我正在尝试(并且失败)使用标准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 或者像Legacy SQL timestamp > "2017-09-18 00:00" 一样没有成功 .

谢谢你的帮助 .

3 回答

  • 1

    我认为有效时间戳的时间部分包含小时,分钟和秒 . 您的时间戳文字省略了秒部分 . 尝试包括它:

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

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

    documentation

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

  • 1

    正如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")
    
  • 0

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

    TIMESTAMP(DATE "2017-09-18")
    

相关问题