bigquery 标准 sql 错误,时间戳无效
Posted
技术标签:
【中文标题】bigquery 标准 sql 错误,时间戳无效【英文标题】:bigquery standard sql error, invalid timestamp 【发布时间】:2016-12-17 06:11:42 【问题描述】:我正在使用 bigquery 中的一些表,但收到此错误:
无法返回相对于 Unix 纪元的 -62169990264000000 微秒的无效时间戳值。 有效时间戳值的范围是 [0001-01-1 00:00:00, 9999-12-31 23:59:59.999999]
在legacy sql中查询并升序排序,显示为0001-11-29 22:15:36 UTC
它是如何转化为微秒的?
这是查询:
#standardSQL
SELECT
birthdate
FROM
X
WHERE
birthdate IS NOT NULL
ORDER BY
birthdate ASC
【问题讨论】:
显示产生错误的查询 更改了细节,现在添加 【参考方案1】:**strong text
**Confirming ,在 BigQuery Legacy SQL 中
SELECT USEC_TO_TIMESTAMP(-62169990264000000)
产生 0001-11-29 22:15:36 UTC 时间戳
而在 BigQuery 标准 SQL 中
SELECT TIMESTAMP_MICROS(-62169990264000000)
产生错误: TIMESTAMP 值超出允许范围:从 0001-01-01 00:00:00.000000+00 到 9999-12-31 23:59:59.999999+00。
它是如何在微秒内转换的?
时间戳
您可以将 TIMESTAMP 数据类型描述为 UNIX 时间戳或日历日期时间。 BigQuery 在内部将 TIMESTAMP 数据存储为带有 microsecond precision
的 UNIX 时间戳。
查看更多关于TIMESTAMP类型
【讨论】:
【参考方案2】:0001 年 1 月 1 日的午夜(标准 SQL 中可能的最小时间戳值)相对于 UNIX 纪元为 -62135596800000000(以微秒为单位),大于 -62169990264000000。我没有很好地解释旧版 SQL 与该时间戳值的行为,但您可以在this item on the issue tracker 中阅读有关在标准 SQL 中处理它的一些建议。我们还计划在未来在迁移指南中添加一些关于此时间戳行为的内容。
【讨论】:
以上是关于bigquery 标准 sql 错误,时间戳无效的主要内容,如果未能解决你的问题,请参考以下文章