[
https://issues.apache.org/jira/browse/HIVE-8448?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Yongzhi Chen reassigned HIVE-8448:
--
Assignee: Yongzhi Chen (was: Chaoyu Tang)
Union All might not work due to the type conversion issue
-
Key: HIVE-8448
URL: https://issues.apache.org/jira/browse/HIVE-8448
Project: Hive
Issue Type: Bug
Reporter: Chaoyu Tang
Assignee: Yongzhi Chen
Priority: Minor
create table t1 (val date);
insert overwrite table t1 select '2014-10-10' from src limit 1;
create table t2 (val varchar(10));
insert overwrite table t2 select '2014-10-10' from src limit 1;
==
Query:
select t.val from
(select val from t1
union all
select val from t1
union all
select val from t2
union all
select val from t1) t;
==
Will throw exception:
{code}
Caused by: org.apache.hadoop.hive.ql.metadata.HiveException: Incompatible
types for union operator
at
org.apache.hadoop.hive.ql.exec.UnionOperator.initializeOp(UnionOperator.java:86)
at org.apache.hadoop.hive.ql.exec.Operator.initialize(Operator.java:380)
at org.apache.hadoop.hive.ql.exec.Operator.initialize(Operator.java:464)
at
org.apache.hadoop.hive.ql.exec.Operator.initializeChildren(Operator.java:420)
at
org.apache.hadoop.hive.ql.exec.SelectOperator.initializeOp(SelectOperator.java:65)
at org.apache.hadoop.hive.ql.exec.Operator.initialize(Operator.java:380)
at org.apache.hadoop.hive.ql.exec.Operator.initialize(Operator.java:464)
at
org.apache.hadoop.hive.ql.exec.Operator.initializeChildren(Operator.java:420)
at
org.apache.hadoop.hive.ql.exec.TableScanOperator.initializeOp(TableScanOperator.java:193)
at org.apache.hadoop.hive.ql.exec.Operator.initialize(Operator.java:380)
at
org.apache.hadoop.hive.ql.exec.MapOperator.initializeOp(MapOperator.java:443)
at org.apache.hadoop.hive.ql.exec.Operator.initialize(Operator.java:380)
at
org.apache.hadoop.hive.ql.exec.mr.ExecMapper.configure(ExecMapper.java:133)
... 22 more
{code}
It was because at this query parse step, getCommonClassForUnionAll is used,
but at execution getCommonClass is used. They are not used consistently in
union. The later one does not support the implicit conversion from date to
string, which is the problem cause.
The change might be simple to fix this particular union issue but I noticed
that there are three versions of getCommonClass: getCommonClass,
getCommonClassForComparison, getCommonClassForUnionAll, and wonder if they
need to be cleaned and refactored.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)