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

BigQuery报错:INT64与ARRAY<INT64>无法使用>=运算符求助

解决BigQuery中30分钟间隔区间统计的类型匹配错误

错误原因

原代码中bins CTE生成的low和top是数组类型,而ride表中的cicle是单个整数类型,直接用cicle >= low进行比较会触发类型不匹配的错误——BigQuery不支持单个整数与数组直接做比较运算。

修正后的查询代码

WITH bins AS(
    -- 将30分钟间隔的数值数组拆分为一一对应的单行区间
    SELECT 
        low_val AS low,
        top_val AS top
    FROM UNNEST(GENERATE_ARRAY(0, 1470, 30)) AS low_val
    WITH OFFSET AS pos
    JOIN UNNEST(GENERATE_ARRAY(30, 1500, 30)) AS top_val
    WITH OFFSET AS pos
    USING(pos)
), ride AS(
    SELECT DATE_DIFF(ended_at, started_at, minute) as cicle
    FROM `data-project-389314.Cyclist.july23_trip_filtered`
    WHERE rideable_type != 'docked_bike'
)
SELECT 
    low,
    top,
    COUNT(cicle) AS ride_count -- 统计每个区间内的骑行次数
FROM bins
LEFT JOIN ride
    ON cicle >= low 
    AND cicle < top
GROUP BY low, top
ORDER BY low

关键修改说明

  1. 拆分数组为单行数值:使用UNNEST配合WITH OFFSET,将生成的low和top数组按位置一一对应,拆分为每行一个区间的单个数值,彻底解决类型不匹配问题。
  2. 修正区间逻辑:原top数组起始值为0会导致区间重叠(如0-0),调整为从30开始,确保每个区间是[low, top)的30分钟间隔(例如0-30分钟、30-60分钟等)。
  3. 添加聚合统计:原代码GROUP BY low, top后直接返回cicle不符合SQL语法,添加COUNT(cicle)统计每个区间内的骑行次数,符合业务统计需求。

额外说明

如果你的骑行时长不会超过24小时(1440分钟),可以调整bins中的数组上限:

  • 将GENERATE_ARRAY(0, 1470, 30)改为GENERATE_ARRAY(0, 1410, 30)
  • 将GENERATE_ARRAY(30, 1500, 30)改为GENERATE_ARRAY(30, 1440, 30)
    这样最后一个区间为1410-1440分钟(23.5-24小时),避免出现超过24小时的区间。

内容的提问来源于stack exchange,提问作者Danylo Borges Naves

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 05:32:38