【问题标题】:Construct sessions out of individual user event streams in BigQuery从 BigQuery 中的单个用户事件流构建会话
【发布时间】:2023-03-17 05:23:01
【问题描述】:

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

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

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

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

【问题讨论】:

标签: sql session google-bigquery


【解决方案1】:

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

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

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

【讨论】:

  • 在引用WITH clause的文档中,您可以看到它们本质上与CTE相同。文末解释了 BigQuery 不支持 WITH RECURSIVE,即不支持递归 CTE。您可以将用户指向此文档作为改进答案的一种方式。
猜你喜欢
  • 1970-01-01
  • 2022-06-17
  • 1970-01-01
  • 2015-10-17
  • 2019-07-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-26
  • 1970-01-01
相关资源
最近更新 更多