使用 Pandas 附加 BigQuery 表时如何修复无效架构
Posted
技术标签:
【中文标题】使用 Pandas 附加 BigQuery 表时如何修复无效架构【英文标题】:How do I fix Invalid Schema when appending a BigQuery table using Pandas 【发布时间】:2020-08-30 10:25:16 【问题描述】:我正在尝试使用 Pandas 和 google-cloud-big 查询将数据附加到 BigQuery 中的表。我遇到的问题是我最初可以使用if_exists=append
创建一个表,但是当我重新运行完全相同的查询时,我得到一个错误 -
"pandas_gbq.gbq.InvalidSchema: 请验证结构和 DataFrame 中的数据类型与目标的模式匹配 表。”
这是我正在运行的代码:
import pandas as pd
from datetime import date
import pandas_gbq
from google.cloud import bigquery
output = [['Test', 'v1', 'cost_center', '123', date(2020, 1, 31), 30.0],
['Test', 'v1', 'cost_center', '345', date(2020, 1, 31), 72.0]]
headers = ['scenario', 'version', 'entity', 'account', 'period', 'amount']
df_output = pd.DataFrame(output, columns=headers)
dataset_table = 'my_dataset'
project_id ='my_project_id'
table_schema = ['name':'scenario', 'type':'string',
'name':'version', 'type':'string',
'name':'entity', 'type':'string',
'name':'account', 'type':'string',
'name':'period', 'type':'date',
'name':'amount', 'type':'float'
]
df_output.to_gbq(destination_table=dataset_table,
project_id= project_id,
if_exists='append',
table_schema=table_schema)
这个问题好像以前遇到过,here。但是没有答案。关于 SO 的其他问题涉及数据框模式和 BQ 表模式之间存在类型差异的问题。
为了进一步简化问题,我尝试让所有列都有'type':'String'
,但我得到了相同的错误消息。
感谢您的帮助。
这是脚本运行一次后 BQ UI 中表架构的屏幕截图。
【问题讨论】:
你能分享你的pandas
版本吗?
我正在使用Pandas 1.0.3
和Pandas-gbq 0.13.1
。
也在 Windows 10 机器上使用 python 3.8.2
我与维护 Pandas-gbq 的人交谈过。他建议我升级到 0.13.2 版本应该可以解决问题。我做了升级,但问题仍然存在。当前版本现在是Panda-gbq 0.13.2
我认为你应该写 'float64' 作为 'amount' 的类型。 BigQuery 中没有浮点类型。
【参考方案1】:
我可以重现与您相同的错误,并且在 pandas 库中放置一些调试输出后(您可以这样做),当类型名称为大写时,它适用于我
table_schema = ['name':'scenario', 'type':'STRING',
'name':'version', 'type':'STRING',
'name':'entity', 'type':'STRING',
'name':'account', 'type':'STRING',
'name':'period', 'type':'DATE',
'name':'amount', 'type':'FLOAT'
【讨论】:
感谢您指出 table_schema 中的错字。我已经在问题中纠正了它。这不是问题的原因。 我已在 BigQuery 中删除了该表并重新运行该脚本,尝试不同的方法多次更正它。添加 'mode' : 'required' 没有解决问题,所以我把它拿回来了。 您能否检查 BigQuery UI 并粘贴 UI 中表格外观的屏幕截图? 我已将截图添加到问题部分 成功!谢谢你。解决方案是确保类型是大写字母。以上是关于使用 Pandas 附加 BigQuery 表时如何修复无效架构的主要内容,如果未能解决你的问题,请参考以下文章
使用带有自动模式检索的 LoadJobs 时如何处理 Avro 到 BigQuery 的类型转换
由于 InvalidSchema 错误,将 Pandas 上传到 BigQuery 失败