首页 > 解决方案 > 如何解决通过python客户端插入的大查询中的重复字段错误?

问题描述

我正在使用一个 google api,它以 json 格式返回数据,如下所示:

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

}

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

我需要使用 python-big-query client 将此数据插入到 big-query 中,因此对于该字段,我在 big-query 中创建了以下结构。 在此处输入图像描述

为了创建每一行,我添加了一个空字段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 新手,大查询不确定错误。

感谢您的建议。

标签: pythongoogle-bigquerypython-requestsgoogle-api-python-client

解决方案


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

您正在使用的 JSON 响应看起来可能只想使用字符串数组。

例如:

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

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

如您所见,没有这个,您需要构建一个更复杂的行。


推荐阅读