[
https://issues.apache.org/jira/browse/CALCITE-3202?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16894633#comment-16894633
]
Kai Guo commented on CALCITE-3202:
----------------------------------
Hi, [~danny0405], t{color:#333333}hanks for your reply!{color} The way I try to
do this is using the JDBC like
{code:java}
DriverManager.getConnection("jdbc:calcite:", properties);
{code}
So all things are controlled by the Calcite, and I think I can really do
nothing with it. I also write a junit test which was using the build-in test
zip data, and the exception just occurs.
I will try your advise, thanks again!
> AssertionError in ElasticsearchAggregate constructor when applying
> AggregateProjectMergeRule
> --------------------------------------------------------------------------------------------
>
> Key: CALCITE-3202
> URL: https://issues.apache.org/jira/browse/CALCITE-3202
> Project: Calcite
> Issue Type: Bug
> Components: elasticsearch-adapter
> Affects Versions: 1.21.0
> Reporter: Kai Guo
> Priority: Critical
> Attachments: log.log.zip, mapping.json
>
>
> Thanks for viewing this issue! The error occurs when I was trying to execute
> a query with some subquery:
> {code:java}
> select distinct uni_id
> from (
> select uni_id from sample_index where customer_child = 'customer' and
> customer_from_plat = 'FOO'
> and uni_id in (select uni_id from sample_index where customer_child =
> 'trade' and shop_id = '60790435')
> and uni_id in (select uni_id from sample_index where customer_child =
> 'member' and member_id = '884225534')
> )
> {code}
> While running code below:
> {code:java}
> ElasticsearchAggregate(RelOptCluster cluster,
> RelTraitSet traitSet,
> RelNode input,
> ImmutableBitSet groupSet,
> List<ImmutableBitSet> groupSets,
> List<AggregateCall> aggCalls) throws InvalidRelException {
> super(cluster, traitSet, input, groupSet, groupSets, aggCalls);
> if (getConvention() != input.getConvention()) {
> String message = String.format(Locale.ROOT, "%s != %s", getConvention(),
> input.getConvention());
> throw new AssertionError(message);
> }{code}
> an AssertionError which means an input of ElasticsearchAggregate has a
> Convention of NONE throws out. stack traces shows as below:
> {code:java}
> java.lang.AssertionError: ELASTICSEARCH != NONE
> at
> org.apache.calcite.adapter.elasticsearch.ElasticsearchAggregate.<init>(ElasticsearchAggregate.java:66)
> at
> org.apache.calcite.adapter.elasticsearch.ElasticsearchAggregate.copy(ElasticsearchAggregate.java:112)
> at
> org.apache.calcite.rel.rules.AggregateProjectMergeRule.apply(AggregateProjectMergeRule.java:113)
> at
> org.apache.calcite.rel.rules.AggregateProjectMergeRule.onMatch(AggregateProjectMergeRule.java:72)
> at
> org.apache.calcite.plan.volcano.VolcanoRuleCall.onMatch(VolcanoRuleCall.java:208)
> at
> org.apache.calcite.plan.volcano.VolcanoPlanner.findBestExp(VolcanoPlanner.java:631)
> at org.apache.calcite.tools.Programs.lambda$standard$3(Programs.java:283)
> at org.apache.calcite.tools.Programs$SequenceProgram.run(Programs.java:343)
> at org.apache.calcite.prepare.Prepare.optimize(Prepare.java:189)
> at org.apache.calcite.prepare.Prepare.prepareSql(Prepare.java:320)
> at org.apache.calcite.prepare.Prepare.prepareSql(Prepare.java:231)
> at
> org.apache.calcite.prepare.CalcitePrepareImpl.prepare2_(CalcitePrepareImpl.java:637)
> at
> org.apache.calcite.prepare.CalcitePrepareImpl.prepare_(CalcitePrepareImpl.java:501)
> at
> org.apache.calcite.prepare.CalcitePrepareImpl.prepareSql(CalcitePrepareImpl.java:471)
> at
> org.apache.calcite.jdbc.CalciteConnectionImpl.parseQuery(CalciteConnectionImpl.java:231)
> at
> org.apache.calcite.jdbc.CalciteConnectionImpl.prepareStatement_(CalciteConnectionImpl.java:213)
> at
> org.apache.calcite.jdbc.CalciteConnectionImpl.prepareStatement(CalciteConnectionImpl.java:202)
> at
> org.apache.calcite.jdbc.CalciteConnectionImpl.prepareStatement(CalciteConnectionImpl.java:93)
> at
> org.apache.calcite.avatica.AvaticaConnection.prepareStatement(AvaticaConnection.java:175)
> at SearchTest.main(SearchTest.java:25)
> {code}
> And before the volcano planner start to work, the algebra expression looks
> like this:
> {code:java}
> LogicalAggregate(group=[{0}])
> LogicalProject(uni_id=[$2])
> LogicalFilter(condition=[AND(=($0, 'customer'), =($1, 'FOO'))])
> LogicalJoin(condition=[=($2, $4)], joinType=[inner])
> LogicalJoin(condition=[=($2, $3)], joinType=[inner])
> LogicalProject(customer_child=[CAST(ITEM($0,
> 'customer_child')):VARCHAR(65535)], customer_from_plat=[CAST(ITEM($0,
> 'customer_from_plat')):VARCHAR(255)], uni_id=[CAST(ITEM($0,
> 'uni_id')):VARCHAR(255)])
> ElasticsearchTableScan(table=[[elasticsearch_raw, sample_index]])
> LogicalAggregate(group=[{0}])
> LogicalProject(uni_id=[$2])
> LogicalFilter(condition=[AND(=($0, 'trade'), =($1,
> '60790435'))])
> LogicalProject(customer_child=[CAST(ITEM($0,
> 'customer_child')):VARCHAR(65535)], shop_id=[CAST(ITEM($0,
> 'shop_id')):VARCHAR(255)], uni_id=[CAST(ITEM($0, 'uni_id')):VARCHAR(255)])
> ElasticsearchTableScan(table=[[elasticsearch_raw,
> sample_index]])
> LogicalAggregate(group=[{0}])
> LogicalProject(uni_id=[$2])
> LogicalFilter(condition=[AND(=($0, 'member'), =($1,
> '884225534'))])
> LogicalProject(customer_child=[CAST(ITEM($0,
> 'customer_child')):VARCHAR(65535)], member_id=[CAST(ITEM($0,
> 'member_id')):VARCHAR(255)], uni_id=[CAST(ITEM($0, 'uni_id')):VARCHAR(255)])
> ElasticsearchTableScan(table=[[elasticsearch_raw,
> sample_index]]){code}
> Attachment:
> log.log.zip is a compressed log file with DEBUG level.
> mapping.json is the ES sample_index's mapping information.
> Please check them if needed.
--
This message was sent by Atlassian JIRA
(v7.6.14#76016)