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的主要内容,如果未能解决你的问题,请参考以下文章