[ https://issues.apache.org/jira/browse/HIVE-16102?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
翟玉勇 updated HIVE-16102: ----------------------- Description: # [~ashutoshc] realized that the implementation of GROUPING__ID in Hive was not returning values as specified by SQL standard and other execution engines. After digging into this, I found out that the implementation was bogus, as internally it was changing between big-endian/little-endian representation of GROUPING__ID indistinctly, and in some cases conversions in both directions were cancelling each other. In the documentation in https://cwiki.apache.org/confluence/display/Hive/Enhanced+Aggregation,+Cube,+Grouping+and+Rollup we can already find the problem, even if we did not spot it at first. {quote} The following query: SELECT key, value, GROUPING__ID, count(\*) from T1 GROUP BY key, value WITH ROLLUP will have the following results. | NULL | NULL | 0 | 6 | | 1 | NULL | 1 | 2 | | 1 | NULL | 3 | 1 | | 1 | 1 | 3 | 1 | ... {quote} Observe that value for GROUPING__ID in first row should be `3`, while for third and fourth rows, it should be `0`. was: [~ashutoshc] realized that the implementation of GROUPING__ID in Hive was not returning values as specified by SQL standard and other execution engines. After digging into this, I found out that the implementation was bogus, as internally it was changing between big-endian/little-endian representation of GROUPING__ID indistinctly, and in some cases conversions in both directions were cancelling each other. In the documentation in https://cwiki.apache.org/confluence/display/Hive/Enhanced+Aggregation,+Cube,+Grouping+and+Rollup we can already find the problem, even if we did not spot it at first. {quote} The following query: SELECT key, value, GROUPING__ID, count(\*) from T1 GROUP BY key, value WITH ROLLUP will have the following results. | NULL | NULL | 0 | 6 | | 1 | NULL | 1 | 2 | | 1 | NULL | 3 | 1 | | 1 | 1 | 3 | 1 | ... {quote} Observe that value for GROUPING__ID in first row should be `3`, while for third and fourth rows, it should be `0`. > Grouping sets do not conform to SQL standard > -------------------------------------------- > > Key: HIVE-16102 > URL: https://issues.apache.org/jira/browse/HIVE-16102 > Project: Hive > Issue Type: Bug > Components: Operators, Parser > Affects Versions: 1.3.0, 2.2.0 > Reporter: Jesus Camacho Rodriguez > Assignee: Jesus Camacho Rodriguez > Priority: Critical > Fix For: 2.3.0 > > Attachments: HIVE-16102.01.patch, HIVE-16102.02.patch, > HIVE-16102.patch > > > # [~ashutoshc] realized that the implementation of GROUPING__ID in Hive was > not returning values as specified by SQL standard and other execution engines. > After digging into this, I found out that the implementation was bogus, as > internally it was changing between big-endian/little-endian representation of > GROUPING__ID indistinctly, and in some cases conversions in both directions > were cancelling each other. > In the documentation in > https://cwiki.apache.org/confluence/display/Hive/Enhanced+Aggregation,+Cube,+Grouping+and+Rollup > we can already find the problem, even if we did not spot it at first. > {quote} > The following query: SELECT key, value, GROUPING__ID, count(\*) from T1 GROUP > BY key, value WITH ROLLUP > will have the following results. > | NULL | NULL | 0 | 6 | > | 1 | NULL | 1 | 2 | > | 1 | NULL | 3 | 1 | > | 1 | 1 | 3 | 1 | > ... > {quote} > Observe that value for GROUPING__ID in first row should be `3`, while for > third and fourth rows, it should be `0`. -- This message was sent by Atlassian JIRA (v7.6.3#76005)