如何确定所有事件都有“会话信息”,例如 ga_session_id、ga_session_number 在新的属性 APP+WEB 中用于 GA

Posted

技术标签:

【中文标题】如何确定所有事件都有“会话信息”,例如 ga_session_id、ga_session_number 在新的属性 APP+WEB 中用于 GA【英文标题】:How to be sure about All events have 'Sesssion Info' like ga_session_id, ga_session_number IN NEW PROPERTY APP+WEB for GA 【发布时间】:2019-10-28 02:19:15 【问题描述】:

我正在尝试使用 BigQuery 在新属性 App+Web 中验证所有事件是否具有“会话信息”。

这是我的表的示例数据架构。 event_params.key got ga_session_id

比我试过这个查询。

#standardSQL
SELECT
  event_name, COUNT(event_name) as count_event_name
FROM
  `mytable`,
  UNNEST(event_params) AS params
WHERE params.key = "ga_session_id"

在这个查询中,我总共得到了 24,473,721 行,其中似乎有“ga_session_id” 但是,因为mytable 有 24,753,258 行,所以至少有 279,537 行没有“ga_session_id”。

所以我想知道哪个 event_name 没有“ga_session_id”,有多少个。

任何可能的代码?请帮忙:'(

添加) 添加“!”到 WHERE 不是解决方案(我试过) 因为 UNNESTing 添加了额外的行。它产生超过 1.89 亿行,超过了原始表格行。

#standardSQL
SELECT
  event_name, COUNT(event_name) as count_event_name
FROM
  `mytable`,
  UNNEST(event_params) AS params
WHERE params.key != "ga_session_id"

谢谢

【问题讨论】:

【参考方案1】:

正如您所说,使用 UNNEST 会生成很多行。这是因为对于每个原始行(相同的 event_name),每个 event_params “subrow”都会生成一行。

当您进行取消嵌套时,这 24,753,258 行将取消嵌套成更多(大约 2 亿行)。

其中,24473721 符合条件 params.key = "ga_session_id",大约 1.89 亿不符合条件(这就是它们出现在 != 子句中的原因)。

您必须牢记的是,对于同一个事件(由时间戳和名称标识),当您应用 unnest 运算符时会生成大量行,因此在您的查询中,您对每个事件的计数超过一次。

话虽如此,如果你想知道有多少事件包含“ga_session_id”,你应该做这样的查询

 #standardSQL
SELECT
  event_name, COUNT(DISTINCT event_timestamp) as number_of_each_event_name
FROM
  `mytable`,
  UNNEST(event_params) AS params
WHERE params.key = "ga_session_id"
GROUP BY event_name

如果你想做相反的事情,你可以应用 != 条件

如果你想得到满足条件的事件总数,而不是根据 event_name 拆分它们,你的查询是这个:

     #standardSQL
SELECT
  COUNT(DISTINCT event_timestamp) as total_number_of_events
FROM
  `mytable`,
  UNNEST(event_params) AS params
WHERE params.key = "ga_session_id"

这个查询的结果,加上带有 != 条件的同一查询的结果,现在应该是 24,753,258,这是您在表中拥有的原始行数(事件)。

我希望这对你有用!

【讨论】:

感谢您的回答!我对您的解决方案还有其他问题。每个 event_name 的“event_timestamp”值是否唯一?如果是真的,那么查询似乎是有效的。但是我写下面的代码来验证 event_timestamp 是否唯一,表明它不是唯一的......代码有什么问题吗? #standardSQL select count(event_name), count(distinct(event_timestamp)) from analytics_mytable 嗨!每个 EVENT 的 event_timestamp 是唯一的,两个不同的事件可能具有相同的 event_name,但它们将具有不同的 event_timestamp。您的代码没有问题,可能有几个事件具有不同的时间戳和相同的 event_name。

以上是关于如何确定所有事件都有“会话信息”,例如 ga_session_id、ga_session_number 在新的属性 APP+WEB 中用于 GA的主要内容,如果未能解决你的问题,请参考以下文章

如何确定 onmousemove 事件的方向?

如何确定移动浏览器中的软键盘是不是触发了调整大小事件?

REST风格

如何确定python库的所有可用版本?

js事件流

可以删除所有用户的所有 Rails 会话信息