[ https://issues.apache.org/jira/browse/HIVE-28207?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Stamatis Zampetakis updated HIVE-28207: --------------------------------------- Fix Version/s: 4.1.0 Resolution: Fixed Status: Resolved (was: Patch Available) Fixed in [https://github.com/apache/hive/commit/2d855b27d31db6476f18870651db6987816bb5e3.] Thanks for the PR [~okumin] and [~ayushsaxena] for the review! > NullPointerException is thrown when checking column uniqueness > -------------------------------------------------------------- > > Key: HIVE-28207 > URL: https://issues.apache.org/jira/browse/HIVE-28207 > Project: Hive > Issue Type: Bug > Components: CBO > Affects Versions: 4.0.0 > Reporter: Shohei Okumiya > Assignee: Shohei Okumiya > Priority: Major > Labels: pull-request-available > Fix For: 4.1.0 > > > In some cases, we skip checking null. For example, the last statement in the > following set of queries fails with NPE. > {code:java} > CREATE TABLE `store_sales` (`ss_item_sk` bigint); > CREATE TABLE `household_demographics` (`hd_demo_sk` bigint); > CREATE TABLE `item` (`i_item_sk` bigint); > ALTER TABLE `store_sales` ADD CONSTRAINT `pk_ss` PRIMARY KEY (`ss_item_sk`) > DISABLE NOVALIDATE RELY; > ALTER TABLE `item` ADD CONSTRAINT `pk_i` PRIMARY KEY (`i_item_sk`) DISABLE > NOVALIDATE RELY; > ALTER TABLE `store_sales` ADD CONSTRAINT `ss_i` FOREIGN KEY (`ss_item_sk`) > REFERENCES `item`(`i_item_sk`) DISABLE NOVALIDATE RELY; > EXPLAIN > SELECT i_item_sk > FROM store_sales, household_demographics, item > WHERE ss_item_sk = i_item_sk{code} > The NPE happens with HiveJoinConstraintsRule in the above case. > {code:java} > org.apache.hive.service.cli.HiveSQLException: Error while compiling > statement: FAILED: NullPointerException null > at > org.apache.hive.service.cli.operation.Operation.toSQLException(Operation.java:376) > ~[hive-service-4.0.0.jar:4.0.0] > at > org.apache.hive.service.cli.operation.SQLOperation.prepare(SQLOperation.java:214) > ~[hive-service-4.0.0.jar:4.0.0] > at > org.apache.hive.service.cli.operation.SQLOperation.runInternal(SQLOperation.java:270) > ~[hive-service-4.0.0.jar:4.0.0] > at > org.apache.hive.service.cli.operation.Operation.run(Operation.java:286) > ~[hive-service-4.0.0.jar:4.0.0] > at > org.apache.hive.service.cli.session.HiveSessionImpl.executeStatementInternal(HiveSessionImpl.java:557) > ~[hive-service-4.0.0.jar:4.0.0] > at > org.apache.hive.service.cli.session.HiveSessionImpl.executeStatementAsync(HiveSessionImpl.java:542) > ~[hive-service-4.0.0.jar:4.0.0] > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > ~[?:1.8.0_275] > at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) > ~[?:1.8.0_275] > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > ~[?:1.8.0_275] > at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_275] > at > org.apache.hive.service.cli.session.HiveSessionProxy.invoke(HiveSessionProxy.java:78) > ~[hive-service-4.0.0.jar:4.0.0] > at > org.apache.hive.service.cli.session.HiveSessionProxy.access$000(HiveSessionProxy.java:36) > ~[hive-service-4.0.0.jar:4.0.0] > at > org.apache.hive.service.cli.session.HiveSessionProxy$1.run(HiveSessionProxy.java:63) > ~[hive-service-4.0.0.jar:4.0.0] > at java.security.AccessController.doPrivileged(Native Method) > ~[?:1.8.0_275] > at javax.security.auth.Subject.doAs(Subject.java:422) ~[?:1.8.0_275] > at > org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1899) > ~[hadoop-common-3.3.6.jar:?] > at > org.apache.hive.service.cli.session.HiveSessionProxy.invoke(HiveSessionProxy.java:59) > ~[hive-service-4.0.0.jar:4.0.0] > at com.sun.proxy.$Proxy42.executeStatementAsync(Unknown Source) ~[?:?] > at > org.apache.hive.service.cli.CLIService.executeStatementAsync(CLIService.java:316) > ~[hive-service-4.0.0.jar:4.0.0] > at > org.apache.hive.service.cli.thrift.ThriftCLIService.ExecuteStatement(ThriftCLIService.java:652) > ~[hive-service-4.0.0.jar:4.0.0] > at > org.apache.hive.service.rpc.thrift.TCLIService$Processor$ExecuteStatement.getResult(TCLIService.java:1670) > ~[hive-exec-4.0.0.jar:4.0.0] > at > org.apache.hive.service.rpc.thrift.TCLIService$Processor$ExecuteStatement.getResult(TCLIService.java:1650) > ~[hive-exec-4.0.0.jar:4.0.0] > at org.apache.thrift.ProcessFunction.process(ProcessFunction.java:38) > ~[hive-exec-4.0.0.jar:4.0.0] > at org.apache.thrift.TBaseProcessor.process(TBaseProcessor.java:38) > ~[hive-exec-4.0.0.jar:4.0.0] > at > org.apache.hive.service.auth.TSetIpAddressProcessor.process(TSetIpAddressProcessor.java:56) > ~[hive-service-4.0.0.jar:4.0.0] > at > org.apache.thrift.server.TThreadPoolServer$WorkerProcess.run(TThreadPoolServer.java:250) > ~[hive-exec-4.0.0.jar:4.0.0] > at > java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) > ~[?:1.8.0_275] > at > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) > ~[?:1.8.0_275] > at java.lang.Thread.run(Thread.java:748) ~[?:1.8.0_275] > Caused by: java.lang.NullPointerException > at > org.apache.hadoop.hive.ql.optimizer.calcite.rules.HiveJoinConstraintsRule.onMatch(HiveJoinConstraintsRule.java:277) > ~[hive-exec-4.0.0.jar:4.0.0] > at > org.apache.calcite.plan.AbstractRelOptPlanner.fireRule(AbstractRelOptPlanner.java:333) > ~[hive-exec-4.0.0.jar:4.0.0] > at org.apache.calcite.plan.hep.HepPlanner.applyRule(HepPlanner.java:542) > ~[hive-exec-4.0.0.jar:4.0.0] > at > org.apache.calcite.plan.hep.HepPlanner.applyRules(HepPlanner.java:407) > ~[hive-exec-4.0.0.jar:4.0.0] > at > org.apache.calcite.plan.hep.HepPlanner.executeInstruction(HepPlanner.java:271) > ~[hive-exec-4.0.0.jar:4.0.0] > at > org.apache.calcite.plan.hep.HepInstruction$RuleCollection.execute(HepInstruction.java:74) > ~[hive-exec-4.0.0.jar:4.0.0] > at > org.apache.calcite.plan.hep.HepPlanner.executeProgram(HepPlanner.java:202) > ~[hive-exec-4.0.0.jar:4.0.0] > at > org.apache.calcite.plan.hep.HepPlanner.findBestExp(HepPlanner.java:189) > ~[hive-exec-4.0.0.jar:4.0.0] > at > org.apache.hadoop.hive.ql.parse.CalcitePlanner$CalcitePlannerAction.executeProgram(CalcitePlanner.java:2446) > ~[hive-exec-4.0.0.jar:4.0.0] > at > org.apache.hadoop.hive.ql.parse.CalcitePlanner$CalcitePlannerAction.executeProgram(CalcitePlanner.java:2405) > ~[hive-exec-4.0.0.jar:4.0.0] > at > org.apache.hadoop.hive.ql.parse.CalcitePlanner$CalcitePlannerAction.applyPreJoinOrderingTransforms(CalcitePlanner.java:1943) > ~[hive-exec-4.0.0.jar:4.0.0] > at > org.apache.hadoop.hive.ql.parse.CalcitePlanner$CalcitePlannerAction.apply(CalcitePlanner.java:1686) > ~[hive-exec-4.0.0.jar:4.0.0] > at > org.apache.hadoop.hive.ql.parse.CalcitePlanner$CalcitePlannerAction.apply(CalcitePlanner.java:1567) > ~[hive-exec-4.0.0.jar:4.0.0] > at > org.apache.calcite.tools.Frameworks.lambda$withPlanner$0(Frameworks.java:131) > ~[hive-exec-4.0.0.jar:4.0.0] > at > org.apache.calcite.prepare.CalcitePrepareImpl.perform(CalcitePrepareImpl.java:914) > ~[hive-exec-4.0.0.jar:4.0.0] > at org.apache.calcite.tools.Frameworks.withPrepare(Frameworks.java:180) > ~[hive-exec-4.0.0.jar:4.0.0] > at org.apache.calcite.tools.Frameworks.withPlanner(Frameworks.java:126) > ~[hive-exec-4.0.0.jar:4.0.0] > at > org.apache.hadoop.hive.ql.parse.CalcitePlanner.logicalPlan(CalcitePlanner.java:1319) > ~[hive-exec-4.0.0.jar:4.0.0] > at > org.apache.hadoop.hive.ql.parse.CalcitePlanner.genOPTree(CalcitePlanner.java:570) > ~[hive-exec-4.0.0.jar:4.0.0] > at > org.apache.hadoop.hive.ql.parse.SemanticAnalyzer.analyzeInternal(SemanticAnalyzer.java:13149) > ~[hive-exec-4.0.0.jar:4.0.0] {code} -- This message was sent by Atlassian Jira (v8.20.10#820010)