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

BigQuery插入JSON数据时纯数字字符串被自动转int的解决方法咨询

解决方案

方案1:显式指定导入Schema(最稳定,推荐)

你已经关闭了自动类型检测,但未显式指定导入Schema时,BigQuery仍会对JSON字段做隐式类型推断,导致纯数字字符串被识别为整数。你可以在LoadJobConfig中显式声明和目标表完全一致的Schema,强制指定field_string为STRING类型,从根源上禁止自动类型转换。
修改后的配置示例如下:

from google.cloud import bigquery
from google.cloud.bigquery import SchemaField

# 按目标表实际结构补全所有字段的定义,类型、顺序、空属性要和目标表完全对齐
target_schema = [
    SchemaField("field_string", "STRING", mode="NULLABLE"),
    # 示例:其他字段配置
    # SchemaField("id", "INTEGER", mode="REQUIRED"),
    # SchemaField("create_time", "TIMESTAMP", mode="NULLABLE"),
]

job_config = bigquery.LoadJobConfig(
    autodetect=False,
    write_disposition=bigquery.WriteDisposition.WRITE_APPEND,
    source_format=bigquery.SourceFormat.NEWLINE_DELIMITED_JSON,
    max_bad_records=10,
    ignore_unknown_values=False,
    schema=target_schema, # 新增:指定导入Schema
)

方案2:开启引号值强制识别为字符串(无需定义全量Schema,适配快速开发)

如果不想手动维护全量Schema,可以直接添加quoted_values_are_strings=True配置项,开启后BigQuery会将JSON中所有被双引号包裹的值统一识别为STRING类型,不会再把纯数字内容的字符串推断为整数,完全符合你的需求。
修改后的配置示例如下:

job_config = bigquery.LoadJobConfig(
    autodetect=False,
    write_disposition=bigquery.WriteDisposition.WRITE_APPEND,
    source_format=bigquery.SourceFormat.NEWLINE_DELIMITED_JSON,
    max_bad_records=10,
    ignore_unknown_values=False,
    quoted_values_are_strings=True, # 新增:引号包裹的值强制识别为字符串
)

注意事项

  • 两种方案都不需要修改原始JSON数据,无需额外添加符号,存入BigQuery的field_string值和你输入的原始内容完全一致
  • quoted_values_are_strings参数只会影响带双引号的字段值,本身不带引号的数值、布尔类型字段不受影响,会正常识别为对应类型

内容的提问来源于stack exchange,提问作者Ivania Donoso Guzmán

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 10:15:01