-
Notifications
You must be signed in to change notification settings - Fork 25.7k
SQL: Enable the InnerAggregates inside PIVOT #65792
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 1 commit
63ffe2e
a6208fb
19dc1c6
3867593
cca0ed7
8480e39
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -201,6 +201,29 @@ null |10044 |Mingsen |F |1994-05-21 | |
| // end::sumWithoutSubquery | ||
| ; | ||
|
|
||
| sumWithInnerAggregateSumOfSquares | ||
| schema::birth_date:ts|emp_no:i|first_name:s|gender:s|hire_date:ts|last_name:s|1:d|2:d | ||
| SELECT * FROM test_emp PIVOT (SUM_OF_SQUARES(salary) FOR languages IN (1, 2)) LIMIT 5; | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This query fails for me in a REST test (using a REST client): it's only returning 3 rows, whereas it should have returned 5. We need to look into why the test passes and/or why the REST call with the same query fails. @palesz please, open an issue for this investigation.
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The JDBC integration tests fetch all the rows and follow the cursor (hence 5 rows shows up there). The tests are valid and successful, no issue there. Created #65982 to investigate this unexpected behaviour related to |
||
|
|
||
| birth_date | emp_no | first_name | gender | hire_date | last_name | 1 | 2 | ||
| ---------------------+---------------+---------------+---------------+------------------------+---------------+---------------+--------------- | ||
| null |10041 |Uri |F |1989-11-12T00:00:00.000Z|Lenart |3.182652225E9 |null | ||
| null |10043 |Yishay |M |1990-10-20T00:00:00.000Z|Tzvieli |1.179304281E9 |null | ||
| null |10044 |Mingsen |F |1994-05-21T00:00:00.000Z|Casley |1.578313984E9 |null | ||
| 1952-04-19T00:00:00Z |10009 |Sumant |F |1985-02-18T00:00:00.000Z|Peac |4.378998276E9 |null | ||
| 1953-01-07T00:00:00Z |10067 |Claudi |M |1987-03-04T00:00:00.000Z|Stavenow |null |2.708577936E9 | ||
| ; | ||
|
|
||
| sumWithInnerAggregateKurtosis | ||
| schema::client_port:i|'OK':d|'Error':d | ||
| SELECT * FROM (SELECT client_port, status, bytes_in FROM logs WHERE client_port IS NULL) PIVOT (KURTOSIS(bytes_in) FOR status IN ('OK', 'Error')) LIMIT 10; | ||
|
|
||
| client_port | 'OK' | 'Error' | ||
| ---------------+------------------+--------------- | ||
| null |2.0016153277578916|NaN | ||
| ; | ||
|
|
||
|
|
||
| averageWithOneValueAndMath | ||
| schema::languages:bt|'F':d | ||
| SELECT * FROM (SELECT languages, gender, salary FROM test_emp) PIVOT (ROUND(AVG(salary) / 2) FOR gender IN ('F')); | ||
|
|
@@ -214,3 +237,4 @@ null |31070.0 | |
| 4 |24646.0 | ||
| 5 |23353.0 | ||
| ; | ||
|
|
||
This file was deleted.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'd like to see a test with multiple arguments that get folded into compound aggs, such as sum / min / max.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Do you mean multiple aggregations inside the PIVOT? Currently there is a check that we can only have a single aggregation inside the
PIVOT, so we can't havePIVOT(MIN(salary), MAX(salary) FOR ...).This change only lifts the limitation on the type of that single aggregation within the PIVOT, so aggregations that are translated into an
InnerAggregatewill be allowed.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is there any validation or check for this (now that PostOptimizerTest has been removed)? this goes beyond the scope of this ticket so please raise a ticket if this functionality is missing or needs to be further investigated.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The
PostOptimizerTestschecked that the type of the aggregation cannot be one that results in an InnerAggregate vs the number of the aggregations inside the PIVOT.There is already a check in the
LogicalPlanBuilderthat only allows one aggregation inside the PIVOT:elasticsearch/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/parser/LogicalPlanBuilder.java
Line 186 in 2f5ab81
I cannot see it tested in unit tests, but it is there and works. Added: #65894