BigQuery:从 TIMESTAMP 中提取 SECOND

Posted

技术标签:

【中文标题】BigQuery:从 TIMESTAMP 中提取 SECOND【英文标题】:BigQuery: extract SECOND from TIMESTAMP 【发布时间】:2020-07-10 05:54:09 【问题描述】:

如何运行这个查询?

错误消息:函数 EXTRACT 的参数类型没有匹配的签名:DATE_TIME_PART FROM INT64。支持的签名:EXTRACT(DATE_TIME_PART FROM DATE); EXTRACT(DATE_TIME_PART FROM TIMESTAMP [AT TIME ZONE STRING]);提取(DATE_TIME_PART FROM DATETIME); [12:12] 提取(DATE_TIME_PART FROM TIME)

它们都给出相同的错误信息

 WHERE EXTRACT( SECOND FROM event_timestamp )
             - EXTRACT( SECOND FROM last_event) >= (60 * 10)
        OR last_event IS NULL
 WHERE EXTRACT( SECOND FROM event_timestamp AT TIME ZONE "UTC")
             - EXTRACT( SECOND FROM last_event  AT TIME ZONE "UTC") >= (60 * 10)
        OR last_event IS NULL

【问题讨论】:

事件时间戳是否以微秒为单位存储unix epoch timestamp? 请说明你要实现的逻辑。 【参考方案1】:

使用TIMESTAMP_MICROS()

WHERE EXTRACT( SECOND FROM TIMESTAMP_MICROS(event_timestamp))
             - EXTRACT( SECOND FROM last_event) >= (60 * 10)
        OR last_event IS NULL

【讨论】:

【参考方案2】:

如果您想要距离上一个时间戳超过 10 分钟的事件,只需使用一些算术和比较:

where event_timestamp > last_event + (60 * 10 * 1000000) or
      last_event is null

您将时间戳存储为微秒值。您无需转换为其他类型。

如果您真的想将其转换为 timestamp 值,您可以使用:

where timestamp_micros(event_timestamp) > timestamp_add(timestamp_micros(last_event), interval 10 minute) or
      last_event is null

特别是,您不想提取秒数。该值始终介于 0 和 59 之间。

【讨论】:

以上是关于BigQuery:从 TIMESTAMP 中提取 SECOND的主要内容,如果未能解决你的问题,请参考以下文章

从 Bigquery 中的原始表主动创建洞察表

BigQuery 日期和时间函数在时间戳列上返回 NULL

Bigquery 无法将输入字符串解析为 TIMESTAMP

Bigquery 自定义一周的第一天(默认为星期一)

如何从 BigQuery 中提取嵌套数据?

BigQuery 从日期字段中提取星期作为日期范围