Я пытаюсь загрузить данные из Pandas DataFrame
s в таблицу BigQuery.У DataFrame
есть столбец dtype datetime64[ns]
, и когда я пытаюсь сохранить df с помощью load_table_from_dataframe()
, я получаю
google.api_core.exceptions.BadRequest: 400 Предоставленная схема неТаблица соответствия [имя таблицы].Поле computation_triggered_time изменило тип с DATETIME на TIMESTAMP.
В таблице есть схема, которая читает
CREATE TABLE `[table name]` (
...
computation_triggered_time DATETIME NOT NULL,
...
)
В DataFrame
, computation_triggered_time
- это столбец datetime64[ns]
,Когда я читаю оригинал DataFrame
из CSV, я преобразую его из текста в дату и время следующим образом:
df['computation_triggered_time'] = \
df.to_datetime(df['computation_triggered_time']).values.astype('datetime64[ms]')
Примечание:
Часть .values.astype('datetime64[ms]')
необходимо, потому что load_table_from_dataframe()
использует PyArrow для сериализации df, и это терпит неудачу, если данные имеют точность наносекунды.Ошибка выглядит примерно так:
[...] Приведение из отметки времени [нс] к отметке времени [мс] приведет к потере данных