2017-09-01 30 views
1

我正在使用標準SQL。儘管它的基本查詢仍然存在引發錯誤的問題。任何建議請查詢失敗錯誤:在查詢執行過程中超出資源:查詢無法在分配的內存中執行

SELECT 
    fullVisitorId, 
    CONCAT(CAST(fullVisitorId AS string),CAST(visitId AS string)) AS session, 
    date, 
    visitStartTime, 
    hits.time, 
    hits.page.pagepath 
FROM 
    `XXXXXXXXXX.ga_sessions_*`, 
    UNNEST(hits) AS hits 
WHERE 
    _TABLE_SUFFIX BETWEEN "20160801" 
    AND "20170331" 
ORDER BY 
    fullVisitorId, 
    date, 
    visitStartTime 

回答

4

此查詢工作的唯一方法是通過去除最終應用的排序:

SELECT 
    fullVisitorId, 
    CONCAT(CAST(fullVisitorId AS string),CAST(visitId AS string)) AS session, 
    date, 
    visitStartTime, 
    hits.time, 
    hits.page.pagepath 
FROM 
    `XXXXXXXXXX.ga_sessions_*`, 
    UNNEST(hits) AS hits 
WHERE 
    _TABLE_SUFFIX BETWEEN "20160801" 
    AND "20170331" 

ORDER BY操作是相當昂貴的,並且不能被並行處理,從而儘量避免它(或嘗試將其應用於有限的結果集中)

+0

謝謝Willian。它正在工作,但是當我使用order by時,你能告訴我爲什麼它不起作用嗎? – Harish

+2

在單個節點上的內存中存放的行太多。如果您查看查詢的「說明」選項卡,它將顯示內存耗盡的位置。 –

+0

謝謝@ElliottBrossard – Harish

0

除了接受的答案,您可能希望按日期對錶進行分區以減少使用昂貴查詢的內存量。

+0

上面的查詢是拉取GA數據,默認情況下它是按日期分區的。 _TABLE_SUFFIX「20160801」 AND「20170331」 這就是我如何從不同日期範圍提取數據 – Harish