有时会发生错误的奇怪分组

时间:2018-12-28 07:35:19

标签: ignite

我“ SOMETIMES”在执行查询时在服务器日志上收到以下异常。查询有一个group by语句。如果我删除GROUP BY,我将永远不会例外。同样,并非所有带有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 :(得分:0)

请参见H2 DB - Column must be in Group By list

在这种情况下,Apache Ignite十分严格,只允许将裸值放在SELECT列表中,而该列表也放在GROUP BY lisT中:

SELECT V1, V2, V3 FROM table GROUP BY V1, V2, V3 <-如果您从GROUP BY ==错误中删除了V1,V2或V3

所有其他值都需要包装在aggregate function中。

SELECT MAX(_VAL), AVG("dailyRock"), "productId" ... GROUP BY "productId";一样