Google BigQuery:访问一组页面的会话数

Google BigQuery : number of sessions that visited a set of pages

我一直在对 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

此外,我不确定这种方法是否会提供我想要的数据。

首先,您不能在标准 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