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

请求校验对GCP BigQuery SQL查询各子句逻辑的解读是否正确

这段BigQuery SQL逻辑的解读校验

你的理解完全准确的部分

  • WITH子句(CTE公共表表达式)的基础作用判断正确:第一个名为logins的临时结果集确实从gcp-project-223467.web.top_level表取数,筛选2022-01-01及之后的数据,排除'Home'、'Team'两个页面,按日期、页面维度分组,聚合计算总会话数、带登出行为的会话数、总点击量。
  • 主查询的整体结构判断正确:主查询先读取logins临时表的所有字段,再左关联别名login_days的子查询结果,关联逻辑为日期、页面两个字段同时匹配,最终合并输出两个来源的聚合字段。
  • login_days子查询中CASE WHEN的作用判断正确:确实是通过条件聚合,按登录类型分别统计网页端、移动端、iOS端、安卓端的登录量,以及全量维度的去重登录总数。

存在理解偏差、疏漏的部分

  • 表名识别错误:你注释里写左关联的表来源是ingka-web-analytics-prod.web_data.transactions,实际代码中该子查询读取的是gcp-project-223467.web.login_data表。
  • 关联条件描述错误:你注释里提到关联条件包含logins_web字段,实际关联逻辑仅为logins.date = login_days.date和logins.page = login_days.page两个匹配条件,没有用到logins_web字段。
  • 过滤条件有疏漏:
    • 第一个logins临时表除了你提到的日期、页面筛选,还额外加了clicks > 0的规则,只保留有点击行为的记录
    • login_days子查询除了你提到的日期、页面筛选,还过滤了count_logins_final为NaN、包含逗号、值小于等于0的记录,排除了平台为'ibes'的数据,且仅保留登录状态为'Successful'的成功登录记录
    • 主查询末尾有全局过滤条件WHERE sessions_with_logout > 0,会把所有带登出行为的会话数小于等于0的记录全部剔除,这时候左关联的实际效果和内关联接近,不会保留左表中无右表匹配但被过滤掉的记录
  • 代码存在一处显性语法问题:login_days子查询的SELECT字段列表中,最后一个字段COUNT(DISTINCT login_id) AS logins_final,末尾多了一个冗余逗号,在BigQuery中运行会直接报语法错误,需要删除这个多余逗号才能正常执行。
-- 修正注释、修复语法问题后的完整参考代码
WITH logins AS ( 
  SELECT 
    session_date as date, 
    website_page as page, 
    SUM(sessions) AS sessions, 
    SUM(sessions_with_logout) AS logouts, 
    SUM(clicks) AS clicks 
    FROM `gcp-project-223467.web.top_level` 
    WHERE DATE_session >= "2022-01-01" 
    AND website_page NOT IN ('Home','Team') 
    AND clicks > 0 
    GROUP BY 1, 2
  )
SELECT 
    logins.*, 
    logins_web, 
    mobile_logins, 
    logins_ios, 
    logins_android, 
    logins_final
FROM logins 
LEFT JOIN ( 
    SELECT 
      date_hit as date, 
      website_page as page, 
      SUM(CASE WHEN login_type = 'web' THEN SAFE_CAST(count_logins_final AS INT64) END ) AS logins_web, 
      COUNT(DISTINCT CASE WHEN login_type = 'mobile' THEN login_id END ) AS mobile_logins, 
      SUM(CASE WHEN login_type = 'ipad' THEN SAFE_CAST(count_logins_final AS INT64) END ) AS logins_ios, 
      COUNT(DISTINCT CASE WHEN login_type = 'android' THEN login_id END ) AS logins_android, 
      COUNT(DISTINCT login_id) AS logins_final
    FROM `gcp-project-223467.web.login_data`
    WHERE date_hit >= "2022-01-01" AND website_page NOT IN ('Home','Team') 
    AND count_logins_final != 'NaN' 
    AND count_logins_final NOT LIKE '%,%' 
    AND count_logins_final > '0' 
    AND website_platform != 'ibes' 
    AND login_type = 'Successful' 
    GROUP BY 1, 2 
    )login_days 
ON logins.date = login_days.date AND logins.page = login_days.page
WHERE sessions_with_logout > 0

内容的提问来源于stack exchange,提问作者Keith Cozart

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 17:21:26