BigQuery: извлечь SECOND из TIMESTAMP - PullRequest
0 голосов
/ 10 июля 2020

Как я могу запустить этот запрос?

Сообщение об ошибке : Нет соответствующей подписи для функции EXTRACT для типов аргументов: DATE_TIME_PART FROM INT64. Поддерживаемые подписи: EXTRACT (DATE_TIME_PART FROM DATE); ЭКСТРАКТ (DATE_TIME_PART FROM TIMESTAMP [AT TIME ZONE STRING]); ЭКСТРАКТ (DATE_TIME_PART FROM DATETIME); EXTRACT (DATE_TIME_PART FROM TIME) в [12:12]

Они оба выдают одно и то же сообщение об ошибке

 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

пример отметки времени

Ответы [ 2 ]

1 голос
/ 10 июля 2020

Если вы хотите, чтобы события происходили более чем на 10 минут от предыдущей отметки времени, просто используйте некоторые арифметические c и сравнения:

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.

1 голос
/ 10 июля 2020

используйте TIMESTAMP_MICROS()

WHERE EXTRACT( SECOND FROM TIMESTAMP_MICROS(event_timestamp))
             - EXTRACT( SECOND FROM last_event) >= (60 * 10)
        OR last_event IS NULL
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...