关于数据框中的日期时间与谷歌大查询中的日期时间的问题

Posted

技术标签:

【中文标题】关于数据框中的日期时间与谷歌大查询中的日期时间的问题【英文标题】:Question about DateTime in Data Frame vs DateTime in Google Big Query 【发布时间】:2018-11-30 19:21:10 【问题描述】:

我正在尝试将数据从数据框中推送到 Google Big Query。

我将数据框的日期字段设置为

df['time'] = df['time'].astype('datetime64[ns]')

我将 Google 的大查询日期设置为 *DATETIME*。当我从 Python 导出到 GBQ 时,出现此错误:

InvalidSchema:请验证结构和数据类型在 DataFrame 匹配目标表的架构。

如果我把所有东西都变成字符串格式,它就可以工作。我认为您不能只将数据框字段设置为date,对吗?有没有一种聪明的方法可以让它工作,还是必须将日期设置为字符串?

TIA。

【问题讨论】:

你能打印出 df['time'] 看看它是否匹配the format BQ needs?您甚至可以创建相同日期的 dateTime 对象并评估两者,看看它们是否相等。 【参考方案1】:

我发现使用日期和日期时间类型列的数据加载不起作用。所以我尝试使用数据类型时间戳,然后可以将数据加载到 bigquery 表中。

在为日期列定义架构时,将其定义为时间戳,如下所示。

bigquery.SchemaField('dateofbirth', 'timestamp')

并将数据框列数据类型从对象转换为 bigquery 可以理解的其他日期时间格式。

df.dateofbirth=df.dateofbirth.astype('datetime64')

截至 2019 年 3 月 8 日,日期和日期时间列类型无效。

【讨论】:

【参考方案2】:

在 biguery 模式中将 datetime 数据类型更改为时间戳将为您提供一个添加 UTC 的时间值。对于我们中的大多数人来说,这可能不是理想的情况。不如试试下面的代码:

job_config = bigquery.LoadJobConfig(
    schema=table_schema, source_format=bigquery.SourceFormat.CSV
)
load_job = bigquery_client.load_table_from_dataframe(
    dataframe, table_id, job_config=job_config
)

【讨论】:

以上是关于关于数据框中的日期时间与谷歌大查询中的日期时间的问题的主要内容,如果未能解决你的问题,请参考以下文章

左连接以填充谷歌大查询中 2 个表中的数据

允许谷歌大查询中的大结果

谷歌大数据三篇论文啥时候发表的

计算谷歌大查询中的每周留存率

BigRQuery 如何更新谷歌大查询表中的列?

google大查询sql中的性能增强