[ https://issues.apache.org/jira/browse/HIVE-28560?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
ASF GitHub Bot updated HIVE-28560: ---------------------------------- Labels: pull-request-available (was: ) > AssertionError for jdbc tpcds queries because of incorrect expectedRel in > SqlImplementor > ---------------------------------------------------------------------------------------- > > Key: HIVE-28560 > URL: https://issues.apache.org/jira/browse/HIVE-28560 > Project: Hive > Issue Type: Bug > Security Level: Public(Viewable by anyone) > Components: CBO, JDBC > Affects Versions: 4.1.0 > Reporter: Soumyakanti Das > Assignee: Soumyakanti Das > Priority: Major > Labels: pull-request-available > Attachments: q_test_tpcds_tables.sql, test.q > > > To reproduce this, we need to create tpcds tables in postgres. > [^q_test_tpcds_tables.sql] contains create scripts for 3 tables. Copy this to > {{hive/data/scripts/}} directory. > Add [^test.q]to {{ql/src/test/queries/clientpositive/}} and run > {noformat} > mvn test -pl itests/qtest -Pitests -Dtest=TestMiniLlapLocalCliDriver > -Dtest.output.overwrite=true -Dqfile=test.q{noformat} > When there's a {{limit 100}} at the end, we can see the following error stack > {noformat} > [INFO] Running org.apache.hadoop.hive.cli.TestMiniLlapLocalCliDriver > [ERROR] Tests run: 1, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: > 14.393 s <<< FAILURE! - in > org.apache.hadoop.hive.cli.TestMiniLlapLocalCliDriver > [ERROR] > org.apache.hadoop.hive.cli.TestMiniLlapLocalCliDriver.testCliDriver[test] > Time elapsed: 6.735 s <<< FAILURE! > java.lang.AssertionError > at > org.apache.calcite.rel.rel2sql.SqlImplementor$Result.builder(SqlImplementor.java:1429) > at > org.apache.calcite.rel.rel2sql.SqlImplementor$Result.builder(SqlImplementor.java:1397) > at > org.apache.hadoop.hive.ql.optimizer.calcite.rules.jdbc.HiveJdbcImplementor.visit(HiveJdbcImplementor.java:91) > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > at java.lang.reflect.Method.invoke(Method.java:498) > at org.apache.calcite.util.ReflectUtil$2.invoke(ReflectUtil.java:524) > at > org.apache.calcite.rel.rel2sql.RelToSqlConverter.dispatch(RelToSqlConverter.java:131) > at > org.apache.calcite.rel.rel2sql.RelToSqlConverter.visitInput(RelToSqlConverter.java:139) > at > org.apache.calcite.rel.rel2sql.SqlImplementor.visitInput(SqlImplementor.java:163) > at > org.apache.calcite.rel.rel2sql.SqlImplementor.visitInput(SqlImplementor.java:157) > at > org.apache.hadoop.hive.ql.optimizer.calcite.rules.jdbc.HiveJdbcImplementor.visit(HiveJdbcImplementor.java:55) > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > at java.lang.reflect.Method.invoke(Method.java:498) > at org.apache.calcite.util.ReflectUtil$2.invoke(ReflectUtil.java:524) > at > org.apache.calcite.rel.rel2sql.RelToSqlConverter.dispatch(RelToSqlConverter.java:131) > at > org.apache.calcite.rel.rel2sql.RelToSqlConverter.visitInput(RelToSqlConverter.java:139) > at > org.apache.calcite.rel.rel2sql.SqlImplementor.visitInput(SqlImplementor.java:163) > at > org.apache.calcite.rel.rel2sql.SqlImplementor.visitInput(SqlImplementor.java:151) > at > org.apache.calcite.rel.rel2sql.SqlImplementor.visitRoot(SqlImplementor.java:131) > at > org.apache.hadoop.hive.ql.optimizer.calcite.reloperators.jdbc.HiveJdbcConverter.generateSql(HiveJdbcConverter.java:117) > at > org.apache.hadoop.hive.ql.optimizer.calcite.translator.ASTBuilder.table(ASTBuilder.java:138) > at > org.apache.hadoop.hive.ql.optimizer.calcite.translator.ASTConverter.convertSource(ASTConverter.java:538) > at > org.apache.hadoop.hive.ql.optimizer.calcite.translator.ASTConverter.convert(ASTConverter.java:270) > at > org.apache.hadoop.hive.ql.optimizer.calcite.translator.ASTConverter.convertSource(ASTConverter.java:595) > at > org.apache.hadoop.hive.ql.optimizer.calcite.translator.ASTConverter.convert(ASTConverter.java:270) > at > org.apache.hadoop.hive.ql.optimizer.calcite.translator.ASTConverter.convert(ASTConverter.java:135) > at > org.apache.hadoop.hive.ql.parse.CalcitePlanner.getOptimizedAST(CalcitePlanner.java:1400) > at > org.apache.hadoop.hive.ql.parse.CalcitePlanner.genOPTree(CalcitePlanner.java:592) > at > org.apache.hadoop.hive.ql.parse.SemanticAnalyzer.analyzeInternal(SemanticAnalyzer.java:13164) > at > org.apache.hadoop.hive.ql.parse.CalcitePlanner.analyzeInternal(CalcitePlanner.java:466) > at > org.apache.hadoop.hive.ql.parse.BaseSemanticAnalyzer.analyze(BaseSemanticAnalyzer.java:332) > at > org.apache.hadoop.hive.ql.parse.ExplainSemanticAnalyzer.analyzeInternal(ExplainSemanticAnalyzer.java:180) > at > org.apache.hadoop.hive.ql.parse.BaseSemanticAnalyzer.analyze(BaseSemanticAnalyzer.java:332) > 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:121) > at > org.apache.hadoop.hive.ql.reexec.ReExecDriver.run(ReExecDriver.java:229) > at > org.apache.hadoop.hive.cli.CliDriver.processLocalCmd(CliDriver.java:257) > at org.apache.hadoop.hive.cli.CliDriver.processCmd1(CliDriver.java:201) > at org.apache.hadoop.hive.cli.CliDriver.processCmd(CliDriver.java:127) > at org.apache.hadoop.hive.cli.CliDriver.processLine(CliDriver.java:425) > at org.apache.hadoop.hive.cli.CliDriver.processLine(CliDriver.java:356) > at > org.apache.hadoop.hive.ql.QTestUtil.executeClientInternal(QTestUtil.java:732) > at org.apache.hadoop.hive.ql.QTestUtil.executeClient(QTestUtil.java:702) > at > org.apache.hadoop.hive.cli.control.CoreCliDriver.runTest(CoreCliDriver.java:116) > at > org.apache.hadoop.hive.cli.control.CliAdapter.runTest(CliAdapter.java:157) > at > org.apache.hadoop.hive.cli.TestMiniLlapLocalCliDriver.testCliDriver(TestMiniLlapLocalCliDriver.java:62){noformat} > The issue > [here|https://github.com/apache/hive/blob/6f7c55ab9bc4fd7c3d0c2a6ba3095275b17b3d2d/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/rules/jdbc/HiveJdbcImplementor.java#L91] > seems to be that at this point the {{expectedRel}} in {{SqlImplementor}} is > a Project because Projects were added above this line, however, {{e}} is a > Sort. > We can possibly move > {noformat} > if (e.fetch != null) { > builder = x.builder(e); > builder.setFetch(builder.context.toSql(null, e.fetch)); > x = builder.result(); > } > if (e.offset != null) { > builder = x.builder(e); > builder.setOffset(builder.context.toSql(null, e.offset)); > x = builder.result(); > }{noformat} > before Projects are added on top of Sort to fix this. > -- This message was sent by Atlassian Jira (v8.20.10#820010)