不支持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"); }
请建议可用于解决此类问题的其他解决方法或修复方法
最初的Hive JDBC驱动程序仅支持少数JDBC接口,请参阅HIVE-48:支持JDBC连接以实现Hive和RDBMS之间的互操作性 。 因此, 提交会为CallableStatement
或PreparedStatement
等接口留下自动生成的“不支持”代码。
使用HIVE-2158:根据当前HIVE支持的数据类型添加HivePreparedStatement实现,其中一些方法被充实,请参阅提交 。 但是没有添加像Blob,AsciiStream,二进制流和… bigDecimal这样的类型。 当HIVE-2158被解决时( 2011-06-15 ),Hive中对DECIMAL的支持不存在,它附带了HIVE-2693:在2013-01-17 添加DECIMAL数据类型 。 添加对DECIMAL的支持后,看起来JDBC驱动程序接口未更新。
所以基本上JDBC驱动程序需要使用支持的新类型进行更新。 你应该为此提交一份JIRA 。 解决方法:不要使用DECIMAL,或者不要使用PrepareStatement。
我有“.setObject”方法的类似问题,但在更新到1.2.1版之后,它已得到解决。 “。setBigDecimal”目前尚未实现。 这是该类的实现 。 但是.setObject方法当前有这样的行,实际上解决了这个问题。
if(value instanceof BigDecimal){ st.setString(valueIndex, value.toString()); }
这对我有用,但你可以在没有任何警告的情况下失去精确度!
一般来说,元模型似乎支持十进制。 如果你得到像这样的statemant的所有列
Column[] columnNames = table.getColumns();
并且其中一列是十进制的,您会注意到没有关于精度的信息。