2016-05-02 1 views
3

Я пытаюсь использовать функцию LAG в сочетании с PARTITION BY, чтобы вычислить разницу во временных марках.Отсутствует функция аналитики с использованием PARTITION BY в bigquery

SELECT 
uuid, 
event_info, 
TIMESTAMP_TO_MSEC(event_time) - LAG(TIMESTAMP_TO_MSEC(event_time),1) OVER (PARTITION BY userId ORDER BY event_time ASC) 
FROM 
[DataSet.TableName] 
ORDER BY 
uuid, 
event_time 

Но выдает ошибку из BigQuery говорит «Ошибка: Отсутствует функцию в аналитическом выражении в: 4,95 - 4,153»

Однако, если я разделить линию 4-ю строку на две части

TIMESTAMP_TO_MSEC(event_time) as time, 
LAG(TIMESTAMP_TO_MSEC(event_time),1) OVER (PARTITION BY userId ORDER BY event_time ASC) as previousTime, 

Тогда он работает просто отлично. Обходной бы использовать «исправить» выше, а затем обернуть весь запрос в другой запрос, чтобы я мог выполнить расчет, как

previousTime - time as difference 

Но это кажется немного Hacky и другие варианты SQL не возникают проблемы с запросом.

Есть ли у кого-нибудь предложения?

Спасибо, Брэда

ответ

3

Это должно быть указано в стандартном SQL диалекте BigQuery в - https://cloud.google.com/bigquery/sql-reference/enabling-standard-sql

Обратите внимание, что вместо TIMESTAMP_TO_MSEC функции в унаследованной SQL, вам нужно будет использовать эквивалентную UNIX_MILLIS функции.

+0

Спасибо Моша. Если я выберу эту опцию, а затем сохраню ее как представление, могу ли я предположить, что опция будет сохранена с просмотром? –

+0

К сожалению, пока нет поддержки стандартного SQL-запроса, но он скоро появится. –

+0

Хорошо, спасибо. Любая идея, когда это произойдет? –

Смежные вопросы