Pandas / sqlalchemy / pybigquery с указанием BIGINT вместо INT64 для целочисленного столбца - PullRequest
0 голосов
/ 14 февраля 2020

Я пытаюсь скопировать pandas фрейм данных в таблицу BigQuery, используя sqlalchemy (и pybigquery за кулисами). Тем не менее, я получаю сообщение об ошибке, потому что sqlalchemy пытается создать столбец типа BIGINT, но BigQuery распознает только INT64.

Вот некоторый код для воспроизведения ошибки:

import sqlalchemy as sqa, pandas as pd
db_engine = sqa.create_engine('bigquery://my-project/my_dataset', echo=True)
df = pd.DataFrame({'a': [1, 2], 'b': ['red', 'green']})
df.to_sql('test', db_engine, if_exists='replace', index=False)

Это отправляет следующий код SQL в BigQuery:

CREATE TABLE `test` (
    `a` BIGINT, 
    `b` STRING
)

Это приводит к ошибке: Type not found: BIGINT.

Странно, если я явно укажу, что столбец a должен быть рассматривается как целое число (добавляя dtype={'a': sqa.types.Integer, 'b': sqa.types.String} в последнюю строку), затем sqlalchemy просит BigQuery создать столбец INT64, и все работает нормально. Но я бы не стал жестко кодировать тип данных для каждого столбца.

Это мне кажется ошибкой либо в Pandas, либо в sqlalchemy. Я пытался диагностировать это, но заблудился в их коде. Кто-нибудь знает изящный способ обойти эту проблему, или знает, где я могу точно определить ошибку, чтобы создать запрос на извлечение?

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