2017-02-24 29 views
0

我希望爲Google Analytics着陸頁定義一個視圖。我試圖通過保存以下查詢作爲視圖設置此:限制在兩個日期分區之間進行選擇的視圖

SELECT 
    date, 
    fullVisitorId AS fv, 
    visitID AS v, 
    h.page.pagePath AS landing_page 
FROM 
    `project-id.dataset.ga_sessions_*`, UNNEST(hits) AS h 
WHERE 
    hitNumber = 1 

在這種加入到這一觀點的疑問我打算將它們限制在兩者之間的日期分區,就像這樣:

SELECT 
    sessions.date, 
    fullVisitorId AS fv, 
    visitId AS v, 
    landing_page 
FROM `project-id.dataset.ga_sessions_*` AS sessions, UNNEST(hits) AS h 
JOIN `project-id.dataset.landing_pages` AS landing_pages 
ON landing_pages.fv = sessions.fullVisitorId 
AND landing_pages.date = sessions.date 
AND landing_pages.v = sessions.visitId 
WHERE 
    _TABLE_SUFFIX BETWEEN '20170108' AND '20170108' 

這似乎仍然選擇大容量的數據~5GB,而不是預計將有一天的〜60MB。

如何重新編寫視圖,以便它只選擇由消費查詢定義的相關日期分區?

回答

1

確保在視圖定義中包含_TABLE_SUFFIX,以便您可以在視圖上的查詢中引用它。下面是轉換_TABLE_SUFFIX一個日期的例子:

SELECT 
    date, 
    fullVisitorId AS fv, 
    visitID AS v, 
    h.page.pagePath AS landing_page, 
    PARSE_DATE('%Y%m%d', _TABLE_SUFFIX) AS sessions_date 
FROM 
    `project-id.dataset.ga_sessions_*`, UNNEST(hits) AS h 
WHERE 
    hitNumber = 1; 

現在嘗試查詢過的觀點:

SELECT 
    COUNT(DISTINCT fullVisitorId) AS total_visitors 
FROM `dataset.view_name` 
WHERE sessions_date = '2017-01-08'; 
+0

由於埃利奧特,這並獲得成功。有沒有辦法避免指定「WHERE sessions_date ='20170108'?我在消費查詢中嘗試了LEFT JOIN,但仍然選擇了大量的數據。感覺應該有一種方式,但我想所有人都說並且儘量減少查詢的數量 – goose

+0

「LEFT JOIN」的問題是,如果視圖在右邊,'sessions_date'可能最終爲空(如果一個鍵不能爲空不存在於視圖中),所以過濾器不能像通常那樣被「推下」。避免這種情況的一種方法是使用子查詢,例如'LEFT JOIN(SELECT ... FROM my_view WHERE sessions_date = .. )'。 –

相關問題