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

Stamatis Zampetakis commented on HIVE-29538:
--------------------------------------------

Thanks for the raising the ticket and the analysis [~Gangadharan] ! I think the 
repro steps can be reduced even further. I guess it doesn't matter if the table 
is empty or not. Moreover, the problem does not seem related to the presence of 
LATERAL VIEW and I have the feeling that concat_ws, explode are not necessary 
either.

> CBO query compilation fails with AssertionError: Cannot retrieve function 
> COMPONENT_ACCESS within StatefulFunctionsChecker when using NVL/COALESCE over 
> nested field access on array<struct> (often with LATERAL VIEW explode)
> ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: HIVE-29538
>                 URL: https://issues.apache.org/jira/browse/HIVE-29538
>             Project: Hive
>          Issue Type: Bug
>          Components: CBO, Hive
>            Reporter: Gopinath
>            Assignee: Gopinath
>            Priority: Critical
>
> Queries that access nested fields (e.g. e.jobs.code where jobs is 
> array<struct<...>>) and wrap that expression inside NVL/COALESCE can fail 
> during compilation with an AssertionError originating from 
> HiveFunctionHelper.checkForStatefulFunctions. 
> *+Steps to reproduce+* 
> {code:java}
> set hive.cbo.enable=true;
> DROP TABLE IF EXISTS cbo_component_access_if_tbl;
> CREATE TABLE cbo_component_access_if_tbl (
>   `data` array<struct<jobs:array<struct<code:string,label:string>>>>
> ) STORED AS ORC;
> INSERT INTO TABLE cbo_component_access_if_tbl
> SELECT array(
>   named_struct(
>     'jobs', array(
>       named_struct('code', 'j1', 'label', 'l1'),
>       named_struct('code', 'j2', 'label', 'l2')
>     )
>   )
> );
> SELECT
>   if(concat_ws(',', data.dat.jobs.code) = '', null, concat_ws(',', 
> data.dat.jobs.code)) AS jobs_codes
> FROM cbo_component_access_if_tbl t
> LATERAL VIEW explode(t.`data`) `data` AS `dat`;
> {code}
> Stack-Trace 
> {code:java}
> org.apache.hive.service.cli.HiveSQLException: Error running query; Query ID: 
> ggangadharan_20260401024423_2cc9e0fb-cfec-43d5-ab55-1d532512a6f3
>         at 
> org.apache.hive.service.cli.operation.SQLOperation.prepare(SQLOperation.java:218)
>         at 
> org.apache.hive.service.cli.operation.SQLOperation.runInternal(SQLOperation.java:268)
>         at 
> org.apache.hive.service.cli.operation.Operation.run(Operation.java:286)
>         at 
> org.apache.hive.service.cli.session.HiveSessionImpl.executeStatementInternal(HiveSessionImpl.java:558)
>         at 
> org.apache.hive.service.cli.session.HiveSessionImpl.executeStatementAsync(HiveSessionImpl.java:543)
>         at 
> java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
>         at java.base/java.lang.reflect.Method.invoke(Method.java:580)
>         at 
> org.apache.hive.service.cli.session.HiveSessionProxy.invoke(HiveSessionProxy.java:78)
>         at 
> org.apache.hive.service.cli.session.HiveSessionProxy$1.run(HiveSessionProxy.java:63)
>         at 
> java.base/java.security.AccessController.doPrivileged(AccessController.java:714)
>         at java.base/javax.security.auth.Subject.doAs(Subject.java:525)
>         at 
> org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1953)
>         at 
> org.apache.hive.service.cli.CLIService.executeStatementAsync(CLIService.java:311)
>         at 
> org.apache.hive.service.cli.thrift.ThriftCLIService.ExecuteStatement(ThriftCLIService.java:650)
>         at 
> org.apache.hive.service.rpc.thrift.TCLIService$Processor$ExecuteStatement.getResult(TCLIService.java:1670)
>         at 
> org.apache.hive.service.rpc.thrift.TCLIService$Processor$ExecuteStatement.getResult(TCLIService.java:1650)
>         at org.apache.thrift.ProcessFunction.process(ProcessFunction.java:38)
>         at org.apache.thrift.TBaseProcessor.process(TBaseProcessor.java:38)
>         at 
> org.apache.hive.service.auth.TSetIpAddressProcessor.process(TSetIpAddressProcessor.java:56)
>         at 
> org.apache.thrift.server.TThreadPoolServer$WorkerProcess.run(TThreadPoolServer.java:250)
>         at 
> java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
>         at 
> java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
>         at java.base/java.lang.Thread.run(Thread.java:1583)
> Caused by: java.lang.AssertionError: Cannot retrieve function 
> COMPONENT_ACCESS within StatefulFunctionsChecker
>         at 
> org.apache.hadoop.hive.ql.parse.type.HiveFunctionHelper$1.visitCall(HiveFunctionHelper.java:349)
>         at 
> org.apache.hadoop.hive.ql.parse.type.HiveFunctionHelper$1.visitCall(HiveFunctionHelper.java:340)
>         at org.apache.calcite.rex.RexCall.accept(RexCall.java:189)
>         at 
> org.apache.calcite.rex.RexVisitorImpl.visitFieldAccess(RexVisitorImpl.java:98)
>         at 
> org.apache.calcite.rex.RexFieldAccess.accept(RexFieldAccess.java:94)
>         at 
> org.apache.calcite.rex.RexVisitorImpl.visitCall(RexVisitorImpl.java:80)
>         at 
> org.apache.hadoop.hive.ql.parse.type.HiveFunctionHelper$1.visitCall(HiveFunctionHelper.java:356)
>         at 
> org.apache.hadoop.hive.ql.parse.type.HiveFunctionHelper$1.visitCall(HiveFunctionHelper.java:340)
>         at org.apache.calcite.rex.RexCall.accept(RexCall.java:189)
>         at 
> org.apache.calcite.rex.RexVisitorImpl.visitCall(RexVisitorImpl.java:80)
>         at 
> org.apache.hadoop.hive.ql.parse.type.HiveFunctionHelper$1.visitCall(HiveFunctionHelper.java:356)
>         at 
> org.apache.hadoop.hive.ql.parse.type.HiveFunctionHelper$1.visitCall(HiveFunctionHelper.java:340)
>         at org.apache.calcite.rex.RexCall.accept(RexCall.java:189)
>         at 
> org.apache.hadoop.hive.ql.parse.type.HiveFunctionHelper.checkForStatefulFunctions(HiveFunctionHelper.java:362)
>         at 
> org.apache.hadoop.hive.ql.parse.type.HiveFunctionHelper.getExpression(HiveFunctionHelper.java:262)
>         at 
> org.apache.hadoop.hive.ql.parse.type.RexNodeExprFactory.createFuncCallExpr(RexNodeExprFactory.java:660)
>         at 
> org.apache.hadoop.hive.ql.parse.type.RexNodeExprFactory.createFuncCallExpr(RexNodeExprFactory.java:104)
>         at 
> org.apache.hadoop.hive.ql.parse.type.TypeCheckProcFactory$DefaultExprProcessor.getXpathOrFuncExprNodeDesc(TypeCheckProcFactory.java:1085)
>         at 
> org.apache.hadoop.hive.ql.parse.type.TypeCheckProcFactory$DefaultExprProcessor.process(TypeCheckProcFactory.java:1481)
>         at 
> org.apache.hadoop.hive.ql.lib.CostLessRuleDispatcher.dispatch(CostLessRuleDispatcher.java:66)
>         at 
> org.apache.hadoop.hive.ql.lib.DefaultGraphWalker.dispatchAndReturn(DefaultGraphWalker.java:105)
>         at 
> org.apache.hadoop.hive.ql.lib.DefaultGraphWalker.dispatch(DefaultGraphWalker.java:89)
>         at 
> org.apache.hadoop.hive.ql.lib.ExpressionWalker.walk(ExpressionWalker.java:101)
>         at 
> org.apache.hadoop.hive.ql.lib.DefaultGraphWalker.startWalking(DefaultGraphWalker.java:120)
>         at 
> org.apache.hadoop.hive.ql.parse.type.TypeCheckProcFactory.genExprNode(TypeCheckProcFactory.java:231)
>         at 
> org.apache.hadoop.hive.ql.parse.type.RexNodeTypeCheck.genExprNode(RexNodeTypeCheck.java:40)
>         at 
> org.apache.hadoop.hive.ql.parse.CalcitePlanner.genAllRexNode(CalcitePlanner.java:5219)
>         at 
> org.apache.hadoop.hive.ql.parse.CalcitePlanner.genRexNode(CalcitePlanner.java:5176)
>         at 
> org.apache.hadoop.hive.ql.parse.CalcitePlanner$CalcitePlannerAction.internalGenSelectLogicalPlan(CalcitePlanner.java:4547)
>         at 
> org.apache.hadoop.hive.ql.parse.CalcitePlanner$CalcitePlannerAction.genSelectLogicalPlan(CalcitePlanner.java:4304)
>         at 
> org.apache.hadoop.hive.ql.parse.CalcitePlanner$CalcitePlannerAction.genLogicalPlan(CalcitePlanner.java:4966)
>         at 
> org.apache.hadoop.hive.ql.parse.CalcitePlanner$CalcitePlannerAction.apply(CalcitePlanner.java:1611)
>         at 
> org.apache.hadoop.hive.ql.parse.CalcitePlanner$CalcitePlannerAction.apply(CalcitePlanner.java:1553)
>         at 
> org.apache.calcite.tools.Frameworks.lambda$withPlanner$0(Frameworks.java:140)
>         at 
> org.apache.calcite.prepare.CalcitePrepareImpl.perform(CalcitePrepareImpl.java:936)
>         at 
> org.apache.calcite.tools.Frameworks.withPrepare(Frameworks.java:191)
>         at 
> org.apache.calcite.tools.Frameworks.withPlanner(Frameworks.java:135)
>         at 
> org.apache.hadoop.hive.ql.parse.CalcitePlanner.logicalPlan(CalcitePlanner.java:1331)
>         at 
> org.apache.hadoop.hive.ql.parse.CalcitePlanner.genOPTree(CalcitePlanner.java:588)
>         at 
> org.apache.hadoop.hive.ql.parse.SemanticAnalyzer.analyzeInternal(SemanticAnalyzer.java:13223)
>         at 
> org.apache.hadoop.hive.ql.parse.CalcitePlanner.analyzeInternal(CalcitePlanner.java:481)
>         at 
> org.apache.hadoop.hive.ql.parse.BaseSemanticAnalyzer.analyze(BaseSemanticAnalyzer.java:358)
>         at org.apache.hadoop.hive.ql.Compiler.analyze(Compiler.java:224)
>         at org.apache.hadoop.hive.ql.Compiler.compile(Compiler.java:109)
>         at org.apache.hadoop.hive.ql.Driver.compile(Driver.java:499)
>         at org.apache.hadoop.hive.ql.Driver.compileInternal(Driver.java:451)
>         at org.apache.hadoop.hive.ql.Driver.compileAndRespond(Driver.java:415)
>         at org.apache.hadoop.hive.ql.Driver.compileAndRespond(Driver.java:409)
>         at 
> org.apache.hadoop.hive.ql.reexec.ReExecDriver.compileAndRespond(ReExecDriver.java:126)
>         at 
> org.apache.hive.service.cli.operation.SQLOperation.prepare(SQLOperation.java:205)
>         ... 24 more
> {code}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to