GA bigquery 表中 hits.page.pagePath 的会话

Sessions by hits.page.pagePath in GA bigquery tables

我是 bigquery 的新手,很抱歉这是一个新手问题!我有兴趣按页面路径或标题划分 sessions。我知道一个 session 可以包含多个 paths/titles,所以总和会大于总 session。本质上,我想创建一个 'session id' 并计算不同的 sessionids,其中路径如 a 或 b.

从一开始就手动计算总数 session 可能会有所帮助。我试图连接访问 ID 和完整的访问者 ID 以创建一个唯一的访问 ID,但显然这与 sessions 完全不同。有人可以帮助启发我吗?谢谢!

我正在处理我们的 GA 网站数据。架构是 standard in GA 出口。

数据样本

让我们使用样本 BigQuery (London Helmet) data 中的一个例子:

这天有 63 个 session:

SELECT count(*) FROM [google.com:analytics-bigquery:LondonCycleHelmet.ga_sessions_20130910]

其中有多少 session 位于 hits.page.pagePath 之类的 /vests% 或 /helmets%?有多少是只有背心和只有头盔?谢谢!

方法 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

当我这样做时,它 returns 我接下来的 63 个会话,总数为 63 :)。

方法 3,在 table 上使用 FLATTEN 来单独获得每个命中

由于 "hits" 字段是 repeatable,您需要在查询中使用 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的原因是"hits"字段是repeatable。如果您不展平,它就不会查看您回复中的所有 "hits"。添加 "FLATTEN" 将使您处理一个子 table,其中每个命中都在其自己的行中,因此您可以查询所有这些。

如果您希望通过会话而不是点击来获取(两者都是),请执行以下操作:

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

这里有一个例子,说明如何计算是只有头盔,还是只有背心,还是头盔和背心都有,或者两者都没有:

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] 
)