Attempting to join three tables is consistently failing with a
ClassCastException using Hive trunk (r792966) and Hadoop 0.18.3.

The three tables are defined as follows:

create table foo (foo_id int, foo_name string, foo_a string, foo_b string,
foo_c string, foo_d string) row format delimited fields terminated by ','
stored as textfile;

create table bar (bar_id int, bar_0 int, foo_id int, bar_1 int, bar_name
string, bar_a string, bar_b string, bar_c string, bar_d string) row format
delimited fields terminated by ',' stored as textfile;

create table count (bar_id int, n int) row format delimited fields
terminated by ',' stored as textfile;

Each table has a single row as follows:

foo:
1,foo1,a,b,c,d

bar:
10,0,1,1,bar10,a,b,c,d

counts:
10,2

The failing query is:

select foo.foo_name, bar.bar_name, n from foo join bar on foo.foo_id =
bar.foo_id join count on count.bar_id = bar.bar_id;

Interestingly, the query works if you reorder the joins (select
foo.foo_name, bar.bar_name, n from count join bar on count.bar_id =
bar.bar_id join foo on foo.foo_id = bar.foo_id) or if you remove any of the
unused string columns from foo or even just move the unused int columns in
bar to the end.

The exception is as follows:

java.lang.ClassCastException:
org.apache.hadoop.hive.serde2.objectinspector.primitive.WritableIntObjectIns
pector cannot be cast to
org.apache.hadoop.hive.serde2.objectinspector.primitive.StringObjectInspecto
r
 at 
org.apache.hadoop.hive.serde2.dynamic_type.DynamicSerDeTypeString.serialize(
DynamicSerDeTypeString.java:63)
 at 
org.apache.hadoop.hive.serde2.dynamic_type.DynamicSerDeFieldList.serialize(D
ynamicSerDeFieldList.java:249)
 at 
org.apache.hadoop.hive.serde2.dynamic_type.DynamicSerDeStructBase.serialize(
DynamicSerDeStructBase.java:81)
 at 
org.apache.hadoop.hive.serde2.dynamic_type.DynamicSerDe.serialize(DynamicSer
De.java:177)
 at 
org.apache.hadoop.hive.ql.exec.FileSinkOperator.process(FileSinkOperator.jav
a:180)
 at org.apache.hadoop.hive.ql.exec.Operator.forward(Operator.java:492)
 at 
org.apache.hadoop.hive.ql.exec.CommonJoinOperator.createForwardJoinObject(Co
mmonJoinOperator.java:290)
 at 
org.apache.hadoop.hive.ql.exec.CommonJoinOperator.genObject(CommonJoinOperat
or.java:533)
 at 
org.apache.hadoop.hive.ql.exec.CommonJoinOperator.genObject(CommonJoinOperat
or.java:522)
 at 
org.apache.hadoop.hive.ql.exec.CommonJoinOperator.genObject(CommonJoinOperat
or.java:522)
 at 
org.apache.hadoop.hive.ql.exec.CommonJoinOperator.checkAndGenObject(CommonJo
inOperator.java:563)
 at 
org.apache.hadoop.hive.ql.exec.CommonJoinOperator.endGroup(CommonJoinOperato
r.java:545)
 at org.apache.hadoop.hive.ql.exec.ExecReducer.reduce(ExecReducer.java:159)
 at org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:318)
 at org.apache.hadoop.mapred.TaskTracker$Child.main(TaskTracker.java:2198)
java.lang.ClassCastException:
org.apache.hadoop.hive.serde2.objectinspector.primitive.WritableIntObjectIns
pector cannot be cast to
org.apache.hadoop.hive.serde2.objectinspector.primitive.StringObjectInspecto
r
 at 
org.apache.hadoop.hive.serde2.dynamic_type.DynamicSerDeTypeString.serialize(
DynamicSerDeTypeString.java:63)
 at 
org.apache.hadoop.hive.serde2.dynamic_type.DynamicSerDeFieldList.serialize(D
ynamicSerDeFieldList.java:249)
 at 
org.apache.hadoop.hive.serde2.dynamic_type.DynamicSerDeStructBase.serialize(
DynamicSerDeStructBase.java:81)
 at 
org.apache.hadoop.hive.serde2.dynamic_type.DynamicSerDe.serialize(DynamicSer
De.java:177)
 at 
org.apache.hadoop.hive.ql.exec.FileSinkOperator.process(FileSinkOperator.jav
a:180)
 at org.apache.hadoop.hive.ql.exec.Operator.forward(Operator.java:492)
 at 
org.apache.hadoop.hive.ql.exec.CommonJoinOperator.createForwardJoinObject(Co
mmonJoinOperator.java:290)
 at 
org.apache.hadoop.hive.ql.exec.CommonJoinOperator.genObject(CommonJoinOperat
or.java:533)
 at 
org.apache.hadoop.hive.ql.exec.CommonJoinOperator.genObject(CommonJoinOperat
or.java:522)
 at 
org.apache.hadoop.hive.ql.exec.CommonJoinOperator.genObject(CommonJoinOperat
or.java:522)
 at 
org.apache.hadoop.hive.ql.exec.CommonJoinOperator.checkAndGenObject(CommonJo
inOperator.java:563)
 at 
org.apache.hadoop.hive.ql.exec.CommonJoinOperator.endGroup(CommonJoinOperato
r.java:545)
 at org.apache.hadoop.hive.ql.exec.ExecReducer.close(ExecReducer.java:236)
 at org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:329)
 at org.apache.hadoop.mapred.TaskTracker$Child.main(TaskTracker.java:2198)


Thanks for your help!

Reply via email to