[
https://issues.apache.org/jira/browse/HIVE-26296?focusedWorklogId=779143&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-779143
]
ASF GitHub Bot logged work on HIVE-26296:
-----------------------------------------
Author: ASF GitHub Bot
Created on: 07/Jun/22 15:09
Start Date: 07/Jun/22 15:09
Worklog Time Spent: 10m
Work Description: zabetak opened a new pull request, #3349:
URL: https://github.com/apache/hive/pull/3349
### What changes were proposed in this pull request?
Compute selectivity for all types of joins in the same way. I don't see a
particular reason to throw an exception when the `Join` operator is not an
instance of `HiveJoin`.
### Why are the changes needed?
Avoid `RuntimeException` when computing statistics for queries with more
than `HiveXX` operators.
### Does this PR introduce _any_ user-facing change?
No
### How was this patch tested?
`mvn test -Dtest=TestMiniLlapLocalCliDriver -Dqfile=cbo_jdbc_joincost.q`
The test fails with a `RuntimeException` without the changes in this PR.
Issue Time Tracking
-------------------
Worklog Id: (was: 779143)
Remaining Estimate: 0h
Time Spent: 10m
> RuntimeException when executing EXPLAIN CBO JOINCOST on query with JDBC tables
> ------------------------------------------------------------------------------
>
> Key: HIVE-26296
> URL: https://issues.apache.org/jira/browse/HIVE-26296
> Project: Hive
> Issue Type: Bug
> Components: CBO, HiveServer2
> Reporter: Stamatis Zampetakis
> Assignee: Stamatis Zampetakis
> Priority: Major
> Time Spent: 10m
> Remaining Estimate: 0h
>
> Consider a JDBC database with two tables _author_ and _book_.
> {code:sql}
> CREATE EXTERNAL TABLE author
> (
> id int,
> fname varchar(20),
> lname varchar(20)
> )
> STORED BY 'org.apache.hive.storage.jdbc.JdbcStorageHandler'
> TBLPROPERTIES (
> "hive.sql.database.type" = "MYSQL",
> "hive.sql.jdbc.driver" = "com.mysql.jdbc.Driver",
> ...
> "hive.sql.table" = "author"
> );
> CREATE EXTERNAL TABLE book
> (
> id int,
> title varchar(100),
> author int
> )
> STORED BY 'org.apache.hive.storage.jdbc.JdbcStorageHandler'
> TBLPROPERTIES (
> "hive.sql.database.type" = "MYSQL",
> "hive.sql.jdbc.driver" = "com.mysql.jdbc.Driver",
> ...
> "hive.sql.table" = "book"
> );
> {code}
> Executing an {{EXPLAIN CBO JOINCOST}} with a query joining two JDBC tables
> fails with {{RuntimeException}} while trying to compute the selectivity of
> the join.
> {code:sql}
> EXPLAIN CBO JOINCOST
> SELECT a.lname, b.title FROM author a JOIN book b ON a.id=b.author;
> {code}
> +Stacktrace+
> {noformat}
> java.lang.RuntimeException: Unexpected Join type:
> org.apache.calcite.adapter.jdbc.JdbcRules$JdbcJoin
> at
> org.apache.hadoop.hive.ql.optimizer.calcite.stats.HiveRelMdSelectivity.computeInnerJoinSelectivity(HiveRelMdSelectivity.java:156)
> at
> org.apache.hadoop.hive.ql.optimizer.calcite.stats.HiveRelMdSelectivity.getSelectivity(HiveRelMdSelectivity.java:68)
> at GeneratedMetadataHandler_Selectivity.getSelectivity_$(Unknown Source)
> at GeneratedMetadataHandler_Selectivity.getSelectivity(Unknown Source)
> at
> org.apache.calcite.rel.metadata.RelMetadataQuery.getSelectivity(RelMetadataQuery.java:426)
> at
> org.apache.calcite.rel.metadata.RelMdUtil.getJoinRowCount(RelMdUtil.java:736)
> at
> org.apache.calcite.rel.metadata.RelMdRowCount.getRowCount(RelMdRowCount.java:195)
> at GeneratedMetadataHandler_RowCount.getRowCount_$(Unknown Source)
> at GeneratedMetadataHandler_RowCount.getRowCount(Unknown Source)
> at
> org.apache.calcite.rel.metadata.RelMetadataQuery.getRowCount(RelMetadataQuery.java:212)
> at
> org.apache.calcite.rel.metadata.RelMdRowCount.getRowCount(RelMdRowCount.java:140)
> at GeneratedMetadataHandler_RowCount.getRowCount_$(Unknown Source)
> at GeneratedMetadataHandler_RowCount.getRowCount(Unknown Source)
> at
> org.apache.calcite.rel.metadata.RelMetadataQuery.getRowCount(RelMetadataQuery.java:212)
> at
> org.apache.calcite.rel.metadata.RelMdRowCount.getRowCount(RelMdRowCount.java:191)
> at GeneratedMetadataHandler_RowCount.getRowCount_$(Unknown Source)
> at GeneratedMetadataHandler_RowCount.getRowCount(Unknown Source)
> at
> org.apache.calcite.rel.metadata.RelMetadataQuery.getRowCount(RelMetadataQuery.java:212)
> at
> org.apache.calcite.rel.externalize.RelWriterImpl.explain_(RelWriterImpl.java:100)
> at
> org.apache.calcite.rel.externalize.RelWriterImpl.done(RelWriterImpl.java:144)
> at
> org.apache.calcite.rel.AbstractRelNode.explain(AbstractRelNode.java:246)
> at org.apache.calcite.plan.RelOptUtil.toString(RelOptUtil.java:2308)
> at
> org.apache.hadoop.hive.ql.parse.CalcitePlanner.genOPTree(CalcitePlanner.java:648)
> at
> org.apache.hadoop.hive.ql.parse.SemanticAnalyzer.analyzeInternal(SemanticAnalyzer.java:12699)
> at
> org.apache.hadoop.hive.ql.parse.CalcitePlanner.analyzeInternal(CalcitePlanner.java:460)
> at
> org.apache.hadoop.hive.ql.parse.BaseSemanticAnalyzer.analyze(BaseSemanticAnalyzer.java:317)
> at
> org.apache.hadoop.hive.ql.parse.ExplainSemanticAnalyzer.analyzeInternal(ExplainSemanticAnalyzer.java:180)
> at
> org.apache.hadoop.hive.ql.parse.BaseSemanticAnalyzer.analyze(BaseSemanticAnalyzer.java:317)
> at org.apache.hadoop.hive.ql.Compiler.analyze(Compiler.java:224)
> at org.apache.hadoop.hive.ql.Compiler.compile(Compiler.java:106)
> at org.apache.hadoop.hive.ql.Driver.compile(Driver.java:495)
> at org.apache.hadoop.hive.ql.Driver.compileInternal(Driver.java:447)
> at org.apache.hadoop.hive.ql.Driver.compileAndRespond(Driver.java:412)
> at org.apache.hadoop.hive.ql.Driver.compileAndRespond(Driver.java:406)
> at
> org.apache.hadoop.hive.ql.reexec.ReExecDriver.compileAndRespond(ReExecDriver.java:121)
> at
> org.apache.hadoop.hive.ql.reexec.ReExecDriver.run(ReExecDriver.java:227)
> at
> org.apache.hadoop.hive.cli.CliDriver.processLocalCmd(CliDriver.java:255)
> at org.apache.hadoop.hive.cli.CliDriver.processCmd1(CliDriver.java:200)
> at org.apache.hadoop.hive.cli.CliDriver.processCmd(CliDriver.java:126)
> at org.apache.hadoop.hive.cli.CliDriver.processLine(CliDriver.java:421)
> at org.apache.hadoop.hive.cli.CliDriver.processLine(CliDriver.java:352)
> {noformat}
--
This message was sent by Atlassian Jira
(v8.20.7#820007)