bigquery标准sql错误,无效的时间戳

时间:2016-12-17 06:11:43

标签: google-bigquery standard-sql

我在bigquery中玩一些表格,我收到了这个错误:

相对于Unix纪元,无法返回-62169990264000000微秒的无效时间戳值。 有效时间戳值的范围是[0001-01-1 00:00:00,9999-12-31 23:59:59.999999]

在legacysql中执行查询并排序ascendent它显示为0001-11-29 22:15:36 UTC

它是如何在微秒内转换的?

这是查询:

#standardSQL
SELECT
  birthdate
FROM
  X
WHERE
  birthdate IS NOT NULL
ORDER BY
  birthdate ASC

2 个答案:

答案 0 :(得分:2)

0001年1月1日午夜(标准SQL中的最小可能时间戳值)是相对于UNIX纪元的微秒级的-62135596800000000,大于-62169990264000000。对于具有该时间戳值的遗留SQL行为,我没有很好的解释,但您可以在this item on the issue tracker中阅读有关在标准SQL中处理它的一些建议。我们计划在迁移指南中添加一些有关此时间戳行为的内容。

答案 1 :(得分:2)

** strong text **确认,在BigQuery Legacy SQL中

SELECT USEC_TO_TIMESTAMP(-62169990264000000)

生成0001-11-29 22:15:36 UTC时间戳

而在BigQuery Standard SQL中

SELECT TIMESTAMP_MICROS(-62169990264000000)  

产生错误: TIMESTAMP值超出允许范围:从0001-01-01 00:00:00.000000 + 00到9999-12-31 23:59:59.999999 + 00。

  

它如何在微秒内转换?

TIMESTAMP
您可以将TIMESTAMP数据类型描述为UNIX时间戳或日历日期时间。 BigQuery在内部将TIMESTAMP数据存储为带有 microsecond precision 的UNIX时间戳。

详细了解TIMESTAMP类型