我一直在研究 GA 数据的(标准)SQL 查询,以查找包含两个 URL 之一的 session 数。但是,通过两个 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
。
要计算访问正则表达式定义的页面的 session 数,您可以使用以下 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
关于google-analytics - 谷歌大查询 : number of sessions that visited a set of pages,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42720195/