1

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

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

4

1 回答 1

2

首先,您不能UNION在标准 SQL 中对表使用逗号(逗号表示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
于 2017-03-10T15:59:09.420 回答