当尝试使用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值触发异常?
答案 0 :(得分:0)
更新:由于这是在JDBC驱动程序创建的Timestamp中发生的,因此它似乎确实是JDBC驱动程序本身的错误。请在https://issuetracker.google.com/issues?q=componentid:187149下提交。
原件: BigQuery中的时间戳分辨率是微秒,看起来你提供的值是以秒为单位,所以你应该将它乘以1000000。
答案 1 :(得分:0)
这应该通过比驱动程序 1.1.1 更新的版本来解决,这也解决了其他与时间戳相关的问题。
如果问题仍然存在,请在Google issue tracker报告,然后重新审核。