配置单元odbc驱动程序无法识别unix\u时间戳

kiayqfof  于 2021-06-27  发布在  Hive
关注(0)|答案(1)|浏览(333)

短版本:
如何通过odbc驱动程序获得两个时间戳之间的秒差?
长版本:
使用odbc进行简单查询(不是我使用cast(。。。作为时间戳)要有一个独立的行,实际查询将针对一个包含时间戳数据的表运行:

select unix_timestamp(cast('2019-02-01 01:02:03' as timestamp)) as tto

我收到了错误信息:
unix\u timestamp不是有效的标量函数或过程调用
我找不到任何配置选项可以改变这一点。本机查询被禁用(因为我使用的是prepared语句),其他函数工作正常。我猜unix\u timestamp()(不带参数)已经被弃用了,驱动程序对阻止使用这个函数有点热情。
我试图解决这个问题,并将时间戳转换为bigint,而不是使用unix\u timestamp函数:

select cast(cast('2019-02-01 01:02:03' as timestamp) as bigint)

这个很好用!但是当我试图得到两个时间戳的差值时:

select cast(cast('2019-02-01 01:02:03' as timestamp) as bigint) - cast(cast('2019-02-01 01:02:03' as timestamp) as bigint)

我收到消息了
操作数类型sql\u wchar和sql\u wchar对于二进制减号运算符不兼容
(但仅适用于复杂查询,如果查询仅包含此select,则不适用)。
驱动程序将接受两个时间戳之间的差异,但最后我得到了一个interval类型,我无法将其转换回seconds。
我认为这些是odbc驱动程序中的bug,但是我不能联系hortonworks,因为我不是付费客户,我也不能联系simba,因为我不是付费客户。
顺便说一句,如果我想用 floor 函数,我得到一个信息:
“floor”是保留关键字。
是的,我知道它是保留的,我实际上是在尝试取消它。
你知道我该怎么处理吗?

qltillow

qltillow1#

简而言之,如果您不能使用本机语句(即,如果您需要参数化查询),那么官方的hiveodbc驱动程序就非常糟糕。
我建议的解决办法是要么得到一个付费的(例如。https://www.progress.com/datadirect-connectors -我试过了,效果很好)或者如果您的应用程序可以支持的话,只使用jdbc。我为配置单元找到的所有odbc驱动程序都是jdbc驱动程序的 Package 器,捆绑了jre。

相关问题