从 BigQuery 中的单个用户事件流构建会话

Posted

技术标签:

【中文标题】从 BigQuery 中的单个用户事件流构建会话【英文标题】:Construct sessions out of individual user event streams in BigQuery 【发布时间】:2018-02-13 02:25:32 【问题描述】:

我在 BigQuery 中记录了事件数据,我想在其中按以下方式对请求进行分组:

    如果请求发生的时间距离上一次请求超过 x 分钟 请求,开始一个新会话 如果会话增长超过 y 分钟,请关闭会话并开始新的会话

定义会话(高于要求)的唯一两列是user_id 列和事件发生时间的timestamp

目标是从单个用户事件流中构建会话。

【问题讨论】:

#1 已经在这里解决了 ***.com/questions/42546815/… #2 需要定义为#1 的 SQL 的一部分或全新的 SQL,以将长会话分解为 y 分钟的会话。 【参考方案1】:

您无法在 BigQuery 中执行此操作。第一个条件很简单——你只需要知道相邻行之间的时间差。

不幸的是,第二个需要“记忆”。基本上,两个单独的行不会为您提供所需的信息。一般来说,SQL 确实有一个解决方案,即递归 CTE。但是,BigQuery 不支持这些。

如果您想在特定时间(例如午夜)中断会话,那么您可以继续。

【讨论】:

在引用WITH clause的文档中,您可以看到它们本质上与CTE相同。文末解释了 BigQuery 不支持 WITH RECURSIVE,即不支持递归 CTE。您可以将用户指向此文档作为改进答案的一种方式。

以上是关于从 BigQuery 中的单个用户事件流构建会话的主要内容,如果未能解决你的问题,请参考以下文章

如何从 BigQuery 中的 Firebase 事件中获取用户表?

在 BigQuery 中的一个会话内或多个会话内查找事件时遇到问题

如何在 Azure AD B2C 中管理用户流之间的单个帐户/会话

流插入,然后定期合并到 Dataflow 管道中的 BigQuery [关闭]

Sinatra / Warden / Ruby - 如何确保我的用户只能使用单个会话登录?

BigQuery 会话和命中级别的理解