python - 如何解决通过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 新手,大查询不确定错误。
感谢您的建议。
解决方案
通常,当您使用重复记录时,您往往会拥有多个叶字段,或者您计划在未来添加更多。
您正在使用的 JSON 响应看起来可能只想使用字符串数组。
例如:
schema=[
bigquery.SchemaField("storageLocations", "STRING", mode="REPEATED"),
bigquery.SchemaField("autoCreated", "BOOL"),
bigquery.SchemaField("downloadBytes", "INT64"),
]
使用更简单的模式,您应该能够在插入行时发送字符串值的列表/元组,例如row["storageLocations"] = ['a','b','c']
如您所见,没有这个,您需要构建一个更复杂的行。
推荐阅读
- decision-tree - 基于方面的情感分析分类器 - 如何从分类器返回未知数的技术?
- javascript - AJAX 调用后 DataTables 不会运行渲染函数
- django - ImageFiled 无法在 django 中进行更新
- apache-zookeeper - 使用nmap检测zookeeper进程打开的端口
- batch-file - Windows批处理命令加密多个PGP文件
- java - 如何在不引用本地目录的情况下在 IntelliJ 中添加外部 jar 文件
- perl - Perl:如何在处理下一个之前等待 curl 步骤完成
- ruby-on-rails - 如何使用 Ruby on Rails 保存连接表
- python - 在一行中显示两个不同的 JSON 结果
- azure-batch - Azure Batch 多次重新运行作业(成功时,相同的输入和输出)