从 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 [关闭]