我正在尝试通过熊猫将表追加到其他表,从BigQuery提取数据并将其发送到其他BigQuery数据集。虽然表架构完全相同,但出现错误“”,请确认结构和“ pandas_gbq.gbq.InvalidSchema:请验证DataFrame中的结构和数据类型是否与目标表的模式匹配。“
此错误发生在较早的地方,我去过表重写,但是在这种情况下,数据集太大而无法做到这一点(这不是可持续的解决方案)。
df = pd.read_gbq(query, project_id="global-dashboard-146013", 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
然后我得到以下错误:
回溯(最近一次通话最后一次):文件“ ..file.py”,第63行,在 main()
文件“ ..file.py”,第57行,在主目录中 updates_general_data(bigquery_key)
文件“ ..file.py”,第46行,位于update_general_data中 凭证= bigquery_key)
文件 “ .. \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ site-packages \ pandas \ io \ gbq.py”, 第162行,位于to_gbq中 凭据=凭证,详细=详细,private_key = private_key)
文件 “ .. \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ site-packages \ pandas_gbq \ gbq.py”, 第1141行,在to_gbq中 “请验证该结构和” pandas_gbq.gbq.InvalidSchema:请验证该结构和 DataFrame中的数据类型与目标表的模式匹配。
在我看来,似乎有一对一的比赛。我已经看到其他线程对此进行了讨论,这些线程主要是在讨论日期格式,即使在这种情况下日期格式已经是字符串,并且仍将table_schema设置为字符串。
答案 0 :(得分:0)
最有可能出现问题是因为DataFrame和Schema中的列名不匹配
答案 1 :(得分:0)
我的数据框中有一列名为“No”。删除句点可以解决问题,并推断出架构。