计算BigQuery中的上一页路径

时间:2017-05-04 13:29:41

标签: google-bigquery

我正在为主页热图提取数据,我想只看到网页浏览,其中上一页是主页。

我的数据是导入的Google Analytics表格 - 指标'上一页面路径'在BQ中不存在,那么我该如何解决呢?

以下是我的查询的基本示例:

SELECT
  hits.page.pagePath
FROM (TABLE_DATE_RANGE([***.ga_sessions_],
      DATE_ADD(CURRENT_TIMESTAMP(), -4, 'DAY'),
      DATE_ADD(CURRENT_TIMESTAMP(), -1, 'DAY')))
WHERE ? -- Where previous page path was the homepage?
GROUP BY hits.page.pagePath

我可以在WHERE子句中使用什么来定义上一页路径?

2 个答案:

答案 0 :(得分:2)

以下是BigQuery Standard SQL

   
#standardSQL
SELECT Page, COUNT(*) AS PageViews
FROM(
   SELECT hit.page.pagePath AS Page, 
          LAG(hit.page.pagePath, 1) OVER (PARTITION BY fullVisitorId, visitId, DATE ORDER BY hit.hitNumber ASC) AS PreviousPage
   FROM `your_ga_sessions_table`, UNNEST(hits) AS hit
   WHERE hit.type='PAGE'
)
WHERE PreviousPage='/yourHomePage'
GROUP BY Page
-- ORDER BY PageViews DESC   

另请考虑以下版本,您可以在其中收集每个访问者/访问的整个路径,而不是使用正则表达式过滤任何给定的路径模式

#standardSQL
SELECT 
  fullVisitorId, 
  visitId,
  STRING_AGG(hit.page.pagePath, '>' ORDER BY hit.hitNumber) AS path
FROM `your_ga_sessions_table`, UNNEST(hits) AS hit
WHERE hit.type='PAGE'
GROUP BY fullVisitorId, visitId
HAVING REGEXP_CONTAINS(path, r'/page1>/page1')
-- ORDER BY 1, 2  

通过正确构建正则表达式,您可以查找任何长度和顺序等的任何页面序列,以支持漏斗分析示例

答案 1 :(得分:1)

由于在您的查询中使用TABLE_DATE_RANGE函数,我猜您使用的是旧版SQL。在这种情况下,您可以使用LAG函数,使您能够从窗口中的上一行读取数据。因此,如果您按其命中编号(窗口)订购每个会话的页面,则可以获取每个页面的上一页。

以下查询将执行您想要的操作:

#legacySQL
SELECT Page, count(*) as pageviews
FROM(
   SELECT hits.page.pagePath as Page, 
          LAG(hits.page.pagePath, 1) OVER (PARTITION BY fullVisitorId, visitId, date ORDER BY hits.hitNumber ASC) as PreviousPage
   FROM (TABLE_DATE_RANGE([****.ga_sessions_], DATE_ADD(CURRENT_TIMESTAMP(), -4, 'DAY'), DATE_ADD(CURRENT_TIMESTAMP(), -1, 'DAY')))
   WHERE hits.type='PAGE'
)
WHERE PreviousPage='/yourHomePage'
GROUP BY Page
-- ORDER BY pageviews desc

您必须将'/ yourHomePage'替换为您的实际主页URI。