简短版本:
如何通过ODBC驱动程序获得两个时间戳之间的秒数差异?
长版:
使用ODBC进行简单查询(不是我使用强制转换(...作为时间戳)来获得独立的行,而是对带有时间戳数据的表运行实际查询):
select unix_timestamp(cast('2019-02-01 01:02:03' as timestamp)) as tto
我收到错误消息:
unix_timestamp不是有效的标量函数或过程调用
我找不到任何可更改此设置的配置选项。本地查询已禁用(因为我使用的是准备好的语句),其他功能也正常工作。我的猜测是unix_timestamp()(不带参数)已过时,驱动程序对防止使用该函数有些热情。
我试图解决该问题,并将时间戳转换为bigint,而不是使用unix_timestamp函数:
select cast(cast('2019-02-01 01:02:03' as timestamp) as bigint)
这很好!但是,当我尝试获取2个时间戳记的差异时:
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_WCHAR和SQL_WCHAR与二进制不兼容 负运算符
(但仅适用于复杂查询,如果查询仅包含此选择,则不会)。
驱动程序将接受两个时间戳之间的差异,但随后我得到一个间隔类型,该类型无法转换回秒。
我认为这些是ODBC驱动程序中的错误,但是由于我不是付费客户,所以我无法联系Hortonworks,或者由于我不是付费客户而无法与Simba联系。
另一方面,如果我尝试使用floor
函数,则会收到消息:
“地板”是保留关键字。
是的,我知道它是保留的,我实际上是在尝试它。
有什么办法可以解决这个问题吗?
答案 0 :(得分:0)
简而言之,如果您不能使用本机语句(即,如果您需要参数化查询),那么官方的Hive ODBC驱动程序真的 really really 不好。
我建议的解决方法是要么得到一个有偿的(例如https://www.progress.com/datadirect-connectors-我试过了,它工作得很好),要么只要您的应用程序支持jdbc就可以。我为Hive找到的所有ODBC驱动程序无论如何都是jdbc的包装器,将jre捆绑在一起。