[ 
https://issues.apache.org/jira/browse/IGNITE-6865?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Vladimir Ozerov reassigned IGNITE-6865:
---------------------------------------

    Assignee:     (was: Vladimir Ozerov)

> Wrong map query build when using group by in both the outer and inner queries
> -----------------------------------------------------------------------------
>
>                 Key: IGNITE-6865
>                 URL: https://issues.apache.org/jira/browse/IGNITE-6865
>             Project: Ignite
>          Issue Type: Bug
>      Security Level: Public(Viewable by anyone) 
>          Components: sql
>    Affects Versions: 2.3
>            Reporter: Alin Andrei Corodescu
>             Fix For: 2.4
>
>
> The Ignite SQL engine builds an incorrect SQL query for the "map" part of a 
> distributed query when the select statements contains 2 nested group by's. I 
> initiated a discussion on the ignite users mailing list : 
> [http://apache-ignite-users.70518.x6.nabble.com/Incorrect-map-query-built-when-joining-with-a-subquery-with-group-by-statement-td17784.html]
> To reproduce the error:
> Consider a simple table with only one column: Persons(name), and two Ignite 
> nodes, each containing 2 rows for this table, for example :
> Node 1 :
> {code}
> { p1 : name = "A"; p2 : name = "B"}
> {code}
> Node 2 :
> {code}
> { p3 : name = "A"; p4 : name = "B"}
> {code}
> Given the query :
> {code}
> SELECT t1.name, count(1)
> FROM "default".Persons t1
> JOIN (SELECT name from "default".Persons group by name) t2
> on t1.name = t2.name
> group by t1.name
> {code}
> The query won't be executed because a wrong map query is being built :
> {code}
> SELECT
> T1__Z0.NAME AS __C0_0,
> COUNT(1) AS __C0_1
> FROM "default".PERSONS T1__Z0
> /* "default".PERSONS._SCAN */
> {code}
> The map query uses an aggregate function even though the group by has been 
> dropped, thus the query can't be run on any of the nodes.
> I tested with the distributedJoins=true flag, and the behaviour is still the 
> same. When running with collocated=true however, it works (as it is expected 
> since the query is passed directly to the underlying H2 engine), but only 
> retrieves data from the current node (as it is expected) (result = (A,1 ; 
> B,1).
> The workaround I found for this problem is to re-write the query as follows:
> {code}
> SELECT t1.name, count(1)
> FROM (select * from "default".Persons) t1
> JOIN (SELECT name from "default".Persons group by name) t2
> on t1.name = t2.name
> group by t1.name
> {code}
> This form is completely equivalent with the previous one and works as 
> expected, and the data returned is correctly calculated (A, 2 ; B, 2).
> I also found out that the problem doesn't arise when Ignite decides to use 
> indexes instead of a table scan, so the problem seems to be related with 
> table scans.
> Please mind the example given is simply to reproduce the error. It was 
> identified using real production queries with much more complicated 
> structure, but I was able to reproduce it using this simple table.



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Reply via email to