You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Google Big Query中使用SQL完成表结构打平操作?

问题描述

我拥有如下所示的原表:
原表示意图
希望通过数据处理得到如下预期输出结果:
预期输出示意图
我查找了多篇相关教程(包括Stack Overflow上的相关讨论帖)尝试实现需求,但现有方案都不适用于我的表,我的表结构详情如下:
表schema详情示意图

解决方案

以下为通用实现逻辑,默认适配BigQuery环境,其他SQL引擎可对应调整语法:

  • 第一步用ROW_NUMBER()窗口函数,按用户ID、会话ID分组,按事件发生时间升序排序,给同一会话内的每个事件标注顺序编号
  • 第二步按用户ID、会话ID分组聚合,通过数组取对应下标的方式获取每个位次的事件属性,实现行转列平铺

示例代码如下:

WITH ranked_events AS (
  SELECT
    user_id,
    session_id,
    event_time,
    event_type,
    -- 此处补充你需要提取的其他事件属性字段
    ROW_NUMBER() OVER(PARTITION BY user_id, session_id ORDER BY event_time ASC) AS event_order
  FROM `你的项目名.你的数据集名.你的表名`
)
SELECT
  user_id,
  session_id,
  -- 提取第1个事件的对应属性
  ARRAY_AGG(event_type ORDER BY event_order ASC)[SAFE_OFFSET(0)] AS event_1_type,
  ARRAY_AGG(event_time ORDER BY event_order ASC)[SAFE_OFFSET(0)] AS event_1_time,
  -- 提取第2个事件的对应属性,需要更多事件直接按规律往下加即可
  ARRAY_AGG(event_type ORDER BY event_order ASC)[SAFE_OFFSET(1)] AS event_2_type,
  ARRAY_AGG(event_time ORDER BY event_order ASC)[SAFE_OFFSET(1)] AS event_2_time
FROM ranked_events
GROUP BY user_id, session_id

如果你的场景里每个会话对应的事件数量不固定,可改用动态SQL自动生成查询列,无需手动重复编写每一列的逻辑。

内容的提问来源于stack exchange,提问作者Priit Mets

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 18:45:03