【发布时间】:2018-11-02 03:37:55
【问题描述】:
在短暂尝试 (https://github.com/pydata/pandas-gbq) 并意识到 pandas-gbq 不支持 RECORD 类型,即没有嵌套字段后,我才刚刚开始使用 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 读取数据时出错,错误信息:遇到 JSON 表 错误太多,放弃。行数:1;错误:1.请查看 错误流以获取更多详细信息。
除了它放弃我让我有点难过之外,显然错误描述并没有真正帮助...... 请在下面找到我如何尝试上传 JSON 和示例数据。
job_config = bigquery.LoadJobConfig()
job_config.source_format = bigquery.SourceFormat.NEWLINE_DELIMITED_JSON
with open('testjson.json', 'rb') as source_file:
job = client.load_table_from_file(
source_file,
table_ref,
location='US', # Must match the destination dataset location.
job_config=job_config) # API request
job.result() # Waits for table load to complete.
print('Loaded {} rows into {}:{}.'.format(
job.output_rows, dataset_id, table_id))
这是我的 JSON 对象
"[{'full_name':'test','age':2,'address':[{'test':'hi','second':'hi2'}]}]"
如果我没记错的话,这似乎是上传嵌套数据的唯一方法。
【问题讨论】:
标签: python json google-bigquery