git.net

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: calcite inner join error


You're correct that it means that the input must be of the Elasticsearch
convention. But you shouldn't need to create a converter as the rule which
creates ElasticsearchProject should only match when the input is already of
the Elasticsearch convention. Elasticsearch doesn't need to support joins
as these can be handled within Calcite. This seems to a be a bug.

PS - When you're sharing links to code on GitHub, it's helpful if you press
the "y" shortcut to get a canonical URL (which includes the commit hash).
That way the reference is fixed when the code changes later.

--
Michael Mior
mmior@xxxxxxxxxxxx


Le lun. 14 mai 2018 à 10:42, Muhammad Gelbana <m.gelbana@xxxxxxxxx> a
écrit :

> The assertion mandates that the input of the ElasticSearchProject be of the
> ElasticSearch convnetion. I believe you need to create a converter that
> changes the Join node convention to ElasticSearch convention but this means
> that ElasticSearch can run joins, which I don't know about. Or, you need to
> fix\disable the rule that converted that project's convention to
> ElasticSearch.
>
> Please correct me if I'm wrong, I'm still in the process of comprehending
> conventions.
>
> Reference:
>
> https://github.com/apache/calcite/blob/branch-1.15/core/src/main/java/org/apache/calcite/adapter/elasticsearch/ElasticsearchProject.java#L44
>
> Thanks,
> Gelbana
>
> On Mon, May 14, 2018 at 3:15 PM, Michael Mior <mmior@xxxxxxxxxxxx> wrote:
>
> > Attachments can't be sent to this list. Either include attachments in the
> > body of the email or post a link to something like a GitHub gist.
> >
> > --
> > Michael Mior
> > mmior@xxxxxxxxxxxx
> >
> >
> > Le lun. 14 mai 2018 à 08:22, liuxiaorui <501256092@xxxxxx> a écrit :
> >
> > >  my  calcite version is 1.15.0  ,  elasticsearch verison is 5.3.0  and
> > > model file is model1.json in attachment.
> > >
> > > the mapping of table1 :
> > > {"db":{"mappings":{"table1":{"properties":{"birthday":{"
> > type":"date"},"id":{"type":"integer"},"int1":{"type":"
> > integer"},"str1":{"type":"text"}}}}}}
> > > the mapping of table2 :
> > > {"db":{"mappings":{"table2":{"properties":{"id":{"type":"
> > integer"},"int1":{"type":"integer"},"str1":{"type":"text"}}}}}}
> > >
> > > 1.select table1.\"id\",table1.\"str1\",table2.\"int1\" from table1
> > inner join table2 on table1.\"id\" = table2.\"id\" where table2.\"id\" =
> 1
> > >
> > > 2.select * from table1 inner join table2 on table1.\"id\" =
> > table2.\"id\" where table1.\"id\" = 1
> > >
> > > 3.select table1.\"id\",table1.\"str1\",table2.\"int1\" from table1
> > inner join table2 on table1.\"id\" = table2.\"id\" where table1.\"id\" =
> 1
> > >
> > > sql grammer 1 and 2 can be executed successfully ,but 3 failed . and
> the
> > error log is as follows
> > >
> > > java.lang.AssertionError
> > >       at org.apache.calcite.adapter.elasticsearch.
> > ElasticsearchProject.<init>(ElasticsearchProject.java:44)
> > >       at org.apache.calcite.adapter.elasticsearch.
> > ElasticsearchProject.copy(ElasticsearchProject.java:49)
> > >       at org.apache.calcite.rel.rules.FilterProjectTransposeRule.
> > onMatch(FilterProjectTransposeRule.java:131)
> > >       at org.apache.calcite.plan.volcano.VolcanoRuleCall.
> > onMatch(VolcanoRuleCall.java:212)
> > >       at org.apache.calcite.plan.volcano.VolcanoPlanner.
> > findBestExp(VolcanoPlanner.java:650)
> > >       at org.apache.calcite.tools.Programs$5.run(Programs.java:326)
> > >       at org.apache.calcite.tools.Programs$SequenceProgram.run(
> > Programs.java:387)
> > >       at org.apache.calcite.prepare.Prepare.optimize(Prepare.java:188)
> > >       at
> org.apache.calcite.prepare.Prepare.prepareSql(Prepare.java:319)
> > >       at
> org.apache.calcite.prepare.Prepare.prepareSql(Prepare.java:230)
> > >       at org.apache.calcite.prepare.CalcitePrepareImpl.prepare2_(
> > CalcitePrepareImpl.java:781)
> > >       at org.apache.calcite.prepare.CalcitePrepareImpl.prepare_(
> > CalcitePrepareImpl.java:640)
> > >       at org.apache.calcite.prepare.CalcitePrepareImpl.prepareSql(
> > CalcitePrepareImpl.java:610)
> > >       at org.apache.calcite.jdbc.CalciteConnectionImpl.parseQuery(
> > CalciteConnectionImpl.java:221)
> > >       at org.apache.calcite.jdbc.CalciteMetaImpl.prepareAndExecute(
> > CalciteMetaImpl.java:603)
> > >       at org.apache.calcite.avatica.AvaticaConnection.
> > prepareAndExecuteInternal(AvaticaConnection.java:638)
> > >       at org.apache.calcite.avatica.AvaticaStatement.executeInternal(
> > AvaticaStatement.java:149)
> > >       at org.apache.calcite.avatica.AvaticaStatement.execute(
> > AvaticaStatement.java:209)
> > >       at org.apache.calcite.test.ElasticsearchAdapterTest.
> > testElasticSearch(ElasticsearchAdapterTest.java:35)
> > >       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.junit.runners.model.FrameworkMethod$1.runReflectiveCall(
> > FrameworkMethod.java:50)
> > >       at org.junit.internal.runners.model.ReflectiveCallable.run(
> > ReflectiveCallable.java:12)
> > >       at org.junit.runners.model.FrameworkMethod.invokeExplosively(
> > FrameworkMethod.java:47)
> > >       at org.junit.internal.runners.statements.InvokeMethod.
> > evaluate(InvokeMethod.java:17)
> > >       at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
> > >       at org.junit.runners.BlockJUnit4ClassRunner.runChild(
> > BlockJUnit4ClassRunner.java:78)
> > >       at org.junit.runners.BlockJUnit4ClassRunner.runChild(
> > BlockJUnit4ClassRunner.java:57)
> > >       at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
> > >       at
> org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
> > >       at org.junit.runners.ParentRunner.runChildren(
> > ParentRunner.java:288)
> > >       at
> org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
> > >       at org.junit.runners.ParentRunner$2.evaluate(
> > ParentRunner.java:268)
> > >       at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
> > >       at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
> > >       at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(
> > JUnit4IdeaTestRunner.java:68)
> > >       at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.
> > startRunnerWithArgs(IdeaTestRunner.java:47)
> > >       at com.intellij.rt.execution.junit.JUnitStarter.
> > prepareStreamsAndStart(JUnitStarter.java:242)
> > >       at com.intellij.rt.execution.junit.JUnitStarter.main(
> > JUnitStarter.java:70)
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> >
>