不支持Hive方法

时间:2013-11-26 08:38:59

标签: java sql hive

我正在尝试使用Hive作为底层数据存储运行SQl查询,该查询调用Big Decimal函数并引发以下错误:

不支持的方法
org.apache.hadoop.hive.jdbc.HivePreparedStatement.setBigDecimal(HivePreparedStatement.java:317) 

这只是因为Hive不支持如下:

public void setBigDecimal(int parameterIndex, BigDecimal x) throws SQLException {
    // TODO Auto-generated method stub
    throw new SQLException("Method not supported");
  }

请建议可用于解决此类问题的其他解决方法或修复方法

2 个答案:

答案 0 :(得分:4)

原始Hive JDBC驱动程序仅支持少数JDBC接口,请参阅HIVE-48: Support JDBC connections for interoperability between Hive and RDBMS。因此,commit左侧自动生成"不支持" CallableStatementPreparedStatement等接口的代码。

HIVE-2158: add the HivePreparedStatement implementation based on current HIVE supported data-type部分方法已充实,请参阅commit。但是没有添加像Blob,AsciiStream,二进制流和... bigDecimal这样的类型。当HIVE-2158得到解决时(2011-06-15),Hive中对DECIMAL的支持不在,它是在2013-01-17的HIVE-2693: Add DECIMAL data type附带的。添加对DECIMAL的支持后,看起来JDBC驱动程序接口未更新。

所以基本上JDBC驱动程序需要使用支持的新类型进行更新。您应该为此提交JIRA。解决方法:不要使用DECIMAL,或者不要使用PrepareStatement。

答案 1 :(得分:0)

我和" .setObject"有类似的问题。方法,但更新到1.2.1版后,它已解决。 " .setBigDecimal"目前尚未实施。 Here is the implementation of the class。但是.setObject方法当前有这样的行,实际上解决了这个问题。

if(value instanceof BigDecimal){
    st.setString(valueIndex, value.toString());
}

这对我有用,但你可能会在没有任何警告的情况下失去精确度!

一般来说,元模型似乎支持十进制。如果你得到像这样的状态的所有列

Column[] columnNames = table.getColumns();

并且其中一列是十进制的,您会注意到没有关于精度的信息。