【问题标题】:Hive ODBC driver does not recognise unix_timestampHive ODBC 驱动程序无法识别 unix_timestamp
【发布时间】:2019-02-18 15:06:16
【问题描述】:

短版:

如何通过 ODBC 驱动程序获得 2 个时间戳之间的秒数差异?

加长版:

使用 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 与二进制不兼容 减号运算符

(但仅适用于复杂查询,如果查询仅包含此选择,则不适用)。

驱动程序将接受 2 个时间戳之间的差异,但最终我得到一个间隔类型,我无法将其转换回秒。

我认为这些是 ODBC 驱动程序中的错误,但我无法联系 Hortonworks,因为我不是付费客户,也无法联系 Simba,因为我不是付费客户。

附带说明,如果我尝试使用 floor 函数,我会收到以下消息:

“floor”是保留关键字。

是的,我知道它是保留的,我实际上正在尝试使用它。

知道如何解决这个问题吗?

【问题讨论】:

    标签: sql hive odbc


    【解决方案1】:

    简而言之,如果您不能使用本机语句(即,如果您需要参数化查询),那么官方的 Hive ODBC 驱动程序真的真的 真的很糟糕。

    我建议的变通办法是要么买一个付费的(例如https://www.progress.com/datadirect-connectors - 我试过了,效果很好),或者如果你的应用程序支持它就只使用一个jdbc。无论如何,我为 Hive 找到的所有 ODBC 驱动程序都是 jdbc 的包装器,捆绑了一个 jre。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-20
      • 2015-04-10
      • 2014-02-21
      • 2022-11-07
      • 2014-12-09
      • 1970-01-01
      • 1970-01-01
      • 2019-10-16
      相关资源
      最近更新 更多