BigQuery查询报错:STRING与INT64类型不匹配问题求助
解决BigQuery中IN子查询类型不匹配的问题
- 错误核心:你用IN子查询匹配的两个字段类型不兼容——一个是STRING字符串类型,一个是INT64整数类型,BigQuery不允许不同数据类型直接做IN比较。
- 快速修复:找到报错提示里的第5行第8位附近的代码,把其中一方的字段类型转换成和另一方一致:
- 若主查询字段是STRING、子查询返回的是INT64,就在子查询里转换:
CAST(目标字段 AS STRING) - 若主查询字段是INT64、子查询返回的是STRING,就在子查询里转换:
CAST(目标字段 AS INT64)
- 若主查询字段是STRING、子查询返回的是INT64,就在子查询里转换:
- 教程无报错的原因:大概率是教程使用的数据集里,对应字段的类型是完全匹配的;而你当前用的数据集可能做了版本更新,或者误选了不同的数据集,导致字段类型和教程不一致。
举个具体的修改例子,假设你的原查询是:
SELECT station_name FROM `bigquery-public-data.bike_share.stations` WHERE station_id IN ( SELECT start_station_id FROM `bigquery-public-data.bike_share.trips` WHERE user_type = 'Subscriber' )
如果station_id是STRING类型、start_station_id是INT64类型,修改后的查询可以是:
SELECT station_name FROM `bigquery-public-data.bike_share.stations` WHERE station_id IN ( SELECT CAST(start_station_id AS STRING) FROM `bigquery-public-data.bike_share.trips` WHERE user_type = 'Subscriber' )
或者反过来把主查询的字段转成INT64:
SELECT station_name FROM `bigquery-public-data.bike_share.stations` WHERE CAST(station_id AS INT64) IN ( SELECT start_station_id FROM `bigquery-public-data.bike_share.trips` WHERE user_type = 'Subscriber' )
内容的提问来源于stack exchange,提问作者w0m3n
相关产品推荐
相关产品推荐

