[ 
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)

Reply via email to