【问题标题】: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 对象并评估两者,看看它们是否相等。

标签: python dataframe google-bigquery bigdata


【解决方案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
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-22
      • 2017-05-17
      • 2014-11-22
      • 2015-02-08
      相关资源
      最近更新 更多