You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@calcite.apache.org by "cocofhu (Jira)" <ji...@apache.org> on 2023/03/17 03:43:00 UTC
[jira] [Updated] (CALCITE-5589) ElasticsearchFilterRule cannot filter aggregate query
[ https://issues.apache.org/jira/browse/CALCITE-5589?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
cocofhu updated CALCITE-5589:
-----------------------------
Description:
This code converts all filters, but does not handle conditions with aggregation operations
{code:java}
private static final ElasticsearchFilterRule INSTANCE = Config.INSTANCE
.withConversion(LogicalFilter.class, Convention.NONE,
ElasticsearchRel.CONVENTION, "ElasticsearchFilterRule")
.withRuleFactory(ElasticsearchFilterRule::new)
.toRule(ElasticsearchFilterRule.class); {code}
for example: select * from(select sum(_MAP['cnt']) as cnt, id from establexxx where id > 3 ) where cnt > 300,this value is greater than 300 and cannot be converted normally.
Maybe it can be solved through such modification:
{code:java}
private static final ElasticsearchFilterRule INSTANCE = Config.INSTANCE
.withInTrait(Convention.NONE)
.withOutTrait(ElasticsearchRel.CONVENTION)
.withOperandSupplier(b0 -> b0.operand(LogicalFilter.class).oneInput(b1->b1.operand(ElasticsearchTableScan.class).anyInputs()))
.as(Config.class)
.withRuleFactory(ElasticsearchFilterRule::new)
.toRule(ElasticsearchFilterRule.class); {code}
was:
This code converts all filters, but does not handle conditions with aggregation operations
{code:java}
//代码占位符
private static final ElasticsearchFilterRule INSTANCE = Config.INSTANCE
.withConversion(LogicalFilter.class, Convention.NONE,
ElasticsearchRel.CONVENTION, "ElasticsearchFilterRule")
.withRuleFactory(ElasticsearchFilterRule::new)
.toRule(ElasticsearchFilterRule.class); {code}
for example: select * from(select sum(_MAP['cnt']) as cnt, id from establexxx where id > 3 ) where cnt > 300,this value is greater than 300 and cannot be converted normally.
Maybe it can be solved through such modification:
{code:java}
private static final ElasticsearchFilterRule INSTANCE = Config.INSTANCE
.withInTrait(Convention.NONE)
.withOutTrait(ElasticsearchRel.CONVENTION)
.withOperandSupplier(b0 -> b0.operand(LogicalFilter.class).oneInput(b1->b1.operand(ElasticsearchTableScan.class).anyInputs()))
.as(Config.class)
.withRuleFactory(ElasticsearchFilterRule::new)
.toRule(ElasticsearchFilterRule.class); {code}
> ElasticsearchFilterRule cannot filter aggregate query
> -----------------------------------------------------
>
> Key: CALCITE-5589
> URL: https://issues.apache.org/jira/browse/CALCITE-5589
> Project: Calcite
> Issue Type: Bug
> Components: elasticsearch-adapter
> Reporter: cocofhu
> Priority: Major
>
> This code converts all filters, but does not handle conditions with aggregation operations
> {code:java}
> private static final ElasticsearchFilterRule INSTANCE = Config.INSTANCE
> .withConversion(LogicalFilter.class, Convention.NONE,
> ElasticsearchRel.CONVENTION, "ElasticsearchFilterRule")
> .withRuleFactory(ElasticsearchFilterRule::new)
> .toRule(ElasticsearchFilterRule.class); {code}
> for example: select * from(select sum(_MAP['cnt']) as cnt, id from establexxx where id > 3 ) where cnt > 300,this value is greater than 300 and cannot be converted normally.
>
> Maybe it can be solved through such modification:
> {code:java}
> private static final ElasticsearchFilterRule INSTANCE = Config.INSTANCE
> .withInTrait(Convention.NONE)
> .withOutTrait(ElasticsearchRel.CONVENTION)
> .withOperandSupplier(b0 -> b0.operand(LogicalFilter.class).oneInput(b1->b1.operand(ElasticsearchTableScan.class).anyInputs()))
> .as(Config.class)
> .withRuleFactory(ElasticsearchFilterRule::new)
> .toRule(ElasticsearchFilterRule.class); {code}
>
--
This message was sent by Atlassian Jira
(v8.20.10#820010)