BigQuery执行SQL报Cannot access field 2类型错误如何解决
问题原因
报错出在第5行的ROUND函数写法错误:你误将函数两个参数之间的英文逗号,写成了点.,导致BigQuery解析逻辑出错。
BigQuery执行到这段代码时,会把AVG(cast(tripduration as int64)/60).2识别为「从AVG函数返回的FLOAT64类型数值上访问名为2的结构体字段」,但FLOAT64是基础数值类型,不存在嵌套字段,因此抛出Cannot access field 2 on a value with type FLOAT64的错误。
你原本的逻辑是计算平均骑行时长(换算为分钟)后保留2位小数,ROUND函数的正确传参格式是ROUND(待计算数值, 保留小数位数),参数间必须用逗号分隔。
另外原代码还有一处兼容性问题:SELECT子句中用CONCAT拼接生成了别名为route的字段,但GROUP BY子句没有直接引用这个计算字段,部分SQL校验规则下会触发「非聚合字段不在GROUP BY中」的报错,建议同步调整。
修正后完整代码
SELECT usertype, CONCAT(start_station_name, " to ", end_station_name) AS route, COUNT(*) as num_trips, ROUND(AVG(cast(tripduration as int64)/60), 2) AS avg_trip_duration_min FROM `bigquery-public-data.new_york_citibike.citibike_trips` GROUP BY usertype, route ORDER BY num_trips DESC LIMIT 10
修正点说明
- 将
ROUND函数参数间的错误.替换为英文逗号,,符合函数传参语法,保留2位小数的逻辑可以正常执行 - 给平均骑行时长的计算结果增加明确别名
avg_trip_duration_min,避免查询结果出现无列名的字段 - 调整GROUP BY子句为
usertype, route,和SELECT中的非聚合字段完全对应,兼容所有SQL引擎的校验规则
内容的提问来源于stack exchange,提问作者Olamide Olumide
相关产品推荐
相关产品推荐

