我有一个函数,从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解码函数,自动将相关属性转换为字符串,就像其他线程所探索的那样。