1

我正在尝试将 Pandas 中DataFrame的数据加载到 BigQuery 表中。有DataFrame一个 dtype 列datetime64[ns],当我尝试使用存储 df 时load_table_from_dataframe(),我得到

google.api_core.exceptions.BadRequest:400 提供的架构与表 [表名] 不匹配。字段 compute_triggered_time 已将类型从 DATETIME 更改为 TIMESTAMP。

该表具有读取的模式

CREATE TABLE `[table name]` (
  ...
  computation_triggered_time    DATETIME  NOT NULL,
  ...
)

在 中DataFramecomputation_triggered_time是一datetime64[ns]列。当我从 CSV 读取原件DataFrame时,我将其从文本转换为日期时间,如下所示:

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 并且如果数据具有纳秒精度则失败。错误类似于

[...] 从时间戳 [ns] 转换为时间戳 [ms] 会丢失数据

4

1 回答 1

1

这看起来像是谷歌的 google-cloud-python 包的问题,​​你能报告那里的错误吗?https://github.com/googleapis/google-cloud-python

于 2018-11-16T14:44:04.387 回答