正在将JSON上载到Bigquery unspecifi

2024-04-27 03:22:27 发布

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

在短暂试用(https://github.com/pydata/pandas-gbq)并意识到pandas gbq不支持记录类型(即不支持嵌套字段)之后,我才开始使用python BigQuery API(https://github.com/GoogleCloudPlatform/google-cloud-python/tree/master/bigquery)。在

现在我尝试将嵌套数据上传到BigQuery。我设法用各自的模式创建了表,但是我在json数据的上传上遇到了困难。在

from google.cloud import bigquery
from google.cloud.bigquery import dataset
from google.cloud.bigquery import LoadJobConfig
from google.cloud.bigquery import SchemaField

SCHEMA = [
    SchemaField('full_name', 'STRING', mode='required'),
    SchemaField('age', 'INTEGER', mode='required'),
    SchemaField('address', 'RECORD', mode='REPEATED', fields=(
        SchemaField('test', 'STRING', mode='NULLABLE'),
        SchemaField('second','STRING', mode='NULLABLE')
    ))
]

table_ref = client.dataset('TestApartments').table('Test2')

table = bigquery.Table(table_ref, schema=SCHEMA)
table = client.create_table(table)

当尝试将一个非常简单的JSON上传到bigquery时,我得到了一个相当模糊的错误

400 Error while reading data, error message: JSON table encountered too many errors, giving up. Rows: 1; errors: 1. Please look into the error stream for more details.

除了它放弃我让我有点难过之外,显然错误描述并没有真正的帮助。。。 下面是我如何上传JSON和sampledata的。在

^{pr2}$

这是我的JSON对象

"[{'full_name':'test','age':2,'address':[{'test':'hi','second':'hi2'}]}]"

一个JSON示例将是非常棒的,因为如果我没弄错的话,这似乎是上传嵌套数据的唯一方法。在


Tags: 数据fromhttpstestimportgithubcomjson
2条回答

我一直在使用相同的代码和共享的JSON内容来重现您的场景,我怀疑问题只是您在引号("或{})之间定义JSON内容,而它不应该有这种格式。在

正确的格式是@elliotbrossard在他的回答中已经与您分享的格式:

{'full_name':'test', 'age':2, 'address': [{'test':'hi', 'second':'hi2'}]}

如果我在testjson.json文件中使用该内容运行您的代码,我将得到响应Loaded 1 rows into MY_DATASET:MY_TABLE,并将内容加载到表中。否则,如果我使用下面的格式(您根据您的问题和另一个答案中的注释使用该格式),我将得到结果google.api_core.exceptions.BadRequest: 400 Error while reading data, error message: JSON table encountered too many errors, giving up. Rows: 1; errors: 1. Please look into the error stream for more details。在

^{pr2}$

此外,您可以转到BigQuery UI中的Jobs页面(点击链接https://bigquery.cloud.google.com/jobs/YOUR_项目_ID),您将在那里找到有关失败加载作业的更多信息。例如,当我用错误的JSON格式运行代码时,我得到的结果是:

{a1}

如您所见,这里的错误消息更为相关:

error message: JSON parsing error in row starting at position 0: Value encountered without start of object

它表示它找不到JSON对象的任何有效开头(即在对象的最开始处有一个括号{)。在

TL;DR:删除JSON对象中的引号,加载作业应该没问题。在

我认为您的JSON内容应该是:

{'full_name':'test','age':2,'address':[{'test':'hi','second':'hi2'}]}

(无括号。)例如,使用命令行客户端:

^{pr2}$

相关问题 更多 >