我一直在研究(标准)sql ga数据的查询,以查找包括两个URL之一的会话数。但是,通过两个URL过滤并从hits.page.page.page.page.
这是给我错误的查询的一个示例:
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