2017-09-27 59 views
0

在使用來自GA的數據的BigQuery中,我試圖找到頁面類型(基於頁面路徑),每個會話的會話中點擊次數最多用戶。這將用於確定哪個頁面類型的會話活動最多(我只需要一個,因此最多)。查找BigQuery中一個會話中點擊數的最大值(遺留SQL)

使用行號爲會話中的每個頁面類型分配等級,並且對等級1進行過濾適用於一個用戶。當我嘗試複製更大的數據集(〜400GB)時,出現「資源超出...」錯誤。

我是BigQuery的新手,並希望獲得優化此代碼的任何提示。

SELECT 
    userid, 
    sessionid, 
    pagetype, 
    hits 
    FROM (
    SELECT 
     *, 
     ROW_NUMBER() OVER (PARTITION BY userid, sessionid ORDER BY sessionid ASC) rnk 
    FROM (
     SELECT 
     userid, 
     sessionid, 
     pagetype, 
     COUNT(1) AS hits 
     FROM 
     [xxxxxxx] WHERE 
     GROUP BY 
     userid, 
     sessionid, 
     pagetype 
     ORDER BY 
     sessionid, 
     hits DESC)) 
    WHERE 
    rnk = 1 
+1

如果您對BigQuery不熟悉,爲什麼要使用傳統SQL?例如,使用標準SQL意味着您可以使用帶ORDER BY和LIMIT的ARRAY_AGG。 –

回答

3

standard SQL使用,可以編寫一個查詢,例如:

#standardSQL 
SELECT 
    first_session.* 
FROM (
    SELECT 
    ARRAY_AGG(
     STRUCT(userid, sessionid, pagetype, hits) 
     ORDER BY sessionid ASC LIMIT 1 
    )[OFFSET(0)] AS first_session 
    FROM (
    SELECT 
     userid, 
     sessionid, 
     pagetype, 
     COUNT(*) AS hits 
    FROM `xxxxxxx` 
    GROUP BY 
     userid, 
     sessionid, 
     pagetype 
) 
    GROUP BY userid, sessionid 
); 

這建立一個結構具有用於每個組的相關列和只選擇第一個,如由sessionid確定。