[
https://issues.apache.org/jira/browse/HIVE-29538?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18070325#comment-18070325
]
Gopinath commented on HIVE-29538:
---------------------------------
[~zabetak]
Yes, agree with your point. Since the query failed at compile time, the insert
statement is unnecessary. However, included it to validate the select result.
> 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
> Labels: pull-request-available
>
> 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)