如何确定所有事件都有“会话信息”,例如 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)) fromanalytics_mytable
嗨!每个 EVENT 的 event_timestamp 是唯一的,两个不同的事件可能具有相同的 event_name,但它们将具有不同的 event_timestamp。您的代码没有问题,可能有几个事件具有不同的时间戳和相同的 event_name。以上是关于如何确定所有事件都有“会话信息”,例如 ga_session_id、ga_session_number 在新的属性 APP+WEB 中用于 GA的主要内容,如果未能解决你的问题,请参考以下文章