Использование pandas.to_gbq () для обновления больших запросов.Убедитесь, что структура и типы данных в DataFrame соответствуют схеме таблицы назначения. - PullRequest
0 голосов
/ 19 февраля 2019

Итак, у меня есть скрипт для обновления базы данных 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)

Может кто-нибудь сказать мне, почему эта ошибка продолжает появляться?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...