BigQuery公共数据集JSON查询一致性及骑行距离计算问题
BigQuery公共数据集查询问题解答
查询结果一致性说明
针对你提出的「每次查询bigquery-public-data.new_york_citibike.citibike_trips公共数据集,返回结果是否一致」的问题,分两种情况判断:
- 数据集未更新时:只要执行的查询语句完全相同(比如无
ORDER BY的SELECT *),返回的数据集内容是一致的,但行的顺序可能不固定——因为BigQuery是分布式查询引擎,未指定排序规则时,返回结果的行序由查询执行的分布式节点调度决定,不保证每次相同。 - 数据集被官方更新时:如果数据集新增了后续时段的骑行数据或修正了原有数据,两次查询的结果会存在差异,因为底层数据源已经变化。
骑行距离计算修正方案
你尝试计算最长、最短骑行距离时出错,核心原因是JSON结果中的经纬度为字符串类型,且手动计算地理距离容易出现校准误差。直接在BigQuery中用内置地理函数计算更准确高效,无需导出JSON处理:
SELECT -- 计算最短骑行距离(单位:米) MIN(ST_DISTANCE( ST_GEOGPOINT(CAST(start_station_longitude AS FLOAT64), CAST(start_station_latitude AS FLOAT64)), ST_GEOGPOINT(CAST(end_station_longitude AS FLOAT64), CAST(end_station_latitude AS FLOAT64)) )) AS shortest_distance_meters, -- 计算最长骑行距离(单位:米) MAX(ST_DISTANCE( ST_GEOGPOINT(CAST(start_station_longitude AS FLOAT64), CAST(start_station_latitude AS FLOAT64)), ST_GEOGPOINT(CAST(end_station_longitude AS FLOAT64), CAST(end_station_latitude AS FLOAT64)) )) AS longest_distance_meters FROM `bigquery-public-data.new_york_citibike.citibike_trips`
注:语句中增加了CAST转换,确保经纬度从字符串转为浮点型,避免函数执行报错。
内容的提问来源于stack exchange,提问作者Martina Jenkins
相关产品推荐
相关产品推荐

