Python加载JSON到BigQuery时字符串字段转整数的解决方法
解决BigQuery JSON加载时字段类型自动转换及报错问题
问题根源
- 开启
autodetect=True时,BigQuery会自动推断JSON源数据的类型,把字符串格式的数字识别为INTEGER,和目标表的STRING字段类型冲突,导致加载后类型被篡改。 - 关闭
autodetect=False后直接报错,是因为未明确指定源数据的schema,BigQuery无法匹配目标表的字段类型进行解析。
解决方案
关闭自动检测,手动指定源数据的schema,强制BigQuery按STRING类型解析number字段,同时确保schema与目标表结构完全一致:
from google.cloud import bigquery # 定义与目标表匹配的schema,明确number为STRING类型 schema = [ bigquery.SchemaField("number", "STRING", mode="NULLABLE"), # 若有其他字段,需在此对应添加 ] job_config = bigquery.LoadJobConfig( create_disposition=bigquery.CreateDisposition.CREATE_IF_NEEDED, write_disposition=bigquery.WriteDisposition.WRITE_APPEND, source_format=bigquery.SourceFormat.NEWLINE_DELIMITED_JSON, autodetect=False, schema=schema # 手动指定schema )
原理说明
- 手动指定schema后,BigQuery会严格按照定义的类型解析JSON数据,即使
number的值是数字格式的字符串,也会保留STRING类型写入目标表。 - 明确的schema消除了类型推断的歧义,同时与目标表字段类型对齐,解决了
autodetect=False时的解析报错问题。
内容的提问来源于stack exchange,提问作者ygzdevop
相关产品推荐
相关产品推荐

