BigQuery查询报错:无法执行IN子查询,STRING与INT64类型不兼容
问题排查与解决
错误原因
报错 Cannot execute IN subquery with uncomparable types STRING and INT64 at [7:3] 的核心原因是字段类型不匹配:
bigquery-public-data.new_york_citibike.citibike_stations表中的station_id是 STRING 类型bigquery-public-data.new_york_citibike.citibike_trips表中的start_station_id是 INT64 类型
IN 子查询要求两边用于匹配的字段类型必须完全一致,类型不兼容时无法执行比较逻辑。
解决办法
只需将其中一侧的字段类型转换为与另一侧一致即可,以下是两种可行方案:
方案1:将子查询中的start_station_id转为STRING类型
SELECT station_id, name FROM bigquery-public-data.new_york_citibike.citibike_stations WHERE station_id IN ( SELECT CAST(start_station_id AS STRING) FROM bigquery-public-data.new_york_citibike.citibike_trips WHERE usertype = 'Subscriber' )
方案2:将主查询中的station_id转为INT64类型
SELECT station_id, name FROM bigquery-public-data.new_york_citibike.citibike_stations WHERE CAST(station_id AS INT64) IN ( SELECT start_station_id FROM bigquery-public-data.new_york_citibike.citibike_trips WHERE usertype = 'Subscriber' )
注意:如果
station_id存在无法转换为整数的异常值,方案2可能会报错,此时优先选择方案1更稳妥。
内容的提问来源于stack exchange,提问作者godlytheelix
相关产品推荐
相关产品推荐

