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)