如何解决通过python客户端插入的bigquery中重复出现的字段错误?

2024-07-05 11:23:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用的google api以json格式返回数据,如下所示:

{
            "storageLocations": [
                "us"],      
            
"autoCreated": true,
            
"downloadBytes": "77557"

}

返回的字段之一是storageLocations,它看起来像一个数组类型,因此我在bigquery中将其定义为重复字段

我需要使用python big query client将此数据插入到big query中,因此对于该字段,我在big query中创建了以下结构。 enter image description here

为了创建每一行,我添加了一个空字段row={},然后循环json响应并分配它,如下所示:

row["storageLocations.locations"]=response["storageLocations"]
  row["autoCreated"]= response["autoCreated"]

插入数据时

对于storageLocations我得到了这个错误

 u'insertErrors': [{u'index': 0, u'errors': [{u'debugInfo': u'', u'reason': u'invalid', u'message': u'no
     such field.', u'location': u'storageLocations.locations'}]}

我也试过row["storageLocations"]["locations"],但也不起作用

因为我对python和big query还不熟悉,所以我不确定这个错误

谢谢你的建议


Tags: 数据apijsontrueresponse格式错误google
1条回答
网友
1楼 · 发布于 2024-07-05 11:23:55

通常,当您使用重复记录时,往往会有多个叶字段,或者您计划将来添加更多

您正在处理的JSON响应看起来可能只需要使用字符串数组

例如:

schema=[
    bigquery.SchemaField("storageLocations", "STRING", mode="REPEATED"),
    bigquery.SchemaField("autoCreated", "BOOL"),
    bigquery.SchemaField("downloadBytes", "INT64"),
]

使用更简单的模式,您应该能够在插入行时发送字符串值的列表/元组,例如row["storageLocations"] = ['a','b','c']

如果没有这一点,您需要构建一个更加复杂的行,正如您所发现的那样

相关问题 更多 >