【问题标题】:Google BigQuery : number of sessions that visited a set of pagesGoogle BigQuery:访问一组页面的会话数
【发布时间】:2017-03-10 14:01:02
【问题描述】:

我一直在对 GA 数据进行(标准)SQL 查询,以查找包含两个 URL 之一的会话数。但是,通过两个 URL 过滤并从 hits.page.pagePath 中提取是我遇到问题的地方。

这是一个给我错误的查询示例:

SELECT
  date, COUNT(visitId) AS visits
FROM `123456789.ga_sessions_20170219`,`123456789.ga_sessions_20170220`
WHERE
  REGEXP_CONTAINS(hits.page.pagePath, r"^/(apples|oranges).html.*")
GROUP BY date

而且直接展平也不起作用:

SELECT
  date, COUNT(visitId) AS visits
FROM `123456789.ga_sessions_20170219`,`123456789.ga_sessions_20170220`
WHERE
  REGEXP_CONTAINS((
    SELECT pagePath
    FROM UNNEST(
      SELECT page
      FROM UNNEST(hits) AS page) AS pagePath), r"^/(apples|oranges).html.*")
GROUP BY date

另外,我不确定这种方法是否会给我想要的数据。

【问题讨论】:

    标签: google-analytics google-bigquery bigquery-standard-sql


    【解决方案1】:

    首先,您不能在标准 SQL 中对 UNION 表使用逗号(逗号表示 CROSS JOIN) - 您可以使用 _TABLE_SUFFIX 或直接使用 UNION ALL。 要计算在正则表达式定义的页面上命中的会话数,您可以使用以下EXISTS 子句:

    SELECT
      date, COUNT(visitId) AS visits
    FROM 
      (SELECT * FROM `123456789.ga_sessions_20170219` UNION ALL
       SELECT * FROM `123456789.ga_sessions_20170220`)
    WHERE
      EXISTS(
        SELECT 1 FROM UNNEST(hits) h
        WHERE REGEXP_CONTAINS(h.page.pagePath, r"^/(apples|oranges).html.*"))
    GROUP BY date
    

    【讨论】:

    • 太棒了。谢谢!如您所见,我的一些问题来自于从 Legacy SQL 移植。您的示例完美运行——我已经根据我在 GA 中看到的结果验证了结果。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-16
    • 1970-01-01
    • 1970-01-01
    • 2016-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多