我尝试通过panda将一个表追加到另一个表,从BigQuery中提取数据并将其发送到另一个BigQuery数据集。虽然表架构完全相同,但我收到错误“请验证结构和“panda_gbq.gbq.InvalidSchema:请验证DataFrame中的结构和数据类型是否与目标表的架构匹配。”
这个错误发生在早些时候,我去覆盖表,但在这种情况下,数据集太大,这样做(这不是一个可持续的解决方案)。
df = pd.read_gbq(query, project_id="my-project", credentials=bigquery_key,
dialect='standard')
pd.io.gbq.to_gbq(df, dataset, projectid,
if_exists='append',
table_schema=[{'name': 'Date','type': 'STRING'},
{'name': 'profileId','type': 'STRING'},
{'name': 'Opco','type': 'STRING'},
{'name': 'country','type': 'STRING'},
{'name': 'deviceType','type': 'STRING'},
{'name': 'userType','type': 'STRING'},
{'name': 'users','type': 'INTEGER'},
{'name': 'sessions','type': 'INTEGER'},
{'name': 'bounceRate','type': 'FLOAT'},
{'name': 'sessionsPerUser','type': 'FLOAT'},
{'name': 'avgSessionDuration','type': 'FLOAT'},
{'name': 'pageviewsPerSession','type': 'FLOAT'}
],
credentials=bigquery_key)
BigQuery中的模式如下所示:
Date STRING
profileId STRING
Opco STRING
country STRING
deviceType STRING
userType STRING
users INTEGER
sessions INTEGER
bounceRate FLOAT
sessionsPerUser FLOAT
avgSessionDuration FLOAT
pageviewsPerSession FLOAT
然后我得到以下错误:
Traceback (most recent call last): File "..file.py", line 63, in
<module>
main()
File "..file.py", line 57, in main
updating_general_data(bigquery_key)
File "..file.py", line 46, in updating_general_data
credentials=bigquery_key)
File
"..\AppData\Local\Programs\Python\Python37-32\lib\site-packages\pandas\io\gbq.py",
line 162, in to_gbq
credentials=credentials, verbose=verbose, private_key=private_key)
File
"..\AppData\Local\Programs\Python\Python37-32\lib\site-packages\pandas_gbq\gbq.py",
line 1141, in to_gbq
"Please verify that the structure and " pandas_gbq.gbq.InvalidSchema: Please verify that the structure and
data types in the DataFrame match the schema of the destination table.
在我看来,这似乎是一个1对1的匹配,我看到其他线程讨论这个问题,这些线程主要讨论日期格式,即使日期格式已经是一个字符串在这种情况下,然后与表_模式仍然作为字符串.
4条答案
按热度按时间brtdzjyr1#
最终的“解决方案”是手动指定模式,而不是手动指定模式,因为手动指定模式总是容易出现类型转换/命名错误。最好总是从表中获取模式。因此,客户端使用最新版本的API:
获取要写入/追加到的表:
从表生成架构:
相应地重命名 Dataframe :
在将同一架构推送到BigQuery时传递该架构:
chhkpiq42#
我在这方面遇到了真实的的问题,通过使用
pandas-gbq
创建数据库(而不是在UI中创建数据库)并尝试匹配模式来修复它nwo49xxi3#
我的 Dataframe 中有一列名为“No”。删除句点就解决了这个问题,并且可以推断出模式。
zwghvu4y4#
出现此问题的原因很可能是DataFrame和Schema中的列名不匹配