[ 
https://issues.apache.org/jira/browse/HIVE-405?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12699338#action_12699338
 ] 

Steve Corona commented on HIVE-405:
-----------------------------------

It is my understanding that this will also fix the problem of joining on 
map-type columns.

Ex.

SELECT foobar.foo,
foobar.mapcolumn['bar']

FROM foobar
JOIN barfoo ON ( foobar.mapcolumn['bar'] = barfoo.bleh )

Will result the following exception thrown in the reduce phase:

java.io.IOException: org.apache.hadoop.hive.ql.metadata.HiveException: 
java.lang.RuntimeException: Hive 2 Internal error: cannot evaluate index 
expression on string
       at 
org.apache.hadoop.hive.ql.exec.ExecReducer.reduce(ExecReducer.java:169)
       at org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:430)
       at org.apache.hadoop.mapred.Child.main(Child.java:155)
Caused by: org.apache.hadoop.hive.ql.metadata.HiveException: 
java.lang.RuntimeException: Hive 2 Internal error: cannot evaluate index 
expression on string
       at 
org.apache.hadoop.hive.ql.exec.GroupByOperator.process(GroupByOperator.java:451)
       at org.apache.hadoop.hive.ql.exec.Operator.forward(Operator.java:315)
       at 
org.apache.hadoop.hive.ql.exec.JoinOperator.createForwardJoinObject(JoinOperator.java:259)
       at 
org.apache.hadoop.hive.ql.exec.JoinOperator.genObject(JoinOperator.java:502)
       at 
org.apache.hadoop.hive.ql.exec.JoinOperator.genObject(JoinOperator.java:491)
       at 
org.apache.hadoop.hive.ql.exec.JoinOperator.genObject(JoinOperator.java:491)
       at 
org.apache.hadoop.hive.ql.exec.JoinOperator.genObject(JoinOperator.java:491)
       at 
org.apache.hadoop.hive.ql.exec.JoinOperator.checkAndGenObject(JoinOperator.java:532)
       at 
org.apache.hadoop.hive.ql.exec.JoinOperator.endGroup(JoinOperator.java:514)
       at 
org.apache.hadoop.hive.ql.exec.ExecReducer.reduce(ExecReducer.java:140)
       ... 2 more
Caused by: java.lang.RuntimeException: Hive 2 Internal error: cannot evaluate 
index expression on string
       at 
org.apache.hadoop.hive.ql.exec.ExprNodeIndexEvaluator.evaluate(ExprNodeIndexEvaluator.java:64)
       at 
org.apache.hadoop.hive.ql.exec.ExprNodeFuncEvaluator.evaluate(ExprNodeFuncEvaluator.java:72)
       at 
org.apache.hadoop.hive.ql.exec.ExprNodeFuncEvaluator.evaluate(ExprNodeFuncEvaluator.java:72)
       at 
org.apache.hadoop.hive.ql.exec.ExprNodeFuncEvaluator.evaluate(ExprNodeFuncEvaluator.java:72)
       at 
org.apache.hadoop.hive.ql.exec.GroupByOperator.updateAggregations(GroupByOperator.java:370)
       at 
org.apache.hadoop.hive.ql.exec.GroupByOperator.processHashAggr(GroupByOperator.java:470)
       at 
org.apache.hadoop.hive.ql.exec.GroupByOperator.process(GroupByOperator.java:445)
       ... 11 more


> Operators should pass ObjectInspector in init instead of forward
> ----------------------------------------------------------------
>
>                 Key: HIVE-405
>                 URL: https://issues.apache.org/jira/browse/HIVE-405
>             Project: Hadoop Hive
>          Issue Type: Bug
>          Components: Query Processor
>    Affects Versions: 0.4.0
>            Reporter: Zheng Shao
>            Priority: Critical
>
> We are always passing the same ObjectInspector, so there is no need to pass 
> it again and again in forward.
> Also there is a problem that can ONLY be fixed by passing ObjectInspector in 
> init: Outer Joins - Outer Joins may not be able to get ObjectInspectors for 
> all inputs, as a result, there is no way to construct an output 
> ObjectInspector based on the inputs. Currently we have hard-coded code that 
> assumes joins are always outputting Strings, which did break but was hidden 
> by the old framework (because we do toString() when serializing the output, 
> and toString() is defined for all Java Classes).

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to