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

Jesus Camacho Rodriguez commented on HIVE-19101:
------------------------------------------------

[~vitalii], HIVE-19433 may fix the issue. I agree there is no reason to not use 
the Calcite original methods, we need to check what are the differences between 
the Hive and Calcite version: if there are contributions that have been made to 
Hive but not ported to Calcite, we should push them to Calcite and remove the 
methods from the Hive side when we upgrade to new version. If there are no 
differences, it does not make sense to have the same code in two different 
places.

> Apply rule [HiveJoinPushTransitivePredicatesRule] is getting stuck when there 
> are huge number of predicates 
> ------------------------------------------------------------------------------------------------------------
>
>                 Key: HIVE-19101
>                 URL: https://issues.apache.org/jira/browse/HIVE-19101
>             Project: Hive
>          Issue Type: Bug
>          Components: CBO
>    Affects Versions: 2.1.1, 2.2.0, 2.3.0, 2.3.1, 2.3.2
>            Reporter: Ganesha Shreedhara
>            Priority: Major
>         Attachments: queries
>
>
> Hive query is getting stuck during the optimisation phase while applying 
> HiveJoinPushTransitivePredicatesRule when there are huge number of predicates.
>  
> *DEBUG Log:*
> {code:java}
> 2018-04-04T11:22:47,991 [user: ganeshas] -1 DEBUG 
> [6f5e8faa-505c-48e3-a2cd-ce7bfced27f0 main] plan.RelOptPlanner: call#10963: 
> Apply rule [ReduceExpressionsRule(Join)] to 
> [rel#881:HiveJoin.HIVE.[](left=HepRelVertex#879,right=HepRelVertex#887,condition==($1,
>  $73),joinType=inner,algorithm=none,cost=not available)]
> 2018-04-04T11:22:48,359 [user: ganeshas] -1 DEBUG 
> [6f5e8faa-505c-48e3-a2cd-ce7bfced27f0 main] plan.RelOptPlanner: call#10964: 
> Apply rule [HiveJoinAddNotNullRule] to 
> [rel#881:HiveJoin.HIVE.[](left=HepRelVertex#879,right=HepRelVertex#887,condition==($1,
>  $73),joinType=inner,algorithm=none,cost=not available)]
> 2018-04-04T11:22:48,360 [user: ganeshas] -1 DEBUG 
> [6f5e8faa-505c-48e3-a2cd-ce7bfced27f0 main] plan.RelOptPlanner: call#10965: 
> Apply rule [HiveJoinPushTransitivePredicatesRule] to 
> [rel#881:HiveJoin.HIVE.[](left=HepRelVertex#879,right=HepRelVertex#887,condition==($1,
>  $73),joinType=inner,algorithm=none,cost=not available)]{code}
>  
> *Thread Status:*
>  
> {code:java}
> "6f5e8faa-505c-48e3-a2cd-ce7bfced27f0 main" prio=5 tid=0x00007ff18e006800 
> nid=0x1c03 runnable [0x0000700008176000]
>  java.lang.Thread.State: RUNNABLE
>  at java.util.Arrays.copyOfRange(Arrays.java:2694)
>  at java.lang.String.<init>(String.java:203)
>  at java.lang.StringBuilder.toString(StringBuilder.java:405)
>  at org.apache.calcite.rex.RexCall.computeDigest(RexCall.java:95)
>  at org.apache.calcite.rex.RexCall.toString(RexCall.java:100)
>  at org.apache.calcite.rex.RexCall.computeDigest(RexCall.java:84)
>  at org.apache.calcite.rex.RexCall.toString(RexCall.java:100)
>  at 
> org.apache.hadoop.hive.ql.optimizer.calcite.stats.HiveRelMdPredicates$JoinConditionBasedPredicateInference.infer(HiveRelMdPredicates.java:516)
>  at 
> org.apache.hadoop.hive.ql.optimizer.calcite.stats.HiveRelMdPredicates$JoinConditionBasedPredicateInference.inferPredicates(HiveRelMdPredicates.java:426)
>  at 
> org.apache.hadoop.hive.ql.optimizer.calcite.stats.HiveRelMdPredicates.getPredicates(HiveRelMdPredicates.java:186)
>  at GeneratedMetadataHandler_Predicates.getPredicates_$(Unknown Source)
>  at GeneratedMetadataHandler_Predicates.getPredicates(Unknown Source)
>  at 
> org.apache.calcite.rel.metadata.RelMetadataQuery.getPulledUpPredicates(RelMetadataQuery.java:721)
>  at 
> org.apache.hadoop.hive.ql.optimizer.calcite.rules.HiveJoinPushTransitivePredicatesRule.onMatch(HiveJoinPushTransitivePredicatesRule.java:83)
>  at 
> org.apache.calcite.plan.AbstractRelOptPlanner.fireRule(AbstractRelOptPlanner.java:314)
>  at org.apache.calcite.plan.hep.HepPlanner.applyRule(HepPlanner.java:502)
>  at org.apache.calcite.plan.hep.HepPlanner.applyRules(HepPlanner.java:381)
>  at 
> org.apache.calcite.plan.hep.HepPlanner.executeInstruction(HepPlanner.java:275)
>  at 
> org.apache.calcite.plan.hep.HepInstruction$RuleCollection.execute(HepInstruction.java:72)
>  at org.apache.calcite.plan.hep.HepPlanner.executeProgram(HepPlanner.java:206)
>  at org.apache.calcite.plan.hep.HepPlanner.findBestExp(HepPlanner.java:193)
>  at 
> org.apache.hadoop.hive.ql.parse.CalcitePlanner$CalcitePlannerAction.hepPlan(CalcitePlanner.java:1575)
>  at 
> org.apache.hadoop.hive.ql.parse.CalcitePlanner$CalcitePlannerAction.applyPreJoinOrderingTransforms(CalcitePlanner.java:1448)
>  at 
> org.apache.hadoop.hive.ql.parse.CalcitePlanner$CalcitePlannerAction.apply(CalcitePlanner.java:1174)
>  at 
> org.apache.hadoop.hive.ql.parse.CalcitePlanner$CalcitePlannerAction.apply(CalcitePlanner.java:1096)
>  at org.apache.calcite.tools.Frameworks$1.apply(Frameworks.java:113)
>  at 
> org.apache.calcite.prepare.CalcitePrepareImpl.perform(CalcitePrepareImpl.java:997)
>  at org.apache.calcite.tools.Frameworks.withPrepare(Frameworks.java:149)
>  at org.apache.calcite.tools.Frameworks.withPlanner(Frameworks.java:106)
>  at 
> org.apache.hadoop.hive.ql.parse.CalcitePlanner.logicalPlan(CalcitePlanner.java:905)
>  at 
> org.apache.hadoop.hive.ql.parse.CalcitePlanner.getOptimizedAST(CalcitePlanner.java:920)
>  at 
> org.apache.hadoop.hive.ql.parse.CalcitePlanner.genOPTree(CalcitePlanner.java:330)
>  at 
> org.apache.hadoop.hive.ql.parse.SemanticAnalyzer.analyzeInternal(SemanticAnalyzer.java:11206)
>  at 
> org.apache.hadoop.hive.ql.parse.CalcitePlanner.analyzeInternal(CalcitePlanner.java:251)
>  at 
> org.apache.hadoop.hive.ql.parse.BaseSemanticAnalyzer.analyze(BaseSemanticAnalyzer.java:265)
>  at org.apache.hadoop.hive.ql.Driver.compile(Driver.java:527)
>  at org.apache.hadoop.hive.ql.Driver.compileInternal(Driver.java:1358)
>  at org.apache.hadoop.hive.ql.Driver.runInternal(Driver.java:1499)
>  at org.apache.hadoop.hive.ql.Driver.run(Driver.java:1278)
>  at org.apache.hadoop.hive.ql.Driver.run(Driver.java:1268)
>  at org.apache.hadoop.hive.cli.CliDriver.processLocalCmd(CliDriver.java:268)
>  at org.apache.hadoop.hive.cli.CliDriver.processCmd(CliDriver.java:213)
>  at org.apache.hadoop.hive.cli.CliDriver.processLine(CliDriver.java:447)
>  at org.apache.hadoop.hive.cli.CliDriver.executeDriver(CliDriver.java:924)
>  at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:848)
>  at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:735)
>  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>  at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
>  at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>  at java.lang.reflect.Method.invoke(Method.java:606)
>  at org.apache.hadoop.util.RunJar.run(RunJar.java:223)
>  at org.apache.hadoop.util.RunJar.main(RunJar.java:136)
> Locked ownable synchronizers:
>  - <0x00000007d5cfcab0> (a 
> java.util.concurrent.locks.ReentrantLock$NonfairSync)
> {code}
>  
>  
> This issue seems to be  because of optimisation done on CBO (Specifically on 
> calcite transitive predicate inference rule) in hive 2.1.1 and later 
> versions. 
> This issue is not there in hive1.2.1 version.
>  
> The queries to reproduce this issue is in this attachment : [^queries]. 
> There is a view (test_view) created by combining the results from 16 tables 
> using UNION ALL. 
> The query is getting stuck when I run a select query which performs join 
> between view (test_view) and a table (test1). 
>  



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to