我是bigquery的新手,很抱歉,如果这是一个菜鸟问题!我有兴趣按页面路径或标题分发会话。我理解一个会话可以包含多个路径/标题,因此总和将大于总会话数。从本质上讲,我想创建一个“会话ID”,并对其中的路径如a或b进行不同的会计。
从一开始就开始手动计算总会话可能会有所帮助。我尝试连接访问id和完整访问者ID以创建唯一的访问ID,但显然这与会话完全不同。有人可以帮助启发我吗?谢谢!
我正在使用GA网站数据。 Schema是standard in GA导出。
数据样本
让我们使用示例BigQuery (London Helmet) data中的示例:
今天有63场会议:
SELECT count(*) FROM [google.com:analytics-bigquery:LondonCycleHelmet.ga_sessions_20130910]
这些会话中有多少是hits.page.pagePath喜欢/ vests%或/ helmets%?只有多少背心才对着头盔呢?谢谢!
答案 0 :(得分:5)
这是一个如何计算是否只有头盔,或只有背心或两个头盔和背心或两者都没有的例子:
SELECT
visitID,
has_helmets AND has_vests AS both_helmets_and_vests,
has_helmets AND NOT has_vests AS helmets_only,
NOT has_helmets AND has_vests AS vests_only,
NOT has_helmets AND NOT has_vests AS neither_helmets_nor_vests
FROM (
SELECT
visitId,
SOME(hits.page.pagePath like '/helmets%') WITHIN RECORD AS has_helmets,
SOME(hits.page.pagePath like '/vests%') WITHIN RECORD AS has_vests,
FROM [google.com:analytics-bigquery:LondonCycleHelmet.ga_sessions_20130910]
)
答案 1 :(得分:2)
方式1,更容易,但您需要在每个字段上重复
显然你可以这样做:
SELECT count(*) FROM [google.com:analytics-bigquery:LondonCycleHelmet.ga_sessions_20130910] WHERE hits.page.pagePath like '/helmets%'
然后对您自己的子串进行多次查询(一次使用'/ vests%',一次使用'helmets%'等)。
方式2,工作正常,但不是重复字段
如果你想要一个只在字符串的第一部分上分组的查询,你可以这样做:
Select a, Count(*) FROM (SELECT FIRST(SPLIT(hits.page.pagePath, '/')) as a FROM [google.com:analytics-bigquery:LondonCycleHelmet.ga_sessions_20130910] ) group by a
当我这样做时,它返回以下63个会话,总计数为63:)。
方式3,使用桌面上的FLATTEN分别获得每次点击
由于“点击”字段是可重复的,因此您需要在查询中使用FLATTEN:
Select a, Count(*) FROM (SELECT FIRST(SPLIT(hits.page.pagePath, '/')) as a FROM FLATTEN ([google.com:analytics-bigquery:LondonCycleHelmet.ga_sessions_20130910] , hits)) group by a
你需要FLATTEN的原因是“命中”字段是可重复的。如果你没有展平,它将不会查看你的回复中的所有“点击”。添加“FLATTEN”将使您处理每个匹配在其自己行中的子表,因此您可以查询所有这些。
如果你想通过会话而不是点击,(它将两者都是),请执行以下操作:
Select b, a Count(*) FROM (SELECT FIRST(SPLIT(hits.page.pagePath, '/')) as a, visitID as b, FROM FLATTEN ([google.com:analytics-bigquery:LondonCycleHelmet.ga_sessions_20130910] , hits)) group by b, a