BigQuery JDBC Nanos否定

问题描述 投票:0回答:2

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

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

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

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

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

jdbc google-bigquery
2个回答
0
投票

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

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


0
投票

参考Google issue tracker

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

如果任何问题仍然存在,请在Google issue tracker报告,他们将重新开放审查。

© www.soinside.com 2019 - 2024. All rights reserved.