ZheHu created CALCITE-4868:
------------------------------

             Summary: ES adapter doesn't support sort aggregation result
                 Key: CALCITE-4868
                 URL: https://issues.apache.org/jira/browse/CALCITE-4868
             Project: Calcite
          Issue Type: Bug
          Components: elasticsearch-adapter
    Affects Versions: 1.28.0
            Reporter: ZheHu


When I run the following SQL in ES Adapter module(AggregationTest.java):
{code:java}
@Test void testSortAggregation() {
    CalciteAssert.that()
        .with(newConnectionFactory())
        .query("select cat5, max(val1) as MAX_VAL1 from view group by cat5 
order by MAX_VAL1 desc, cat5 desc")
        .returns("cat5=2; val1=7\n");
  }
{code}

I get such exception:
{code:java}
java.lang.IllegalArgumentException: Field MAX_VAL1 not defined for aggs
at 
org.apache.calcite.adapter.elasticsearch.ElasticsearchMapping.missingValueFor(ElasticsearchMapping.java:85)
at 
org.apache.calcite.adapter.elasticsearch.ElasticsearchTable.aggregate(ElasticsearchTable.java:226)
at 
org.apache.calcite.adapter.elasticsearch.ElasticsearchTable.find(ElasticsearchTable.java:120)
at 
org.apache.calcite.adapter.elasticsearch.ElasticsearchTable.access$000(ElasticsearchTable.java:61)
at 
org.apache.calcite.adapter.elasticsearch.ElasticsearchTable$ElasticsearchQueryable.find(ElasticsearchTable.java:376)
at 
org.apache.calcite.jdbc.CalcitePrepare$CalciteSignature.enumerable(CalcitePrepare.java:363)
at 
org.apache.calcite.jdbc.CalciteConnectionImpl.enumerable(CalciteConnectionImpl.java:338)
at 
org.apache.calcite.jdbc.CalciteMetaImpl._createIterable(CalciteMetaImpl.java:578)
at 
org.apache.calcite.jdbc.CalciteMetaImpl.createIterable(CalciteMetaImpl.java:569)
at 
org.apache.calcite.avatica.AvaticaResultSet.execute(AvaticaResultSet.java:184)
at org.apache.calcite.jdbc.CalciteResultSet.execute(CalciteResultSet.java:64)
at org.apache.calcite.jdbc.CalciteResultSet.execute(CalciteResultSet.java:43)
at 
org.apache.calcite.avatica.AvaticaConnection$1.execute(AvaticaConnection.java:667)
at 
org.apache.calcite.jdbc.CalciteMetaImpl.prepareAndExecute(CalciteMetaImpl.java:638)
at 
org.apache.calcite.avatica.AvaticaConnection.prepareAndExecuteInternal(AvaticaConnection.java:675)
at 
org.apache.calcite.avatica.AvaticaStatement.executeInternal(AvaticaStatement.java:156)
{code}

AS a result of the ES mapping doesn't contain field "MAX_VAL1", such exception 
occurred.

According to the SQL, generated ES scripts should be(I have run it in ES 7.3.2):
{code:java}
{
  "aggs": {
    "cat5_val1": {
      "terms": {
        "field": "cat5",
        "order": [
          {
            "_key": "desc"
          },
          {
            "MAX_VAL1": "desc"
          }
        ]
      },
      "aggs": {
        "MAX_VAL1": {
          "max": {
            "field": "val1"
          }
        }
      }
    }
  }
}
{code}



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to