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

如何从BigQuery提取GA4会话级流量而非用户获取流量

GA4 BigQuery 会话级流量来源提取方案

GA4默认BigQuery导出的traffic_source字段组为用户首次获客维度属性,仅解析page_location全链路UTM参数无法和官方报表对齐,核心原因是GA4会话流量判定有固定逻辑,并非全链路取UTM值。以下是可直接落地的实现方案,完全匹配会话级、用户首次来源分维度统计需求:

方案1:优先使用原生会话流量字段(匹配度99%+,推荐)

2022年底后创建的GA4 BQ导出,所有事件级表都自带collected_traffic_source字段组,该字段存储事件触发时的实时流量来源,不属于用户固定属性,是提取会话级流量的最优选择。

  • 会话唯一标识用user_pseudo_id + ga_session_id(ga_session_id从event_params中取)
  • 按会话维度聚合,取会话内时间最早的事件对应的collected_traffic_source下的manual_source/manual_medium/manual_campaign值,即为本次会话的流量来源
  • 字段会自动解析Google Ads/AdWords的gclid、其他平台自动标记参数,不需要额外做映射
  • 用户首次获客来源直接取用户维度最早事件的traffic_source.source/traffic_source.medium即可,和会话字段互不干扰

参考SQL实现:

WITH event_with_session_id AS (
  SELECT
    user_pseudo_id,
    event_timestamp,
    (SELECT value.int_value FROM UNNEST(event_params) WHERE key = 'ga_session_id') AS session_id,
    collected_traffic_source,
    -- 取用户全生命周期最早的流量来源作为首次获客来源
    FIRST_VALUE(traffic_source.source) OVER (PARTITION BY user_pseudo_id ORDER BY event_timestamp ASC) AS first_acquisition_source,
    FIRST_VALUE(traffic_source.medium) OVER (PARTITION BY user_pseudo_id ORDER BY event_timestamp ASC) AS first_acquisition_medium
  FROM `你的GCP项目ID.GA4数据集名.events_*`
  WHERE _TABLE_SUFFIX BETWEEN '20230101' AND FORMAT_DATE('%Y%m%d', CURRENT_DATE())
),
session_with_traffic AS (
  SELECT
    user_pseudo_id,
    session_id,
    first_acquisition_source,
    first_acquisition_medium,
    -- 取单会话最早事件的流量来源作为会话来源
    FIRST_VALUE(collected_traffic_source.manual_source IGNORE NULLS) OVER (PARTITION BY user_pseudo_id, session_id ORDER BY event_timestamp ASC) AS session_source,
    FIRST_VALUE(collected_traffic_source.manual_medium IGNORE NULLS) OVER (PARTITION BY user_pseudo_id, session_id ORDER BY event_timestamp ASC) AS session_medium,
    FIRST_VALUE(collected_traffic_source.manual_campaign IGNORE NULLS) OVER (PARTITION BY user_pseudo_id, session_id ORDER BY event_timestamp ASC) AS session_campaign
  FROM event_with_session_id
  WHERE session_id IS NOT NULL
)
SELECT DISTINCT * FROM session_with_traffic

运行后即可匹配业务场景需求:用户首次从email到访,后续从google到访的会话,first_acquisition_source为email,session_source为google。

方案2:历史旧导出兼容方案

如果是2023年之前的历史导出表没有collected_traffic_source字段,按以下逻辑处理即可对齐官方报表:

  • 不要解析会话内所有page_location的UTM参数,仅提取每个会话第一个事件(即session_start事件)对应的page_location中的UTM参数
  • 额外识别自动标记参数:存在gclid则映射source=google、medium=cpc;存在fbclid则映射source=facebook、medium=cpc,无UTM无自动标记的流量归为direct
  • 该方案和官方报表匹配度约95%,仅在跨域跳转、UTM参数丢失场景下存在少量误差

方案3:官方归因结果直接导出

如果需要对齐GA4后台的非最后点击、数据驱动等自定义归因模型的统计结果,不需要自行计算归因逻辑:

  • 进入GA4后台BigQuery导出设置页,开启「会话归因数据导出」开关
  • 导出完成后会生成独立的会话归因表,表内已经预置了GA4官方计算的各归因模型下的来源、媒介、活动字段,直接查询即可

常见避坑提示

  • 不要直接用根级traffic_source字段做会话统计,该字段属于用户属性,只要用户不清除浏览器缓存、不更换设备,后续所有访问该字段值都不会更新,仅适合做首次获客维度统计
  • 会话流量判定仅参考会话第一个命中的落地页参数,会话内页面跳转带的UTM参数不会覆盖当前会话的来源属性,这也是之前全链路解析page_location结果不对齐的核心原因

内容的提问来源于stack exchange,提问作者Tom Wu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 16:48:43