【问题标题】:bigquery standard sql error, invalid timestampbigquery 标准 sql 错误,时间戳无效
【发布时间】: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

【问题讨论】:

  • 显示产生错误的查询
  • 更改了细节,现在添加

标签: google-bigquery


【解决方案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 中处理它的一些建议。我们还计划在未来在迁移指南中添加一些关于此时间戳行为的内容。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-30
      • 1970-01-01
      • 2017-08-14
      • 2019-04-13
      • 2017-04-08
      • 1970-01-01
      • 2020-08-05
      • 1970-01-01
      相关资源
      最近更新 更多