【发布时间】:2021-01-12 11:53:15
【问题描述】:
我正在将 Pandas 中的日期时间字段加载到 Google BigQuery DATETIME 并收到以下错误:
google.api_core.exceptions.BadRequest: 400 Error while reading data, error message: Invalid datetime value 1594835746000000 for field 'my field name' of type 'INT64' (logical type 'TIMESTAMP_MICROS'): generic::out_of_range: Cannot return an invalid datetime value of 1594835746000000 microseconds relative to the Unix epoch. The range of valid datetime values is [0001-01-1 00:00:00, 9999-12-31 23:59:59.999999]
在 Pandas 中,该对象绝对是 datetime.datetime 对象,并且具有有效日期,当我从 1594835746000000 到 https://www.epochconverter.com/ 时,它返回一个有效日期。
我正在通过调用将数据加载到 BigQuery:
job_config = bigquery.LoadJobConfig(schema = schema_fieldlist)
job = bigquery_client.load_table_from_dataframe(df, f'{dataset}.{tablename}', job_config)
job.result()
在哪里 schema_fieldlist 是一个数组,对于相关字段,定义为:
bigquery.SchemaField('my field name', 'DATETIME')
我没有做任何聪明的事情 - 任何人都可以建议他们是否可以让这个工作以及如何工作?我已经看到与返回时间戳以及标准和旧 SQL 方言之间有效范围的变化有关的其他问题
【问题讨论】:
-
我相信这可能是当前持续存在的问题。检查this 类似的问题跟踪器。我建议尝试使用 TIMESTAMP 类型作为解决方法,看看它是否适用于您的情况。
-
谢谢。我同意看起来一样,并且切换时间戳有效
-
pandas-gbq 使用 CSV 序列化而不是 Parquet。您也可以考虑使用它。
标签: python-3.x google-bigquery