Итак, у меня есть скрипт для обновления базы данных Google BigQuery с помощью фрейма данных, используя функцию pandas to_gbq()
.Я сравниваю, если в фрейме данных такое же количество столбцов с текущей таблицей, и добавляю пропущенные столбцы с соответствующим типом данных, если столбцов меньше, но я все равно получаю сообщение об ошибке: Please verify that the structure and data types in the DataFrame match the schema of the destination table
Я проверил, и номера столбцов совпадают, поэтомуделать типы данных, вот код, который я использую для добавления столбцов,
localdfdict = df.dtypes.to_dict()
if len(localdfdict.keys()) < 10:
query = """
SELECT
*
FROM `{}.{}`
LIMIT 1
""".format('abx', dbname)
onlinecols = list(pd.read_gbq(query, project_id=project_id, dialect='standard'))
for name in localdfdict.keys():
if name not in onlinecols:
table_ref = client.dataset('abx').table(dbname)
table = client.get_table(table_ref) # API request
original_schema = table.schema
new_schema = original_schema[:] # creates a ecopy of the schema
if localdfdict[name] == object:
new_schema.append(bigquery.SchemaField(name, 'STRING'))
print('added a column {} to table {}'.format(name,dbname))
elif localdfdict[name] == int:
new_schema.append(bigquery.SchemaField(name, 'INT64'))
print('added a column {} to table {}'.format(name, dbname))
elif localdfdict[name] ==bool:
new_schema.append(bigquery.SchemaField(name, 'BOOL'))
print('added a column {} to table {}'.format(name, dbname))
elif localdfdict[name] == float:
new_schema.append(bigquery.SchemaField(name, 'FLOAT64'))
print('added a column {} to table {}'.format(name, dbname))
table.schema = new_schema
table = client.update_table(table, ['schema']) # API request
assert len(table.schema) == len(original_schema) + 1 == len(new_schema)
Может кто-нибудь сказать мне, почему эта ошибка продолжает появляться?