BigQuery查询纽约Citibike数据集如何排除NULL值结果行
问题原因
- 你的查询语句不存在逻辑错误,返回的空值行来源于数据集本身的脏数据:该公共数据集中存在部分行程的
start_station_name、end_station_name、usertype字段为空的记录,这些空值记录会被归为同一分组,当这类记录总量足够高时就会出现在排序后的Top10结果中。 - 你参考的课程视频未出现该问题,大概率是课程使用的是更早版本的已清洗数据集,或者讲师在演示时额外添加了过滤条件未明确说明。
解决方法
在查询的WHERE子句中添加对应字段的非空校验即可过滤掉无效记录,修改后的查询语句如下:
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_minutes FROM bigquery-public-data.new_york_citibike.citibike_trips WHERE start_station_name IS NOT NULL AND end_station_name IS NOT NULL AND usertype IS NOT NULL GROUP BY start_station_name, end_station_name, usertype ORDER BY num_trips DESC LIMIT 10
如果还需要进一步过滤异常行程数据,还可以额外添加行程时长的校验条件,过滤掉时长小于1分钟或者超过24小时的异常记录:
AND tripduration BETWEEN 60 AND 86400
内容的提问来源于stack exchange,提问作者José Albelo
相关产品推荐
相关产品推荐

