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

使用JSON列的BigQuery LOAD任务失败,求助排查原因

问题排查与解决方案

报错根源

当你用EXPORT DATA导出JSON格式数据时,BigQuery会把表中的JSON类型字段直接序列化为嵌套的JSON对象(而非字符串形式的JSON)。而LOAD DATA默认会自动推断这种嵌套结构为RECORD(STRUCT)类型,但你的目标表该字段是JSON类型,两者类型不匹配,就触发了Invalid schema update错误。这应该是BigQuery近期对LOAD DATA的类型推断逻辑做了调整,导致之前兼容的行为现在报错。

解决方法

方法一:导出时将JSON字段转为字符串

修改EXPORT DATA语句,用TO_JSON_STRING()把JSON类型字段转为字符串,这样导出的JSON文件中该字段是字符串格式,LOAD DATA时会自动识别为JSON类型:

create table dataset.test (
  ts TIMESTAMP,
  Event JSON
);

insert into dataset.test
values (
"2023-03-15 13:35:48",
PARSE_JSON('{"Timestamp":"2023-03-15 13:35:48.0000000", "RandomColumn": "Random value"}')
);

EXPORT DATA
  OPTIONS (
    uri = 'gs://bucket_name/json_debug_example*.json',
    format = 'JSON',
    overwrite = true
  )
AS (
  select ts, TO_JSON_STRING(Event) as Event from dataset.test
);

LOAD DATA into dataset.test FROM FILES ( format = 'JSON', uris = ['gs://bucket_name/json_debug_example*.json']);

方法二:导入时显式指定字段类型

如果不想修改导出逻辑,可以在LOAD DATA语句中显式指定字段的JSON类型,覆盖自动推断:

LOAD DATA into dataset.test FROM FILES ( 
  format = 'JSON', 
  uris = ['gs://bucket_name/json_debug_example*.json'],
  schema = 'ts:TIMESTAMP, Event:JSON'
);

这样就能确保LOAD DATA把嵌套的JSON结构解析为目标表的JSON类型,避免类型冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 07:12:51