如何在 bigquery 中使用 python 将数据添加到 RECORD 类型的列
Posted
技术标签:
【中文标题】如何在 bigquery 中使用 python 将数据添加到 RECORD 类型的列【英文标题】:How to add data to a RECORD type column using python in bigquery 【发布时间】:2016-10-25 12:12:26 【问题描述】:我正在使用 python 并想在 bigquery 中写入表。表的架构如下所示:
test RECORD REPEATED
test.foo STRING NULLABLE
test.bar STRING NULLABLE
我想运行如下命令:
table = dataset.table(name='test_table')
table.insert_data(rows_to_insert)
输入 rows_to_insert 是什么样的。我不断收到错误: 在数组外添加重复值。
【问题讨论】:
【参考方案1】:假设您的架构定义为:
full_name = SchemaField('full_name', 'STRING', mode='REQUIRED')
area_code = SchemaField('area_code', 'STRING', 'REQUIRED')
local_number = SchemaField('local_number', 'STRING', 'REQUIRED')
rank = SchemaField('rank', 'INTEGER', 'REQUIRED')
phone = SchemaField('phone', 'RECORD', mode='NULLABLE',
fields=[area_code, local_number, rank])
那么您要插入的数据如下所示:
rows_to_insert = [
('Phred Phlyntstone', 'area_code': '800',
'local_number': '555-1212',
'rank': 1),
('Bharney Rhubble', 'area_code': '877',
'local_number': '768-5309',
'rank': 2),
('Wylma Phlyntstone', None),
]
【讨论】:
复制你的例子我得到 invalid_argument: Missing required field: full_name. 抱歉,我在加载架构时遇到了问题,我现在修复了这个问题,我收到错误消息:不支持记录叶类型【参考方案2】:我今天收到了Repeated value added outside of an array
,但不明白为什么,我似乎非常密切地遵循了这些示例。事实证明它适用于一些有限的情况,并且似乎与键的顺序有关......
这有点奇怪,戳了一会儿,我发现必须设置***属性json
,所以有效的是:
table.insert_data(["json": row for row in data])
而data
基本上是一个或多个字典的列表。
【讨论】:
话虽如此,我现在意识到我错了。一旦我有一个可行的解决方案,我会更新。【参考方案3】:我遇到了同样的问题并尝试了几个选项,我发现使用 Python API 在 BigQuery 中插入嵌套类型的正确方法,使用与 Dan McClary 相同的示例,如下所示:
full_name = SchemaField('full_name', 'STRING', mode='REQUIRED')
area_code = SchemaField('area_code', 'STRING', 'REQUIRED')
local_number = SchemaField('local_number', 'STRING', 'REQUIRED')
rank = SchemaField('rank', 'INTEGER', 'REQUIRED')
phone = SchemaField('phone', 'RECORD', mode='NULLABLE',
fields=[area_code, local_number, rank])
rows_to_insert = [
('Phred Phlyntstone', ['area_code': '800',
'local_number': '555-1212',
'rank': 1]),
('Bharney Rhubble', ['area_code': '877',
'local_number': '768-5309',
'rank': 2])
]
请注意,唯一的区别是您必须用[ ]
包围嵌套记录
【讨论】:
以上是关于如何在 bigquery 中使用 python 将数据添加到 RECORD 类型的列的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 python 将字典写入 Dataflow 中的 Bigquery
使用 Python 将 Google Cloud Storage 中的数据加载到 BigQuery 时,如何强制忽略双引号?
如何使用 Python 将 bigquery 返回的结果转换为 Json 格式?
如何使用 Apache Beam (Python) 将多个嵌套的 JSON 写入 BigQuery 表
如何使用 python API 在 bigquery 中创建新视图?
如何使用Appengine和来自API的Python脚本流数据将数据流式传输到Google Cloud BigQuery?