2015-10-28 23 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

嗨邁克爾,這是在任何地方的公共問題跟蹤?我仍然看到這個問題。我們使用這個功能很多,所以我們很高興知道什麼時候我們可以停止使用這種解決方法 –