Gopinath created HIVE-29538:
-------------------------------

             Summary: 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


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