【发布时间】:2020-06-19 09:03:18
【问题描述】:
我目前正在尝试将 Pandas Dataframe (Python 3.x) 写入 Google Big Query。该表有一个 dtype 对象列,其中包含一个字符串值数组。
sample of pandas table 我的目标是创建一个维护嵌套表结构的 BQ 表,如下所示: sample of Big Query table 具有以下架构: schema of Big Query table
我使用 google-cloud-bigquery 库,因为它允许 df 转换为每个文档支持嵌套数组值的 Parquet 格式:
使用的代码:
client = bigquery.Client()
table_id = 'dataset.table'
job_config = bigquery.LoadJobConfig(
schema = [
bigquery.SchemaField('route_id', 'INTEGER'),
bigquery.SchemaField('types', 'STRING', mode='REPEATED')
],
writeDisposition="WRITE_APPEND"
)
job = client.load_table_from_dataframe(
df,
table_id,
job_config=job_config,
)
# Wait for the load job to complete.
job.result()
但不幸的是,我收到以下错误消息:
BadRequest: 400 读取数据时出错,错误消息:提供 架构与文件不兼容 'prod-scotty-76a528bc-407d-4224-8951-c8ff0c71faa1'。字段“类型”是 在提供的与 NULLABLE 不匹配的架构中指定为 REPEATED 文件中指定的。
到目前为止已经尝试过什么:
- 使用 RECORD 字段类型
但这导致了以下错误: https://github.com/googleapis/python-bigquery/issues/21
- 根本不在 python 中提供任何架构(并允许 Python/BQ 自行整理)
令人惊讶的是,这适用于第一次迭代 (CREATE_IF_NEEDED) 在 BQ 中创建一个表,该表维护嵌套结构并自动应用以下模式: auto-applied schema of BQ table,但如果您尝试再次追加确切的表,则会失败,返回与 1 下相同的错误。
有什么建议或提示吗?
【问题讨论】:
标签: python arrays python-3.x pandas google-bigquery