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

使用Python配置BigQuery中BIGNUMERIC类型精度与标度时出错

问题解决:创建BigQuery BIGNUMERIC表时出现TypeError

问题原因

你遇到的错误是因为当前使用的google-cloud-bigquery客户端库版本过低,旧版本的SchemaField构造函数不支持直接传入precision和scale参数——这两个参数是较新版本的库才新增的特性。而DataProc集群默认安装的客户端库版本通常会和你使用的spark-bigquery-with-dependencies_2.12-0.24.2.jar保持兼容,版本偏旧。

解决方案

方案1:升级客户端库版本

在DataProc集群的节点上执行以下命令,升级google-cloud-bigquery到支持参数的版本(建议升级到2.0.0及以上):

pip install --upgrade google-cloud-bigquery

升级后,你原来的代码就可以正常运行了。

方案2:适配旧版本库的写法

如果无法升级库版本,改用NumericType类来定义带精度和刻度的BIGNUMERIC字段,代码修改如下:

from google.cloud import bigquery

client = bigquery.Client()

table_id = "some_project.some_dataset.some_table_name"
schema = [
    bigquery.SchemaField("full_name", "STRING", mode="REQUIRED"),
    bigquery.SchemaField(
        "salary",
        field_type=bigquery.NumericType(precision=38, scale=2),
        mode="NULLABLE"
    ),
]

table = bigquery.Table(table_id, schema=schema)
table = client.create_table(table)

方案3:用DDL语句创建表

另一种更通用的方式是直接执行BigQuery标准SQL的DDL语句来创建表,不受客户端库版本限制:

from google.cloud import bigquery

client = bigquery.Client()

table_id = "some_project.some_dataset.some_table_name"
ddl_query = f"""
CREATE TABLE `{table_id}` (
    full_name STRING NOT NULL,
    salary BIGNUMERIC(38, 2)
)
"""
client.query(ddl_query).result()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 21:39:18