Я новичок в кальците.Функциональность, которую он обеспечивает, выглядит потрясающе!
Во время исследования я пытаюсь выяснить, как выполнять некоторые базовые запросы SQL на примере адаптера ElasticSearch .
В AbstractElasticsearchTable.getRowType
онотображает строки в MAP.
Проблема:
Запрос:
select * from zips where \"city\" = 'BROOKLYN'
Возвращает:
city=BROOKLYN; longitude=-73.956985; latitude=40.646694; pop=111396; state=NY; id=11226
Запрос:
select \"pop\" from zips where \"city\" = 'BROOKLYN'
возвращает:
pop={pop=111396}
Моя цель состоит в суммировании всех значений 'pop' .
Поэтому, когда я создаю запрос следующим образом:
select sum(\"pop\") from zips where \"city\" = 'BROOKLYN'
Ошибка:
Caused by: java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to java.lang.Integer
at Baz$2.apply(Unknown Source)
at Baz$2.apply(Unknown Source)
at org.apache.calcite.linq4j.EnumerableDefaults.aggregate(EnumerableDefaults.java:117)
at org.apache.calcite.linq4j.DefaultEnumerable.aggregate(DefaultEnumerable.java:107)
at Baz.bind(Unknown Source)
at org.apache.calcite.jdbc.CalcitePrepare$CalciteSignature.enumerable(CalcitePrepare.java:356)
Может кто-нибудь указать мне правильное направление, чтобы выяснить, как это сделатьагрегаты с таким отображением, как в примере?
Для выполнения этого запроса я добавил тест в ElasticSearchAdapterTest.java
.
@Test
public void select() {
CalciteAssert.that().with(newConnectionFactory())
.query("select sum(\"pop\") from zips where \"city\" = 'BROOKLYN'").returns("");
}