2015-10-28 3 views
1

При использовании lag(value,offset) я, похоже, не могу повторно использовать вывод в других функциях.BigQuery - Невозможно повторно использовать записи с задержкой

Выход следующего кода показывает, что существует previous_timestamp_utc, но ни одна из функций, отличных от date() или datediff(), возвращает значения.

SELECT 
     id, 
     timestamp_utc, 
     DATE(timestamp_utc) AS date_timestamp_utc, 
     previous_timestamp_utc, 
     DATE(previous_timestamp_utc) AS date_previous_timestamp_utc, 
     DATEDIFF(timestamp_utc,previous_timestamp_utc), 
    FROM (
     SELECT 
     id, 
     timestamp_utc, 
     LAG(timestamp_utc,1) OVER (PARTITION BY id ORDER BY timestamp_utc) AS previous_timestamp_utc, 
     FROM (
     SELECT 
      SEC_TO_TIMESTAMP (timestamp) AS timestamp_utc, 
      id, 
      num_characters, 
     FROM 
      [publicdata:samples.wikipedia])) 
    ORDER BY 
     4 DESC 
    LIMIT 
     1000 

Может кто-нибудь объяснить, почему это происходит?

Обход: Я неясно, почему это работает, но пятнистый обходной путь, чтобы предварительно бросить lag() поле в date(): замена

с

LAG(date(timestamp_utc),1) OVER (PARTITION BY id ORDER BY timestamp_utc) 

вызывает использование previous_timestamp_utc в date() и datediff(). Это не то, что мы должны ожидать от использования функции lag().

ответ

1

Это ошибка в BigQuery при обработке временных меток с помощью функции LAG.

Тип временной метки теряется во время промежуточных результатов. Когда таблица будет записана, она будет правильно записана как тип временной метки в результирующей таблице, но любые промежуточные результаты интерпретируют тип как необработанное целое число, что приводит к неожиданным результатам.

Вы обнаружили обход: приведение к типу без метки времени перед функцией LAG.

Эта проблема вошла в наш внутренний трекер. Спасибо за сообщение об ошибке!

+0

Привет, Майкл, это где-то в публичном издательстве? Я все еще вижу эту проблему. Мы много используем эту функциональность, поэтому было бы здорово узнать, когда мы можем прекратить использовать эту работу –

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