【问题标题】:BigQuery: extract SECOND from TIMESTAMPBigQuery:从 TIMESTAMP 中提取 SECOND
【发布时间】: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
  • 请说明你要实现的逻辑。

标签: sql google-bigquery


【解决方案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 之间。

    【讨论】:

      猜你喜欢
      • 2020-02-07
      • 2021-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-16
      • 2011-02-26
      • 2021-08-06
      • 2023-01-18
      相关资源
      最近更新 更多