2017-06-06 42 views
0

我有Google Analytics將其數據導出到Big Query。它現在有約。 14個月的數據,包含約。 430米活動。我想運行查詢以獲取每月的事件總數(例如201701,201702等)。在資源限制內使用BigQuery每月獲得事件

我寫了一個查詢,但它只會運行在一段時間內。 4 - 6天。如果我把它做得更大,我會在查詢執行過程中遇到「資源超出限制」。信息。以下是我的查詢。我在制定這個查詢時出錯了哪裏?或者我應該接近這個完全不同(只是一個初學者...)

查詢:

SELECT 
    MonthYear, 
    EXACT_COUNT_DISTINCT(combinedVisitorId) AS EventCount, 
FROM (
    SELECT 
    CONCAT(fullVisitorId,"-",STRING(visitId),"-",STRING(hits.hitNumber)) AS combinedVisitorId, 
    hits.eventInfo.eventCategory AS EventCategory, 
    CONCAT(CAST(YEAR(SEC_TO_TIMESTAMP(visitStartTime)) AS STRING), LPAD(CAST(MONTH(SEC_TO_TIMESTAMP(visitStartTime)) AS STRING), 2, '0')) AS MonthYear, 
    FROM 
    TABLE_DATE_RANGE([XXX:79296192.ga_sessions_], TIMESTAMP("2016-04-01"), TIMESTAMP("2017-05-30")) 
    WHERE 
    hits.type="EVENT") 
GROUP BY 
    MonthYear 
ORDER BY 
    EventCount DESC 

回答

1

嘗試類似下面 - 它是BigQuery的標準SQL

#standardSQL 
SELECT 
    YearMonth, 
    COUNT(DISTINCT combinedVisitorId) AS EventCount 
FROM (
    SELECT 
    SUBSTR(_TABLE_SUFFIX, 1, 6) AS YearMonth, 
    CONCAT(fullVisitorId,"-",STRING(visitId),"-",STRING(hits.hitNumber)) AS combinedVisitorId 
    FROM `XXX.79296192.ga_sessions_*` 
    WHERE _TABLE_SUFFIX BETWEEN "20160401" AND "20170530" 
    AND hits.type="EVENT" 
) 
GROUP BY YearMonth 
-- ORDER BY EventCount DESC 

注:我留下了combinedVisitorId的邏輯,因爲它假設這正是您想要對待訪問者的方式
此外,您可以將上面的代碼組合成一個select語句(不帶子查詢) - bu t我以這種方式故意強調了通配符的使用方式

+0

它不運行此查詢:'不能訪問類型爲ARRAY

1

強烈建議您在BigQuery中使用Standard SQL版本。如果你想計算總事件,這可能會爲你做的伎倆:

SELECT 
    SUM((SELECT COUNTIF(hits.type = 'EVENT') FROM UNNEST(hits) hits)) total_events, 
FORMAT_DATE("%B", PARSE_DATE("%Y%m%d", date)) month 
FROM `project_id.dataset_id.ga_sessions*` 
WHERE 
1 = 1 
AND CASE WHEN (REGEXP_CONTAINS(_table_suffix, 'intraday') AND REGEXP_EXTRACT(_table_suffix, r'.*_(.*)') BETWEEN "20170606" AND "20170606") THEN TRUE 
    WHEN (NOT REGEXP_CONTAINS(_table_suffix, 'intraday') AND REGEXP_EXTRACT(_table_suffix, r'.*_(.*)') BETWEEN "20160605" AND "20170605") THEN TRUE END 
GROUP BY month 

我測試了整整一年在這裏,它處理大約30秒。但請注意,如果您使用的時間超過一年,那麼數據將在同一個月內分組。