странная группа по ошибке происходит - PullRequest
0 голосов
/ 28 декабря 2018

Я "ИНОГДА" получаю приведенное ниже исключение в журналах моего сервера при выполнении запроса.У запроса есть группировка по заявлению.Если я удалю GROUP BY, я никогда не получу исключение.Также не все запросы с группировкой получают исключения.Только некоторые из них являются жертвами.

У меня есть два сервера в кластере и клиентский узел.

Есть ли какие-либо проблемы с запросом или я сталкиваюсь с ошибкой, потому что исключение происходит случайно.Странно то, что не все запросы получили это исключение.Я думаю, что структура запроса в порядке.

Caused by: org.h2.jdbc.JdbcSQLException: Column "PR__Z0._VAL" must be in the GROUP BY list; SQL statement: 
SELECT 
PR__Z0._VAL __C0_0, 
PR__Z0."dailyRock" __C0_1, 
PR__Z0."productId" __C0_2 
FROM TABLE("category" CHAR=?1) T__Z2 
 INNER JOIN ACC_6185BAEEDA626000."ProductCategory" PC__Z1 
 ON TRUE 
 INNER JOIN ACC_6185BAEEDA626000."ProductRecord" PR__Z0 
 ON TRUE 
WHERE (PC__Z1."language" = ?2) AND ((PC__Z1."category" = T__Z2."category") AND (PR__Z0."productId" = PC__Z1."productId")) 
GROUP BY PR__Z0."productId" 
ORDER BY 2 DESC LIMIT ?3 + ?4 [90016-197] 
        at org.h2.message.DbException.getJdbcSQLException(DbException.java:357) 
        at org.h2.message.DbException.get(DbException.java:179) 
        at org.h2.message.DbException.get(DbException.java:155) 
        at org.h2.expression.ExpressionColumn.updateAggregate(ExpressionColumn.java:172) 
        at org.h2.expression.Alias.updateAggregate(Alias.java:87) 
        at org.h2.command.dml.Select.queryGroup(Select.java:350) 
        at org.h2.command.dml.Select.queryWithoutCache(Select.java:628) 
        at org.h2.command.dml.Query.queryWithoutCacheLazyCheck(Query.java:114) 
        at org.h2.command.dml.Query.query(Query.java:352) 
        at org.h2.command.dml.Query.query(Query.java:333) 
        at org.h2.command.CommandContainer.query(CommandContainer.java:114) 
        at org.h2.command.Command.executeQuery(Command.java:202) 
        at org.h2.jdbc.JdbcPreparedStatement.executeQuery(JdbcPreparedStatement.java:114) 
        at org.apache.ignite.internal.processors.query.h2.PreparedStatementExImpl.executeQuery(PreparedStatementExImpl.java:67) 
        at org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing.executeSqlQuery(IgniteH2Indexing.java:1421) 
        ... 7 more

1 Ответ

0 голосов
/ 28 декабря 2018

См. H2 DB - Столбец должен быть в списке Group By .

Apache Ignite строго в этом смысле, когда вам разрешено помещать только голые значения в список SELECT, который вы также помещаетев GROUP BY lisT:

SELECT V1, V2, V3 FROM table GROUP BY V1, V2, V3 <- если вы удалите V1, V2 или V3 из GROUP BY == ошибка </p>

Все остальные значения должны быть заключены в агрегатная функция .

Как в SELECT MAX(_VAL), AVG("dailyRock"), "productId" ... GROUP BY "productId";

...