You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

BigQuery插入报错:STRING类型无法插入INT64列求助

解决BigQuery插入时字段类型不匹配问题

你的问题核心在于转换查询仅生成临时结果,未实际修改原表的字段类型,而且你写的WITH子句语法本身就有错误——那个查询只是临时查出转换后的数据,并没有把Dataset.Dec2020里的start_station_id字段真正改成INT64类型,所以后续插入时依然读取原表的STRING类型字段,自然触发类型不匹配错误。

给你两种可行的解决办法:

方法1:插入时直接转换字段(推荐,无需修改原表)

不用单独执行转换操作,直接在INSERT语句中指定字段并完成类型转换,避免使用SELECT *(*会包含原表所有未转换的字段):

INSERT INTO `Dataset.Main`
SELECT 
  -- 列出所有字段,对start_station_id做类型转换,其余字段直接保留
  column1,
  column2,
  column3,
  column4,
  column5,
  CAST(start_station_id AS INT64) AS start_station_id,
  -- 继续列出后续其他字段
  column7,
  ...
FROM `Dataset.Dec2020`

如果不想手动逐个列出字段,可以用排除语法简化:

INSERT INTO `Dataset.Main`
SELECT 
  EXCEPT(start_station_id),
  CAST(start_station_id AS INT64) AS start_station_id
FROM `Dataset.Dec2020`

方法2:修改原表的字段类型

如果后续会频繁使用该表,直接修改原表字段类型更一劳永逸。BigQuery修改字段类型需通过重建表实现:

-- 重建表并将start_station_id改为INT64类型
CREATE OR REPLACE TABLE `Dataset.Dec2020` AS
SELECT 
  EXCEPT(start_station_id),
  CAST(start_station_id AS INT64) AS start_station_id
FROM `Dataset.Dec2020`

执行完该语句后,原表的start_station_id字段类型已更新为INT64,再执行你原来的INSERT语句就不会报错了。

另外纠正你之前转换查询的语法错误(即使修复后也仅能生成临时结果,无法修改原表):

WITH temp_table AS (
  SELECT CAST(start_station_id AS INT64) AS start_station_id, * EXCEPT(start_station_id)
  FROM `Dataset.Dec2020`
)
SELECT * FROM temp_table

内容的提问来源于stack exchange,提问作者Muange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 04:01:39