向BigQuery表写入JSON时类型不兼容



我有一个函数,从API服务器接收JSON数据,并将其上传到具有指定模式的BigQuery表。JSON数据有一些字段应该是STRING,但只包含数字。下面是json数据的示例:

{
"realizationreport_id":5200242,
"suppliercontract_code":null,
"rrd_id":4681869162,
"gi_id":3246258,
"subject_name":"xd0x9axd0xb0xd0xbbxd1x8cxd1x81xd0xbexd0xbdxd1x8b",
"nm_id":44185221,          <--- serialized to INTEGER but should be STRING
"barcode":"2010739265043"  <--- serialized to INTEGER but should be STRING
........
}

表架构:

bigquery.SchemaField("realizationreport_id", "INTEGER", mode="NULLABLE"),
bigquery.SchemaField("suppliercontract_code", "STRING", mode="NULLABLE"),
bigquery.SchemaField("rrd_id", "INTEGER", mode="REQUIRED"),
bigquery.SchemaField("gi_id", "INTEGER", mode="NULLABLE"),
bigquery.SchemaField("subject_name", "STRING", mode="NULLABLE"),
bigquery.SchemaField("nm_id", "STRING", mode="NULLABLE"), #integer
bigquery.SchemaField("barcode", "STRING", mode="NULLABLE"),#integer
...................

上传到表

job_config = bigquery.LoadJobConfig(
schema = wb_options.get_schema(),                
autodetect = False
)
loadJob = client.load_table_from_json(json_result, table, job_config=job_config)  
loadJob.result()

当JSON开始转储数据时,它满足STRING表字段的INTEGER值

JSON parsing error in row starting at position 0: Could not convert value to string. Field: nm_id; Value: 44185221

如何将nm_id等特定字段的json解码函数更改为STRING?

我应该以某种方式通过添加到json.dumps(metadata).encode("utf-8")的元数据映射{default : CustomDecode}来完成吗。

或者bigquery.LoadJobConfig中有所需的功能?

从BigQuery Python API的LoadJobConfig引用中,我找不到任何能满足您需要的功能。decimal_target_types很有趣,但在我测试时,它不能在请求中同时提供表模式。当使用文档指南手动将JSON整数设置为字符串时,它可以正常工作,符合表模式。我认为接下来的方法是编辑JSON解码函数,自动将相关属性转换为字符串,就像其他线程所探索的那样。

相关内容

  • 没有找到相关文章

最新更新