You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@hive.apache.org by Marc Limotte <ms...@gmail.com> on 2010/06/24 04:11:08 UTC
Hive problem when using JDBC driver and type float
I've run into a problem using the Hive JDBC driver, with tables that contain
floats. The following two statements work fine in the hive shell, but break
if I execute them through the JDBC driver.
I can create a table like this:
CREATE TABLE simple (
id int,
value string,
amt float
)
ROW FORMAT DELIMITED
STORED AS TEXTFILE
Which works ok. But then I try this:
select * from simple
This fails with an exception
java.sql.SQLException: Could not create ResultSet:
java.lang.RuntimeException: specifying type float which has not been defined
at
org.apache.hadoop.hive.jdbc.HiveResultSet.initDynamicSerde(HiveResultSet.java:120)
at
org.apache.hadoop.hive.jdbc.HiveResultSet.<init>(HiveResultSet.java:74)
at
org.apache.hadoop.hive.jdbc.HiveStatement.executeQuery(HiveStatement.java:178)
...
I'm using Hive 0.5.0, but it's the Cloudera distribution (0.5.0+20). This
is all running locally on my mac on a standalone cluster.
Also, if I use type "double" instead of "float", then it works. Which is a
suitable work around for my needs, but I'm wondering what's going on.
Marc
RE: Hive problem when using JDBC driver and type float
Posted by Zhou Shuaifeng <zh...@huawei.com>.
Hi Marc,
Yes, there seems conflict between these two pages. I can't explain it also.
Obviously it's a bug need to be improved. May be you can send mail to the
hive-dev mail list to feed back this problem and find answers.
And you may use double instead of float temporarily.
Regards,
Shuaifeng
-----Original Message-----
From: Ashutosh Chauhan [mailto:ashutosh.chauhan@gmail.com]
Sent: Friday, June 25, 2010 1:03 AM
To: hive-user@hadoop.apache.org
Subject: Re: Hive problem when using JDBC driver and type float
Hi Shuaifeng,
> Float is not supported because it's not supported by Thrift,
But I see float listed as a valid primitive type on
http://wiki.apache.org/hadoop/Hive/HiveQL and also in various places in
source tree. (e.g.,
o.a.h.h.serde2.objectinspector.PrimitiveObjectInspector) But wiki page that
you listed indeed doesnt have it. Looking further in Thrift in
o.a.thrift.protocol.TType float is not listed as a type. So, I am now
confused whether it really is one of the supported types or not. Is it
supported only in case where Thrift is not used for ser-deser ? Can someone
please clarify.
Thanks,
Ashutosh
On Thu, Jun 24, 2010 at 03:33, Zhou Shuaifeng <zh...@huawei.com>
wrote:
> Float is not supported because it's not supported by Thrift, and Hive
> uses Thrift a lot for internal data serialization/deserialization.
> See http://wiki.apache.org/hadoop/Hive/HiveQL/Types
>
> Shuaifeng
> ________________________________
> From: Marc Limotte [mailto:mslimotte@gmail.com]
> Sent: Thursday, June 24, 2010 10:11 AM
> To: hive-user@hadoop.apache.org
> Subject: Hive problem when using JDBC driver and type float
>
> I've run into a problem using the Hive JDBC driver, with tables that
> contain floats. The following two statements work fine in the hive
> shell, but break if I execute them through the JDBC driver.
>
> I can create a table like this:
>
> CREATE TABLE simple (
> id int,
> value string,
> amt float
> )
> ROW FORMAT DELIMITED
> STORED AS TEXTFILE
>
> Which works ok. But then I try this:
>
> select * from simple
>
> This fails with an exception
>
> java.sql.SQLException: Could not create ResultSet:
> java.lang.RuntimeException: specifying type float which has not been
> defined
> at
> org.apache.hadoop.hive.jdbc.HiveResultSet.initDynamicSerde(HiveResultS
> et.java:120)
> at
> org.apache.hadoop.hive.jdbc.HiveResultSet.<init>(HiveResultSet.java:74
> )
> at
> org.apache.hadoop.hive.jdbc.HiveStatement.executeQuery(HiveStatement.j
> ava:178)
> ...
>
> I'm using Hive 0.5.0, but it's the Cloudera distribution (0.5.0+20).
> This is all running locally on my mac on a standalone cluster.
>
> Also, if I use type "double" instead of "float", then it works. Which
> is a suitable work around for my needs, but I'm wondering what's going on.
>
> Marc
>
>
>
Re: Hive problem when using JDBC driver and type float
Posted by Ashutosh Chauhan <as...@gmail.com>.
Hi Shuaifeng,
> Float is not supported because it's not supported by Thrift,
But I see float listed as a valid primitive type on
http://wiki.apache.org/hadoop/Hive/HiveQL and also in various places
in source tree. (e.g.,
o.a.h.h.serde2.objectinspector.PrimitiveObjectInspector) But wiki page
that you listed indeed doesnt have it. Looking further in Thrift in
o.a.thrift.protocol.TType float is not listed as a type. So, I am now
confused whether it really is one of the supported types or not. Is it
supported only in case where Thrift is not used for ser-deser ? Can
someone please clarify.
Thanks,
Ashutosh
On Thu, Jun 24, 2010 at 03:33, Zhou Shuaifeng <zh...@huawei.com> wrote:
> Float is not supported because it's not supported by Thrift, and Hive uses
> Thrift a lot for internal data serialization/deserialization.
> See http://wiki.apache.org/hadoop/Hive/HiveQL/Types
>
> Shuaifeng
> ________________________________
> From: Marc Limotte [mailto:mslimotte@gmail.com]
> Sent: Thursday, June 24, 2010 10:11 AM
> To: hive-user@hadoop.apache.org
> Subject: Hive problem when using JDBC driver and type float
>
> I've run into a problem using the Hive JDBC driver, with tables that contain
> floats. The following two statements work fine in the hive shell, but break
> if I execute them through the JDBC driver.
>
> I can create a table like this:
>
> CREATE TABLE simple (
> id int,
> value string,
> amt float
> )
> ROW FORMAT DELIMITED
> STORED AS TEXTFILE
>
> Which works ok. But then I try this:
>
> select * from simple
>
> This fails with an exception
>
> java.sql.SQLException: Could not create ResultSet:
> java.lang.RuntimeException: specifying type float which has not been defined
> at
> org.apache.hadoop.hive.jdbc.HiveResultSet.initDynamicSerde(HiveResultSet.java:120)
> at
> org.apache.hadoop.hive.jdbc.HiveResultSet.<init>(HiveResultSet.java:74)
> at
> org.apache.hadoop.hive.jdbc.HiveStatement.executeQuery(HiveStatement.java:178)
> ...
>
> I'm using Hive 0.5.0, but it's the Cloudera distribution (0.5.0+20). This
> is all running locally on my mac on a standalone cluster.
>
> Also, if I use type "double" instead of "float", then it works. Which is a
> suitable work around for my needs, but I'm wondering what's going on.
>
> Marc
>
>
>
RE: Hive problem when using JDBC driver and type float
Posted by Zhou Shuaifeng <zh...@huawei.com>.
Float is not supported because it's not supported by Thrift, and Hive uses
Thrift a lot for internal data serialization/deserialization.
See http://wiki.apache.org/hadoop/Hive/HiveQL/Types
Shuaifeng
_____
From: Marc Limotte [mailto:mslimotte@gmail.com]
Sent: Thursday, June 24, 2010 10:11 AM
To: hive-user@hadoop.apache.org
Subject: Hive problem when using JDBC driver and type float
I've run into a problem using the Hive JDBC driver, with tables that contain
floats. The following two statements work fine in the hive shell, but break
if I execute them through the JDBC driver.
I can create a table like this:
CREATE TABLE simple (
id int,
value string,
amt float
)
ROW FORMAT DELIMITED
STORED AS TEXTFILE
Which works ok. But then I try this:
select * from simple
This fails with an exception
java.sql.SQLException: Could not create ResultSet:
java.lang.RuntimeException: specifying type float which has not been defined
at
org.apache.hadoop.hive.jdbc.HiveResultSet.initDynamicSerde(HiveResultSet.jav
a:120)
at
org.apache.hadoop.hive.jdbc.HiveResultSet.<init>(HiveResultSet.java:74)
at
org.apache.hadoop.hive.jdbc.HiveStatement.executeQuery(HiveStatement.java:17
8)
...
I'm using Hive 0.5.0, but it's the Cloudera distribution (0.5.0+20). This
is all running locally on my mac on a standalone cluster.
Also, if I use type "double" instead of "float", then it works. Which is a
suitable work around for my needs, but I'm wondering what's going on.
Marc