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 中的会话 - 差异

Google BigQuery 中的多级数据透视

Google BigQuery 中的 TIMESTAMP 和标准 SQL

Google BigQuery 中的空嵌套字段

Bigquery 直接查询 Google Storage 中的 csv 文件