我正在尝试将 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,
...
)
在 中DataFrame,computation_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] 会丢失数据