DateTime在BigQuery中被强制为UnixtTime

DateTime在BigQuery中被强制为UnixtTime,datetime,google-cloud-platform,google-bigquery,Datetime,Google Cloud Platform,Google Bigquery,我在上传到BQ时遇到了一些问题,所以我想在这里发帖征求意见是个好主意。我有一个医疗信息的数据集(是的,我已经批准把它放在BQ上)。数据集包含测试的总体结果和其他字符串类型信息,BQ接受这些信息没有问题。这是我们目前在BQ中所期望的模式 a STRING NULLABLE b STRING NULLABLE c STRING

我在上传到BQ时遇到了一些问题,所以我想在这里发帖征求意见是个好主意。我有一个医疗信息的数据集(是的,我已经批准把它放在BQ上)。数据集包含测试的总体结果和其他字符串类型信息,BQ接受这些信息没有问题。这是我们目前在BQ中所期望的模式

a                       STRING       NULLABLE   
b                       STRING       NULLABLE   
c                       STRING       NULLABLE   
d                       STRING       NULLABLE   
reportDate              DATETIME     NULLABLE   
f                       STRING       NULLABLE   
这里是我导出的Pandas数据帧中每列的DYPE,其中
对象
只是字符串

a                                object
b                                object
c                                object
d                                object
reportDate               datetime64[ns]
f                                object
然而,它真的不喜欢我的数据时间。它将只接受它,我将模式中的类型设置为“整数”,或者如果它让BQ推断类型,在这种情况下,它会将其自身转换为整数。否则,它将失败。下面是我告诉它接受datetime作为字段类型时遇到的3个错误

 Error while reading data, error message: JSON table encountered too many errors, giving up. Rows: 1; errors: 1. Please look into the errors[] collection for more details. 
 Error while reading data, error message: JSON processing encountered too many errors, giving up. Rows: 1; errors: 1; max bad: 0; error percent: 0 
 Error while reading data, error message: JSON parsing error in row starting at position 0: Could not convert non-string JSON value to DATETIME type. Field: reportDate; Value: 1501874143000 
我的团队希望它成为一个日期时间,因为他们更容易使用这种格式。有人对该怎么做有什么建议吗

我已经包括了我使用的Pandas系列的前5个元素,我们可以看到数据类型是datetime64。我甚至只筛选了这5个要上传到BQ的例子,但这个问题仍然存在

 0   2017-08-04 19:15:43 
 1   2017-08-04 16:36:46 
 2   2017-08-04 19:15:47 
 3   2017-08-04 16:36:51 
 4   2017-08-04 17:42:21 
Name: reportDate, dtype: datetime64[ns] 

感谢所有能提供帮助的人

您的代码似乎正在将此字段保存为纪元日期(unix时间)。 由于在
BigQuery
中无法将
整数
字段作为
时间戳
加载,因此我可以建议您两件可能的事情:

  • 您可以将字段加载为
    整数
    ,并使用BigQuery的
    USEC_TO_TIMESTAMP
    函数将历元日期转换为时间戳。你可以找到其他一些时间函数
  • 您可以尝试在
    Pandas

  • 希望它能帮助你

    你如何上传到BQ?哪种格式?我使用的是用户界面,文件格式是换行删除JSOND加载文件时是否使用特定的模式?如果你使用,你能提供它吗?试着把DATETIME改成Timestamp我刚刚编辑了这篇文章,以指示我的数据的模式和动态。我还尝试了TIMESTAMP并得到了错误:相对于Unix历元,无法返回1501874143000000000微秒的无效时间戳值。有效时间戳值的范围为[0001-01-1 00:00:00,9999-12-31 23:59:59.99999];写入字段ReportDate时出错感谢您的输入。实际上我现在可以上传了。我从你的帖子中得到了一些建议:“似乎你的代码正在将这个字段保存为一个划时代的日期”。我不确定python/BQ到底是如何解释datetime保存在其中的datetime64[ns]的,所以我在python中将datetime64[ns]转换为date,然后转换为string,然后创建了预期日期的模式。这使我能够按照团队的期望创建场地。谢谢你让我在这里跳板!