BigQuery运行SQL查询返回首行数据为null空值的问题咨询
问题根源
你写的SQL逻辑没有错误,首行空值记录和跨天、时段差异没有任何关系,问题出在源数据集本身的无效记录上:bigquery-public-data.new_york_citibike.citibike_trips公开数据集存在大量三个分组字段(usertype、start_station_name、end_station_name)同时为空的无效记录,这些记录会被归为同一个分组,总数量达582万+,远高于正常行程的数量,所以会排在结果首位。
你看到的route字段值为to,是因为CONCAT函数拼接空值时,空值会被当作空字符串处理,CONCAT(null,'to',null)的计算结果就是to。
解决方法
只需要在查询中增加过滤条件,剔除无效记录即可:
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 duration FROM `bigquery-public-data.new_york_citibike.citibike_trips` -- 新增过滤条件剔除无效记录 WHERE usertype IS NOT NULL AND start_station_name IS NOT NULL AND end_station_name IS NOT NULL AND tripduration IS NOT NULL GROUP BY start_station_name, end_station_name, usertype ORDER BY num_trips DESC LIMIT 10
运行修改后的SQL就能得到全部为有效行程的前10条结果。
内容的提问来源于stack exchange,提问作者Karl Zaffke
相关产品推荐
相关产品推荐

