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

Pengcheng Xiong commented on HIVE-11271:
----------------------------------------

[~ashutoshc], thanks a lot for your attention. I applied the patch in 
HIVE-11333 and it seems that it can not solve the problem here.  The problem 
here is that we have FIL-UNION, FIL has to have 2 columns (1 for union and 1 
for predicate). The problem in HIVE-11333 is that we have SEL-UNION, because of 
return path, the column in SEL got wrongly pruned. 

However, I still agree with you that a better fix should be at compile time, 
not run time. [~ychena], it seems that this problem is similar to the issue 
mentioned in https://issues.apache.org/jira/browse/HIVE-10996 although they are 
dealing with JOIN. A similar solution by adding a SEL may be like this: (1) In 
ColumnPruner, when dealing with FIL, check if the needed columns (from its 
child) and check the columns used in predicate. (2) If the former one contains 
the latter one, continue (no problem); else insert a SEL which just select the 
needed columns in between the FIL and its child. (3) This solution is happening 
at compile time, not run time. But it may involve many q files update. Thanks.

> java.lang.IndexOutOfBoundsException when union all with if function
> -------------------------------------------------------------------
>
>                 Key: HIVE-11271
>                 URL: https://issues.apache.org/jira/browse/HIVE-11271
>             Project: Hive
>          Issue Type: Bug
>          Components: Logical Optimizer
>    Affects Versions: 0.14.0, 1.0.0, 1.2.0
>            Reporter: Yongzhi Chen
>            Assignee: Yongzhi Chen
>         Attachments: HIVE-11271.1.patch
>
>
> Some queries with Union all as subquery fail in MapReduce task with 
> stacktrace:
> {noformat}
> 15/07/15 14:19:30 [pool-13-thread-1]: INFO exec.UnionOperator: Initializing 
> operator UNION[104]
> 15/07/15 14:19:30 [Thread-72]: INFO mapred.LocalJobRunner: Map task executor 
> complete.
> 15/07/15 14:19:30 [Thread-72]: WARN mapred.LocalJobRunner: 
> job_local826862759_0005
> java.lang.Exception: java.lang.RuntimeException: Error in configuring object
>       at 
> org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:354)
> Caused by: java.lang.RuntimeException: Error in configuring object
>       at 
> org.apache.hadoop.util.ReflectionUtils.setJobConf(ReflectionUtils.java:93)
>       at 
> org.apache.hadoop.util.ReflectionUtils.setConf(ReflectionUtils.java:64)
>       at 
> org.apache.hadoop.util.ReflectionUtils.newInstance(ReflectionUtils.java:117)
>       at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:426)
>       at org.apache.hadoop.mapred.MapTask.run(MapTask.java:366)
>       at 
> org.apache.hadoop.mapred.LocalJobRunner$Job$MapTaskRunnable.run(LocalJobRunner.java:223)
>       at 
> java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
>       at java.util.concurrent.FutureTask.run(FutureTask.java:262)
>       at 
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
>       at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
>       at java.lang.Thread.run(Thread.java:745)
> Caused by: java.lang.reflect.InvocationTargetException
>       at sun.reflect.GeneratedMethodAccessor53.invoke(Unknown Source)
>       at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>       at java.lang.reflect.Method.invoke(Method.java:606)
>       at 
> org.apache.hadoop.util.ReflectionUtils.setJobConf(ReflectionUtils.java:88)
>       ... 10 more
> Caused by: java.lang.RuntimeException: Error in configuring object
>       at 
> org.apache.hadoop.util.ReflectionUtils.setJobConf(ReflectionUtils.java:93)
>       at 
> org.apache.hadoop.util.ReflectionUtils.setConf(ReflectionUtils.java:64)
>       at 
> org.apache.hadoop.util.ReflectionUtils.newInstance(ReflectionUtils.java:117)
>       at org.apache.hadoop.mapred.MapRunner.configure(MapRunner.java:34)
>       ... 14 more
> Caused by: java.lang.reflect.InvocationTargetException
>       at sun.reflect.GeneratedMethodAccessor53.invoke(Unknown Source)
>       at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>       at java.lang.reflect.Method.invoke(Method.java:606)
>       at 
> org.apache.hadoop.util.ReflectionUtils.setJobConf(ReflectionUtils.java:88)
>       ... 17 more
> Caused by: java.lang.RuntimeException: Map operator initialization failed
>       at 
> org.apache.hadoop.hive.ql.exec.mr.ExecMapper.configure(ExecMapper.java:140)
>       ... 21 more
> Caused by: java.lang.IndexOutOfBoundsException: Index: 1, Size: 1
>       at java.util.ArrayList.rangeCheck(ArrayList.java:635)
>       at java.util.ArrayList.get(ArrayList.java:411)
>       at 
> org.apache.hadoop.hive.ql.exec.UnionOperator.initializeOp(UnionOperator.java:86)
>       at org.apache.hadoop.hive.ql.exec.Operator.initialize(Operator.java:362)
>       at org.apache.hadoop.hive.ql.exec.Operator.initialize(Operator.java:481)
>       at 
> org.apache.hadoop.hive.ql.exec.Operator.initializeChildren(Operator.java:438)
>       at org.apache.hadoop.hive.ql.exec.Operator.initialize(Operator.java:375)
>       at org.apache.hadoop.hive.ql.exec.Operator.initialize(Operator.java:481)
>       at 
> org.apache.hadoop.hive.ql.exec.Operator.initializeChildren(Operator.java:438)
>       at org.apache.hadoop.hive.ql.exec.Operator.initialize(Operator.java:375)
>       at org.apache.hadoop.hive.ql.exec.Operator.initialize(Operator.java:481)
>       at 
> org.apache.hadoop.hive.ql.exec.Operator.initializeChildren(Operator.java:438)
>       at org.apache.hadoop.hive.ql.exec.Operator.initialize(Operator.java:375)
>       at 
> org.apache.hadoop.hive.ql.exec.MapOperator.initializeMapOperator(MapOperator.java:442)
>       at 
> org.apache.hadoop.hive.ql.exec.mr.ExecMapper.configure(ExecMapper.java:119)
>       ... 21 more
> {noformat}
> Reproduce:
> {noformat}
> create table if not exists union_all_bug_test_1 
> ( 
> f1 int,
> f2 int
> ); 
> create table if not exists union_all_bug_test_2 
> ( 
> f1 int 
> ); 
> SELECT f1 
> FROM ( 
> SELECT 
> f1 
> , if('helloworld' like '%hello%' ,f1,f2) as filter 
> FROM union_all_bug_test_1 
> union all 
> select 
> f1 
> , 0 as filter 
> from union_all_bug_test_2 
> ) A 
> WHERE (filter = 1); 
> {noformat}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to