BigQuery JDBC Nanos否定

时间:2017-06-28 19:40:33

标签: jdbc google-bigquery

当尝试使用driver provided by Simba运行相当基本的查询时,我遇到的问题是“纳秒”值为负,导致IllegalArgumentException

当编写一个返回Timestamp值的简单查询时,返回的是一个最初存储在Double中的纪元值。例如,通过调试,我可以看到查询返回的值是“1.498571169792E9”。根据{{​​3}},这对应于“2017年6月27日星期二1:46:09.792 PM”的时间戳,这正是它应该是的。

继续逐步完成代码,我们最终尝试使用BQCoreUtils.convertUnixToTimestamp()。现在,虽然我试图反汇编这个类(感谢IntelliJ!),但我无法弄清楚发生了什么。它最终会尝试创建一个new TimestampTz(),它是java.sql.Timestamp的扩展名,但nanos传递的值为负数。这当然会提示Java抛出IllegalArgumentException,但我无法弄清楚我需要做些什么才能避免这种情况。

我也不知道对于发生的事情是否有更简单的解释。但最终,似乎存在驱动程序错误。 BQCoreUtils.convertUnixToTimestamp无法正确防范nanos非负面计算。

那么愚蠢的问题是:有没有其他人遇到过查询BigQuery的问题,其中Timestamp值触发异常?

2 个答案:

答案 0 :(得分:0)

更新:由于这是在JDBC驱动程序创建的Timestamp中发生的,因此它似乎确实是JDBC驱动程序本身的错误。请在https://issuetracker.google.com/issues?q=componentid:187149下提交。

原件: BigQuery中的时间戳分辨率是微秒,看起来你提供的值是以秒为单位,所以你应该将它乘以1000000。

答案 1 :(得分:0)

参考Google issue tracker

这应该通过比驱动程序 1.1.1 更新的版本来解决,这也解决了其他与时间戳相关的问题。

如果问题仍然存在,请在Google issue tracker报告,然后重新审核。