Better format subquery regression tests (#1340)

* Style fix for subquery pushdown regression tests

With this commit we intented a more consistent style for the
regression tests we've added in the
  - multi_subquery_union.sql
  - multi_subquery_complex_queries.sql
  - multi_subquery_behavioral_analytics.sql

* Enable the tests that are temporarily commented

This commit enables some of the regression tests that were commented
out until all the development is done.
pull/1348/head
Onder Kalaci 2017-04-20 13:46:50 +03:00
parent 0935ab570f
commit bef8811673
9 changed files with 4642 additions and 3456 deletions

File diff suppressed because it is too large Load Diff

View File

@ -191,32 +191,40 @@ FROM (
( SELECT user_id, ( SELECT user_id,
sum(counter) sum(counter)
FROM FROM
( SELECT user_id, (SELECT
sum(value_2) AS counter user_id, sum(value_2) AS counter
FROM users_table FROM
GROUP BY user_id users_table
GROUP BY
user_id
UNION UNION
SELECT user_id, SELECT
sum(value_2) AS counter user_id, sum(value_2) AS counter
FROM events_table FROM
GROUP BY user_id ) user_id_1 events_table
GROUP BY user_id) GROUP BY
user_id) user_id_1
GROUP BY
user_id)
UNION UNION
( SELECT user_id, (SELECT
sum(counter) user_id, sum(counter)
FROM FROM
( SELECT (SELECT
user_id, sum(value_2) AS counter user_id, sum(value_2) AS counter
FROM users_table FROM
GROUP BY user_id users_table
GROUP BY
user_id
UNION UNION
SELECT user_id, sum(value_2) AS counter SELECT
user_id, sum(value_2) AS counter
FROM events_table FROM
GROUP BY user_id) user_id_2 events_table
GROUP BY user_id)) AS ftop GROUP BY
user_id) user_id_2
GROUP BY
user_id)) AS ftop
ORDER BY 2 DESC, 1 DESC ORDER BY 2 DESC, 1 DESC
LIMIT 5; LIMIT 5;
user_id | sum user_id | sum
@ -233,40 +241,45 @@ SELECT ("final_query"."event_types") as types, count(*) AS sumOfEventType
FROM FROM
( SELECT *, random() ( SELECT *, random()
FROM FROM
( SELECT "t"."user_id", ( SELECT "t"."user_id", "t"."time", unnest("t"."collected_events") AS "event_types"
"t"."time",
unnest("t"."collected_events") AS "event_types"
FROM FROM
( SELECT "t1"."user_id", ( SELECT "t1"."user_id", min("t1"."time") AS "time", array_agg(("t1"."event") ORDER BY TIME ASC, event DESC) AS collected_events
min("t1"."time") AS "time",
array_agg(("t1"."event")
ORDER BY TIME ASC, event DESC) AS collected_events
FROM ( FROM (
(SELECT * (SELECT *
FROM FROM
(SELECT "events"."user_id", (SELECT
"events"."time", "events"."user_id", "events"."time", 0 AS event
0 AS event FROM
FROM events_table as "events" events_table as "events"
WHERE event_type IN (10, 11, 12, 13, 14, 15) ) events_subquery_1) WHERE
event_type IN (10, 11, 12, 13, 14, 15)) events_subquery_1)
UNION UNION
(SELECT * (SELECT *
FROM FROM
(SELECT "events"."user_id", "events"."time", 1 AS event (SELECT
FROM events_table as "events" "events"."user_id", "events"."time", 1 AS event
WHERE event_type IN (15, 16, 17, 18, 19) ) events_subquery_2) FROM
events_table as "events"
WHERE
event_type IN (15, 16, 17, 18, 19) ) events_subquery_2)
UNION UNION
(SELECT * (SELECT *
FROM FROM
(SELECT "events"."user_id", "events"."time", 2 AS event (SELECT
FROM events_table as "events" "events"."user_id", "events"."time", 2 AS event
WHERE event_type IN (20, 21, 22, 23, 24, 25) ) events_subquery_3) FROM
events_table as "events"
WHERE
event_type IN (20, 21, 22, 23, 24, 25) ) events_subquery_3)
UNION UNION
(SELECT * (SELECT *
FROM FROM
(SELECT "events"."user_id", "events"."time", 3 AS event (SELECT
FROM events_table as "events" "events"."user_id", "events"."time", 3 AS event
WHERE event_type IN (26, 27, 28, 29, 30, 13)) events_subquery_4)) t1 FROM
events_table as "events"
WHERE
event_type IN (26, 27, 28, 29, 30, 13)) events_subquery_4)) t1
GROUP BY "t1"."user_id") AS t) "q" GROUP BY "t1"."user_id") AS t) "q"
) as final_query ) as final_query
GROUP BY types GROUP BY types
@ -283,36 +296,41 @@ ORDER BY types;
-- but wrapper unions are removed from the inner part of the query -- but wrapper unions are removed from the inner part of the query
SELECT ("final_query"."event_types") as types, count(*) AS sumOfEventType SELECT ("final_query"."event_types") as types, count(*) AS sumOfEventType
FROM FROM
( SELECT *, random() (SELECT *, random()
FROM FROM
( SELECT "t"."user_id", (SELECT
"t"."time", "t"."user_id", "t"."time", unnest("t"."collected_events") AS "event_types"
unnest("t"."collected_events") AS "event_types"
FROM FROM
( SELECT "t1"."user_id", (SELECT
min("t1"."time") AS "time", "t1"."user_id", min("t1"."time") AS "time", array_agg(("t1"."event") ORDER BY TIME ASC, event DESC) AS collected_events
array_agg(("t1"."event") FROM(
ORDER BY TIME ASC, event DESC) AS collected_events (SELECT
FROM ( "events"."user_id", "events"."time", 0 AS event
(SELECT "events"."user_id", FROM
"events"."time", events_table as "events"
0 AS event WHERE
FROM events_table as "events" event_type IN (10, 11, 12, 13, 14, 15))
WHERE event_type IN (10, 11, 12, 13, 14, 15))
UNION UNION
(SELECT "events"."user_id", "events"."time", 1 AS event (SELECT
FROM events_table as "events" "events"."user_id", "events"."time", 1 AS event
WHERE event_type IN (15, 16, 17, 18, 19) ) FROM
events_table as "events"
WHERE
event_type IN (15, 16, 17, 18, 19) )
UNION UNION
(SELECT
(SELECT "events"."user_id", "events"."time", 2 AS event "events"."user_id", "events"."time", 2 AS event
FROM events_table as "events" FROM
WHERE event_type IN (20, 21, 22, 23, 24, 25) ) events_table as "events"
WHERE
event_type IN (20, 21, 22, 23, 24, 25) )
UNION UNION
(SELECT
(SELECT "events"."user_id", "events"."time", 3 AS event "events"."user_id", "events"."time", 3 AS event
FROM events_table as "events" FROM
WHERE event_type IN (26, 27, 28, 29, 30, 13))) t1 events_table as "events"
WHERE
event_type IN (26, 27, 28, 29, 30, 13))) t1
GROUP BY "t1"."user_id") AS t) "q" GROUP BY "t1"."user_id") AS t) "q"
) as final_query ) as final_query
GROUP BY types GROUP BY types
@ -328,35 +346,37 @@ ORDER BY types;
-- again excatly the same query with top level wrapper removed -- again excatly the same query with top level wrapper removed
SELECT ("q"."event_types") as types, count(*) AS sumOfEventType SELECT ("q"."event_types") as types, count(*) AS sumOfEventType
FROM FROM
( SELECT "t"."user_id", ( SELECT "t"."user_id", "t"."time", unnest("t"."collected_events") AS "event_types"
"t"."time",
unnest("t"."collected_events") AS "event_types"
FROM FROM
( SELECT "t1"."user_id", ( SELECT "t1"."user_id", min("t1"."time") AS "time", array_agg(("t1"."event") ORDER BY TIME ASC, event DESC) AS collected_events
min("t1"."time") AS "time",
array_agg(("t1"."event")
ORDER BY TIME ASC, event DESC) AS collected_events
FROM ( FROM (
(SELECT "events"."user_id", (SELECT
"events"."time", "events"."user_id", "events"."time", 0 AS event
0 AS event FROM
FROM events_table as "events" events_table as "events"
WHERE event_type IN (10, 11, 12, 13, 14, 15) WHERE
) event_type IN (10, 11, 12, 13, 14, 15))
UNION UNION
(SELECT "events"."user_id", "events"."time", 1 AS event (SELECT
FROM events_table as "events" "events"."user_id", "events"."time", 1 AS event
WHERE event_type IN (15, 16, 17, 18, 19) ) FROM
events_table as "events"
WHERE
event_type IN (15, 16, 17, 18, 19) )
UNION UNION
(SELECT
(SELECT "events"."user_id", "events"."time", 2 AS event "events"."user_id", "events"."time", 2 AS event
FROM events_table as "events" FROM
WHERE event_type IN (20, 21, 22, 23, 24, 25) ) events_table as "events"
WHERE
event_type IN (20, 21, 22, 23, 24, 25) )
UNION UNION
(SELECT
(SELECT "events"."user_id", "events"."time", 3 AS event "events"."user_id", "events"."time", 3 AS event
FROM events_table as "events" FROM
WHERE event_type IN (26, 27, 28, 29, 30, 13))) t1 events_table as "events"
WHERE
event_type IN (26, 27, 28, 29, 30, 13))) t1
GROUP BY "t1"."user_id") AS t) "q" GROUP BY "t1"."user_id") AS t) "q"
GROUP BY types GROUP BY types
ORDER BY types; ORDER BY types;
@ -375,27 +395,36 @@ FROM
FROM FROM
( SELECT "t1"."user_id" ( SELECT "t1"."user_id"
FROM ( FROM (
(SELECT "events"."user_id", (SELECT
"events"."time", "events"."user_id", "events"."time", 0 AS event
0 AS event FROM
FROM events_table as "events" events_table as "events"
WHERE event_type IN (10, 11, 12, 13, 14, 15) WHERE
) event_type IN (10, 11, 12, 13, 14, 15))
UNION UNION
(SELECT "events"."user_id", "events"."time", 1 AS event (SELECT
FROM events_table as "events" "events"."user_id", "events"."time", 1 AS event
WHERE event_type IN (15, 16, 17, 18, 19) ) FROM
events_table as "events"
WHERE
event_type IN (15, 16, 17, 18, 19) )
UNION UNION
(SELECT
(SELECT "events"."user_id", "events"."time", 2 AS event "events"."user_id", "events"."time", 2 AS event
FROM events_table as "events" FROM
WHERE event_type IN (20, 21, 22, 23, 24, 25) ) events_table as "events"
WHERE
event_type IN (20, 21, 22, 23, 24, 25) )
UNION UNION
(SELECT
(SELECT "events"."user_id", "events"."time", 3 AS event "events"."user_id", "events"."time", 3 AS event
FROM events_table as "events" FROM
WHERE event_type IN (26, 27, 28, 29, 30, 13))) t1 events_table as "events"
) AS t) "q" ORDER BY 1 LIMIT 5; WHERE
event_type IN (26, 27, 28, 29, 30, 13))) t1
) AS t) "q"
ORDER BY 1
LIMIT 5;
user_id user_id
--------- ---------
0 0
@ -408,35 +437,37 @@ FROM
-- a very similar query UNION ALL -- a very similar query UNION ALL
SELECT ("q"."event_types") as types, count(*) AS sumOfEventType SELECT ("q"."event_types") as types, count(*) AS sumOfEventType
FROM FROM
( SELECT "t"."user_id", ( SELECT "t"."user_id", "t"."time", unnest("t"."collected_events") AS "event_types"
"t"."time",
unnest("t"."collected_events") AS "event_types"
FROM FROM
( SELECT "t1"."user_id", ( SELECT "t1"."user_id", min("t1"."time") AS "time", array_agg(("t1"."event") ORDER BY TIME ASC, event DESC) AS collected_events
min("t1"."time") AS "time",
array_agg(("t1"."event")
ORDER BY TIME ASC, event DESC) AS collected_events
FROM ( FROM (
(SELECT "events"."user_id", (SELECT
"events"."time", "events"."user_id", "events"."time", 0 AS event
0 AS event FROM
FROM events_table as "events" events_table as "events"
WHERE event_type IN (10, 11, 12, 13, 14, 15) WHERE
) event_type IN (10, 11, 12, 13, 14, 15))
UNION ALL UNION ALL
(SELECT "events"."user_id", "events"."time", 1 AS event (SELECT
FROM events_table as "events" "events"."user_id", "events"."time", 1 AS event
WHERE event_type IN (15, 16, 17, 18, 19) ) FROM
events_table as "events"
WHERE
event_type IN (15, 16, 17, 18, 19) )
UNION ALL UNION ALL
(SELECT
(SELECT "events"."user_id", "events"."time", 2 AS event "events"."user_id", "events"."time", 2 AS event
FROM events_table as "events" FROM
WHERE event_type IN (20, 21, 22, 23, 24, 25) ) events_table as "events"
WHERE
event_type IN (20, 21, 22, 23, 24, 25) )
UNION ALL UNION ALL
(SELECT
(SELECT "events"."user_id", "events"."time", 3 AS event "events"."user_id", "events"."time", 3 AS event
FROM events_table as "events" FROM
WHERE event_type IN (26, 27, 28, 29, 30, 13))) t1 events_table as "events"
WHERE
event_type IN (26, 27, 28, 29, 30, 13))) t1
GROUP BY "t1"."user_id") AS t) "q" GROUP BY "t1"."user_id") AS t) "q"
GROUP BY types GROUP BY types
ORDER BY types; ORDER BY types;
@ -551,13 +582,13 @@ FROM
(SELECT value_3, user_id FROM events_table where event_type IN (1, 2, 3, 4, 5)) (SELECT value_3, user_id FROM events_table where event_type IN (1, 2, 3, 4, 5))
UNION ALL UNION ALL
(SELECT value_3, user_id FROM events_table where event_type IN (6, 7, 8, 9, 10)) (SELECT value_3, user_id FROM events_table where event_type IN (6, 7, 8, 9, 10))
UNION ALL UNION ALL
(SELECT value_3, user_id FROM events_table where event_type IN (11, 12, 13, 14, 15)) (SELECT value_3, user_id FROM events_table where event_type IN (11, 12, 13, 14, 15))
UNION ALL UNION ALL
(SELECT value_3, user_id FROM events_table where event_type IN (16, 17, 18, 19, 20)) (SELECT value_3, user_id FROM events_table where event_type IN (16, 17, 18, 19, 20))
UNION ALL UNION ALL
(SELECT value_3, user_id FROM events_table where event_type IN (21, 22, 23, 24, 25)) (SELECT value_3, user_id FROM events_table where event_type IN (21, 22, 23, 24, 25))
UNION ALL UNION ALL
(SELECT value_3, user_id FROM events_table where event_type IN (26, 27, 28, 29, 30)) (SELECT value_3, user_id FROM events_table where event_type IN (26, 27, 28, 29, 30))
) b ) b
ORDER BY 1 DESC, 2 DESC ORDER BY 1 DESC, 2 DESC
@ -579,13 +610,13 @@ FROM
(SELECT value_3, user_id FROM events_table where event_type IN (1, 2, 3, 4, 5)) (SELECT value_3, user_id FROM events_table where event_type IN (1, 2, 3, 4, 5))
UNION ALL UNION ALL
(SELECT value_3, user_id FROM events_table where event_type IN (6, 7, 8, 9, 10)) (SELECT value_3, user_id FROM events_table where event_type IN (6, 7, 8, 9, 10))
UNION ALL UNION ALL
(SELECT value_3, user_id FROM events_table where event_type IN (11, 12, 13, 14, 15)) (SELECT value_3, user_id FROM events_table where event_type IN (11, 12, 13, 14, 15))
UNION ALL UNION ALL
(SELECT value_3, user_id FROM events_table where event_type IN (16, 17, 18, 19, 20)) (SELECT value_3, user_id FROM events_table where event_type IN (16, 17, 18, 19, 20))
UNION ALL UNION ALL
(SELECT value_3, user_id FROM events_table where event_type IN (21, 22, 23, 24, 25)) (SELECT value_3, user_id FROM events_table where event_type IN (21, 22, 23, 24, 25))
UNION ALL UNION ALL
(SELECT value_3, user_id FROM events_table where event_type IN (26, 27, 28, 29, 30)) (SELECT value_3, user_id FROM events_table where event_type IN (26, 27, 28, 29, 30))
) b ) b
GROUP BY user_id GROUP BY user_id
@ -619,9 +650,9 @@ FROM (
SELECT user_id, sum(value_2) AS counter FROM users_table where value_1 < 40 and value_1 < 60 GROUP BY user_id HAVING sum(value_2) > 500 SELECT user_id, sum(value_2) AS counter FROM users_table where value_1 < 40 and value_1 < 60 GROUP BY user_id HAVING sum(value_2) > 500
UNION UNION
SELECT user_id, sum(value_2) AS counter FROM users_table where value_1 < 60 and value_1 < 80 GROUP BY user_id HAVING sum(value_2) > 500 SELECT user_id, sum(value_2) AS counter FROM users_table where value_1 < 60 and value_1 < 80 GROUP BY user_id HAVING sum(value_2) > 500
UNION UNION
SELECT user_id, sum(value_2) AS counter FROM users_table where value_1 < 80 and value_1 < 100 GROUP BY user_id HAVING sum(value_2) > 500 SELECT user_id, sum(value_2) AS counter FROM users_table where value_1 < 80 and value_1 < 100 GROUP BY user_id HAVING sum(value_2) > 500
UNION UNION
SELECT 2 * user_id, sum(value_2) AS counter FROM users_table where value_1 < 100 and value_1 < 120 GROUP BY user_id HAVING sum(value_2) > 500 SELECT 2 * user_id, sum(value_2) AS counter FROM users_table where value_1 < 100 and value_1 < 120 GROUP BY user_id HAVING sum(value_2) > 500
) user_id ) user_id
GROUP BY user_id ORDER BY 1 DESC LIMIT 5; GROUP BY user_id ORDER BY 1 DESC LIMIT 5;
@ -634,7 +665,7 @@ SELECT * FROM
SELECT user_id, sum(counter) SELECT user_id, sum(counter)
FROM ( FROM (
SELECT user_id, sum(value_2) AS counter FROM users_table GROUP BY user_id SELECT user_id, sum(value_2) AS counter FROM users_table GROUP BY user_id
UNION UNION
SELECT user_id, sum(value_2) AS counter FROM events_table GROUP BY user_id SELECT user_id, sum(value_2) AS counter FROM events_table GROUP BY user_id
) user_id_1 ) user_id_1
GROUP BY user_id GROUP BY user_id
@ -655,7 +686,7 @@ DETAIL: Intersect and Except are currently unsupported
SELECT user_id, sum(counter) SELECT user_id, sum(counter)
FROM ( FROM (
SELECT user_id, sum(value_2) AS counter FROM users_table GROUP BY user_id SELECT user_id, sum(value_2) AS counter FROM users_table GROUP BY user_id
UNION UNION
SELECT events_table.user_id, sum(events_table.value_2) AS counter FROM events_table, users_table WHERE users_table.user_id > events_table.user_id GROUP BY 1 SELECT events_table.user_id, sum(events_table.value_2) AS counter FROM events_table, users_table WHERE users_table.user_id > events_table.user_id GROUP BY 1
) user_id ) user_id
GROUP BY user_id; GROUP BY user_id;
@ -668,7 +699,7 @@ SELECT * FROM
SELECT user_id, sum(counter) SELECT user_id, sum(counter)
FROM ( FROM (
SELECT user_id, sum(value_2) AS counter FROM users_table GROUP BY user_id SELECT user_id, sum(value_2) AS counter FROM users_table GROUP BY user_id
UNION UNION
SELECT user_id, sum(value_2) AS counter FROM events_table GROUP BY user_id SELECT user_id, sum(value_2) AS counter FROM events_table GROUP BY user_id
) user_id_1 ) user_id_1
GROUP BY user_id GROUP BY user_id
@ -701,32 +732,40 @@ FROM (
( SELECT user_id, ( SELECT user_id,
sum(counter) sum(counter)
FROM FROM
( SELECT user_id, (SELECT
sum(value_2) AS counter user_id, sum(value_2) AS counter
FROM users_table FROM
GROUP BY user_id users_table
GROUP BY
user_id
UNION UNION
SELECT user_id, SELECT
sum(value_2) AS counter user_id, sum(value_2) AS counter
FROM events_table FROM
GROUP BY user_id ) user_id_1 events_table
GROUP BY user_id) GROUP BY
user_id) user_id_1
GROUP BY
user_id)
UNION UNION
( SELECT user_id, (SELECT
sum(counter) user_id, sum(counter)
FROM FROM
( SELECT sum(value_2) AS counter, (SELECT
user_id sum(value_2) AS counter, user_id
FROM users_table FROM
GROUP BY user_id users_table
GROUP BY
user_id
UNION UNION
SELECT user_id, SELECT
sum(value_2) AS counter user_id, sum(value_2) AS counter
FROM events_table FROM
GROUP BY user_id) user_id_2 events_table
GROUP BY user_id)) AS ftop; GROUP BY
user_id) user_id_2
GROUP BY
user_id)) AS ftop;
ERROR: cannot pushdown the subquery since all leaves of the UNION does not include partition key at the same position ERROR: cannot pushdown the subquery since all leaves of the UNION does not include partition key at the same position
DETAIL: Each leaf query of the UNION should return partition key at the same position on its target list. DETAIL: Each leaf query of the UNION should return partition key at the same position on its target list.
-- some UNION all queries that are going to be pulled up -- some UNION all queries that are going to be pulled up
@ -748,13 +787,13 @@ FROM
(SELECT value_3, user_id FROM events_table where event_type IN (1, 2, 3, 4, 5)) (SELECT value_3, user_id FROM events_table where event_type IN (1, 2, 3, 4, 5))
UNION ALL UNION ALL
(SELECT value_3, user_id FROM events_table where event_type IN (6, 7, 8, 9, 10)) (SELECT value_3, user_id FROM events_table where event_type IN (6, 7, 8, 9, 10))
UNION ALL UNION ALL
(SELECT value_3, user_id FROM events_table where event_type IN (11, 12, 13, 14, 15)) (SELECT value_3, user_id FROM events_table where event_type IN (11, 12, 13, 14, 15))
UNION ALL UNION ALL
(SELECT value_3, user_id FROM events_table where event_type IN (16, 17, 18, 19, 20)) (SELECT value_3, user_id FROM events_table where event_type IN (16, 17, 18, 19, 20))
UNION ALL UNION ALL
(SELECT value_3, user_id FROM events_table where event_type IN (21, 22, 23, 24, 25)) (SELECT value_3, user_id FROM events_table where event_type IN (21, 22, 23, 24, 25))
UNION ALL UNION ALL
(SELECT value_3, value_2 FROM events_table where event_type IN (26, 27, 28, 29, 30)) (SELECT value_3, value_2 FROM events_table where event_type IN (26, 27, 28, 29, 30))
) b ) b
ORDER BY 1 DESC, 2 DESC ORDER BY 1 DESC, 2 DESC
@ -802,44 +841,59 @@ FROM
(SELECT value_3, user_id FROM events_table where event_type IN (1, 2, 3, 4, 5)) (SELECT value_3, user_id FROM events_table where event_type IN (1, 2, 3, 4, 5))
UNION ALL UNION ALL
(SELECT value_3, user_id FROM events_table where event_type IN (6, 7, 8, 9, 10)) (SELECT value_3, user_id FROM events_table where event_type IN (6, 7, 8, 9, 10))
UNION ALL UNION ALL
(SELECT value_3, user_id FROM events_table where event_type IN (11, 12, 13, 14, 15)) (SELECT value_3, user_id FROM events_table where event_type IN (11, 12, 13, 14, 15))
UNION ALL UNION ALL
(SELECT value_3, user_id FROM events_table where event_type IN (16, 17, 18, 19, 20)) (SELECT value_3, user_id FROM events_table where event_type IN (16, 17, 18, 19, 20))
UNION ALL UNION ALL
(SELECT value_3, user_id FROM events_table where event_type IN (21, 22, 23, 24, 25)) (SELECT value_3, user_id FROM events_table where event_type IN (21, 22, 23, 24, 25))
UNION ALL UNION ALL
(SELECT 1, 2) (SELECT 1, 2)
) b ) b
ORDER BY 1 DESC, 2 DESC ORDER BY 1 DESC, 2 DESC
LIMIT 5; LIMIT 5;
ERROR: cannot push down this subquery ERROR: cannot push down this subquery
DETAIL: Subqueries without relations are unsupported DETAIL: Subqueries without relations are unsupported
SELECT ("q"."event_types") as types, count(*) AS sumOfEventType SELECT ("final_query"."event_types") as types, count(*) AS sumOfEventType
FROM FROM
( SELECT "t"."user_id", ( SELECT *, random()
"t"."time", FROM
unnest("t"."collected_events") AS "event_types" ( SELECT "t"."user_id", "t"."time", unnest("t"."collected_events") AS "event_types"
FROM FROM
( SELECT "t1"."user_id", ( SELECT "t1"."user_id", min("t1"."time") AS "time", array_agg(("t1"."event") ORDER BY TIME ASC, event DESC) AS collected_events
min("t1"."time") AS "time",
array_agg(("t1"."event") ORDER BY time ASC, event DESC) AS collected_events
FROM ( FROM (
(SELECT "events"."user_id", "events"."time", 0 AS event (SELECT *
FROM events_table as "events" FROM
WHERE event_type IN (10, 11, 12, 13, 14, 15) (SELECT
) "events"."user_id", "events"."time", 0 AS event
UNION FROM
(SELECT "events"."user_id", "events"."time", 1 AS event events_table as "events"
FROM events_table as "events" WHERE
WHERE event_type IN (15, 16, 17, 18, 19) ) event_type IN (10, 11, 12, 13, 14, 15)) events_subquery_1)
UNION UNION
(SELECT "events"."user_id", "events"."time", 2 AS event (SELECT *
FROM events_table as "events" FROM
WHERE event_type IN (20, 21, 22, 23, 24, 25) ) (SELECT
UNION "events"."user_id", "events"."time", 1 AS event
(SELECT 1, now(), 3 AS event)) t1 FROM
events_table as "events"
WHERE
event_type IN (15, 16, 17, 18, 19) ) events_subquery_2)
UNION
(SELECT *
FROM
(SELECT
"events"."user_id", "events"."time", 2 AS event
FROM
events_table as "events"
WHERE
event_type IN (20, 21, 22, 23, 24, 25) ) events_subquery_3)
UNION
(SELECT *
FROM
(SELECT 1, now(), 3 AS event) events_subquery_4)) t1
GROUP BY "t1"."user_id") AS t) "q" GROUP BY "t1"."user_id") AS t) "q"
) as final_query
GROUP BY types GROUP BY types
ORDER BY types; ORDER BY types;
ERROR: cannot push down this subquery ERROR: cannot push down this subquery

View File

@ -170,32 +170,29 @@ FROM
GROUP BY GROUP BY
l_orderkey) AS unit_prices; l_orderkey) AS unit_prices;
-- Check that we error out if there is union all. -- Check that we error out if there is non relation subqueries
-- TEMPORARLY DISABLE UNION ALL SELECT count(*) FROM
-- SELECT count(*) FROM (
-- ( (SELECT l_orderkey FROM lineitem_subquery) UNION ALL
-- (SELECT l_orderkey FROM lineitem_subquery) UNION ALL (SELECT 1::bigint)
-- (SELECT 1::bigint) ) b;
--) b;
---
-- TEMPORARLY DISABLE UNIONS WITHOUT JOINS
---
-- Check that we error out if queries in union do not include partition columns. -- Check that we error out if queries in union do not include partition columns.
--SELECT count(*) FROM SELECT count(*) FROM
--( (
-- (SELECT l_orderkey FROM lineitem_subquery) UNION (SELECT l_orderkey FROM lineitem_subquery) UNION
-- (SELECT l_partkey FROM lineitem_subquery) (SELECT l_partkey FROM lineitem_subquery)
--) b; ) b;
-- Check that we run union queries if partition column is selected. -- Check that we run union queries if partition column is selected.
--SELECT count(*) FROM SELECT count(*) FROM
--( (
-- (SELECT l_orderkey FROM lineitem_subquery) UNION (SELECT l_orderkey FROM lineitem_subquery) UNION
-- (SELECT l_orderkey FROM lineitem_subquery) (SELECT l_orderkey FROM lineitem_subquery)
--) b; ) b;
-- Check that we error out if inner query has limit but outer quers has not. -- Check that we error out if inner query has limit but outer quers has not.
SELECT SELECT
avg(o_totalprice/l_quantity) avg(o_totalprice/l_quantity)
@ -273,23 +270,23 @@ WHERE
-- Check that if subquery is pulled, we don't error and run query properly. -- Check that if subquery is pulled, we don't error and run query properly.
--SELECT count(*) FROM SELECT count(*) FROM
--( (
--SELECT l_orderkey FROM ( SELECT l_orderkey FROM (
--(SELECT l_orderkey FROM lineitem_subquery) UNION (SELECT l_orderkey FROM lineitem_subquery) UNION
--(SELECT l_orderkey FROM lineitem_subquery) (SELECT l_orderkey FROM lineitem_subquery)
--) a ) a
--WHERE l_orderkey = 1 WHERE l_orderkey = 1
--) b; ) b;
--SELECT count(*) FROM SELECT count(*) FROM
--( (
--SELECT * FROM ( SELECT * FROM (
--(SELECT * FROM lineitem_subquery) UNION (SELECT * FROM lineitem_subquery) UNION
--(SELECT * FROM lineitem_subquery) (SELECT * FROM lineitem_subquery)
--) a ) a
--WHERE l_orderkey = 1 WHERE l_orderkey = 1
--) b; ) b;
SELECT max(l_orderkey) FROM SELECT max(l_orderkey) FROM
( (

View File

@ -174,28 +174,33 @@ FROM
l_orderkey) AS unit_prices; l_orderkey) AS unit_prices;
ERROR: cannot pushdown the subquery since all relations are not joined using distribution keys ERROR: cannot pushdown the subquery since all relations are not joined using distribution keys
DETAIL: Each relation should be joined with at least one another relation using distribution keys and equality operator. DETAIL: Each relation should be joined with at least one another relation using distribution keys and equality operator.
-- Check that we error out if there is union all. -- Check that we error out if there is non relation subqueries
-- TEMPORARLY DISABLE UNION ALL SELECT count(*) FROM
-- SELECT count(*) FROM (
-- ( (SELECT l_orderkey FROM lineitem_subquery) UNION ALL
-- (SELECT l_orderkey FROM lineitem_subquery) UNION ALL (SELECT 1::bigint)
-- (SELECT 1::bigint) ) b;
--) b; ERROR: cannot push down this subquery
--- DETAIL: Subqueries without relations are unsupported
-- TEMPORARLY DISABLE UNIONS WITHOUT JOINS
---
-- Check that we error out if queries in union do not include partition columns. -- Check that we error out if queries in union do not include partition columns.
--SELECT count(*) FROM SELECT count(*) FROM
--( (
-- (SELECT l_orderkey FROM lineitem_subquery) UNION (SELECT l_orderkey FROM lineitem_subquery) UNION
-- (SELECT l_partkey FROM lineitem_subquery) (SELECT l_partkey FROM lineitem_subquery)
--) b; ) b;
ERROR: cannot pushdown the subquery since all leaves of the UNION does not include partition key at the same position
DETAIL: Each leaf query of the UNION should return partition key at the same position on its target list.
-- Check that we run union queries if partition column is selected. -- Check that we run union queries if partition column is selected.
--SELECT count(*) FROM SELECT count(*) FROM
--( (
-- (SELECT l_orderkey FROM lineitem_subquery) UNION (SELECT l_orderkey FROM lineitem_subquery) UNION
-- (SELECT l_orderkey FROM lineitem_subquery) (SELECT l_orderkey FROM lineitem_subquery)
--) b; ) b;
count
-------
2985
(1 row)
-- Check that we error out if inner query has limit but outer quers has not. -- Check that we error out if inner query has limit but outer quers has not.
SELECT SELECT
avg(o_totalprice/l_quantity) avg(o_totalprice/l_quantity)
@ -289,22 +294,32 @@ WHERE
(1 row) (1 row)
-- Check that if subquery is pulled, we don't error and run query properly. -- Check that if subquery is pulled, we don't error and run query properly.
--SELECT count(*) FROM SELECT count(*) FROM
--( (
--SELECT l_orderkey FROM ( SELECT l_orderkey FROM (
--(SELECT l_orderkey FROM lineitem_subquery) UNION (SELECT l_orderkey FROM lineitem_subquery) UNION
--(SELECT l_orderkey FROM lineitem_subquery) (SELECT l_orderkey FROM lineitem_subquery)
--) a ) a
--WHERE l_orderkey = 1 WHERE l_orderkey = 1
--) b; ) b;
--SELECT count(*) FROM count
--( -------
--SELECT * FROM ( 1
--(SELECT * FROM lineitem_subquery) UNION (1 row)
--(SELECT * FROM lineitem_subquery)
--) a SELECT count(*) FROM
--WHERE l_orderkey = 1 (
--) b; SELECT * FROM (
(SELECT * FROM lineitem_subquery) UNION
(SELECT * FROM lineitem_subquery)
) a
WHERE l_orderkey = 1
) b;
count
-------
6
(1 row)
SELECT max(l_orderkey) FROM SELECT max(l_orderkey) FROM
( (
SELECT l_orderkey FROM ( SELECT l_orderkey FROM (

View File

@ -174,28 +174,33 @@ FROM
l_orderkey) AS unit_prices; l_orderkey) AS unit_prices;
ERROR: cannot pushdown the subquery since all relations are not joined using distribution keys ERROR: cannot pushdown the subquery since all relations are not joined using distribution keys
DETAIL: Each relation should be joined with at least one another relation using distribution keys and equality operator. DETAIL: Each relation should be joined with at least one another relation using distribution keys and equality operator.
-- Check that we error out if there is union all. -- Check that we error out if there is non relation subqueries
-- TEMPORARLY DISABLE UNION ALL SELECT count(*) FROM
-- SELECT count(*) FROM (
-- ( (SELECT l_orderkey FROM lineitem_subquery) UNION ALL
-- (SELECT l_orderkey FROM lineitem_subquery) UNION ALL (SELECT 1::bigint)
-- (SELECT 1::bigint) ) b;
--) b; ERROR: cannot push down this subquery
--- DETAIL: Subqueries without relations are unsupported
-- TEMPORARLY DISABLE UNIONS WITHOUT JOINS
---
-- Check that we error out if queries in union do not include partition columns. -- Check that we error out if queries in union do not include partition columns.
--SELECT count(*) FROM SELECT count(*) FROM
--( (
-- (SELECT l_orderkey FROM lineitem_subquery) UNION (SELECT l_orderkey FROM lineitem_subquery) UNION
-- (SELECT l_partkey FROM lineitem_subquery) (SELECT l_partkey FROM lineitem_subquery)
--) b; ) b;
ERROR: cannot pushdown the subquery since all leaves of the UNION does not include partition key at the same position
DETAIL: Each leaf query of the UNION should return partition key at the same position on its target list.
-- Check that we run union queries if partition column is selected. -- Check that we run union queries if partition column is selected.
--SELECT count(*) FROM SELECT count(*) FROM
--( (
-- (SELECT l_orderkey FROM lineitem_subquery) UNION (SELECT l_orderkey FROM lineitem_subquery) UNION
-- (SELECT l_orderkey FROM lineitem_subquery) (SELECT l_orderkey FROM lineitem_subquery)
--) b; ) b;
count
-------
2985
(1 row)
-- Check that we error out if inner query has limit but outer quers has not. -- Check that we error out if inner query has limit but outer quers has not.
SELECT SELECT
avg(o_totalprice/l_quantity) avg(o_totalprice/l_quantity)
@ -289,22 +294,32 @@ WHERE
(1 row) (1 row)
-- Check that if subquery is pulled, we don't error and run query properly. -- Check that if subquery is pulled, we don't error and run query properly.
--SELECT count(*) FROM SELECT count(*) FROM
--( (
--SELECT l_orderkey FROM ( SELECT l_orderkey FROM (
--(SELECT l_orderkey FROM lineitem_subquery) UNION (SELECT l_orderkey FROM lineitem_subquery) UNION
--(SELECT l_orderkey FROM lineitem_subquery) (SELECT l_orderkey FROM lineitem_subquery)
--) a ) a
--WHERE l_orderkey = 1 WHERE l_orderkey = 1
--) b; ) b;
--SELECT count(*) FROM count
--( -------
--SELECT * FROM ( 1
--(SELECT * FROM lineitem_subquery) UNION (1 row)
--(SELECT * FROM lineitem_subquery)
--) a SELECT count(*) FROM
--WHERE l_orderkey = 1 (
--) b; SELECT * FROM (
(SELECT * FROM lineitem_subquery) UNION
(SELECT * FROM lineitem_subquery)
) a
WHERE l_orderkey = 1
) b;
count
-------
6
(1 row)
SELECT max(l_orderkey) FROM SELECT max(l_orderkey) FROM
( (
SELECT l_orderkey FROM ( SELECT l_orderkey FROM (

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -123,34 +123,40 @@ FROM (
( SELECT user_id, ( SELECT user_id,
sum(counter) sum(counter)
FROM FROM
( SELECT user_id, (SELECT
sum(value_2) AS counter user_id, sum(value_2) AS counter
FROM users_table FROM
GROUP BY user_id users_table
GROUP BY
user_id
UNION UNION
SELECT
SELECT user_id, user_id, sum(value_2) AS counter
sum(value_2) AS counter FROM
FROM events_table events_table
GROUP BY user_id ) user_id_1 GROUP BY
GROUP BY user_id) user_id) user_id_1
GROUP BY
user_id)
UNION UNION
( SELECT user_id, (SELECT
sum(counter) user_id, sum(counter)
FROM FROM
( SELECT (SELECT
user_id, sum(value_2) AS counter user_id, sum(value_2) AS counter
FROM users_table FROM
GROUP BY user_id users_table
GROUP BY
user_id
UNION UNION
SELECT
SELECT user_id, sum(value_2) AS counter user_id, sum(value_2) AS counter
FROM
FROM events_table events_table
GROUP BY user_id) user_id_2 GROUP BY
GROUP BY user_id)) AS ftop user_id) user_id_2
GROUP BY
user_id)) AS ftop
ORDER BY 2 DESC, 1 DESC ORDER BY 2 DESC, 1 DESC
LIMIT 5; LIMIT 5;
@ -159,40 +165,45 @@ SELECT ("final_query"."event_types") as types, count(*) AS sumOfEventType
FROM FROM
( SELECT *, random() ( SELECT *, random()
FROM FROM
( SELECT "t"."user_id", ( SELECT "t"."user_id", "t"."time", unnest("t"."collected_events") AS "event_types"
"t"."time",
unnest("t"."collected_events") AS "event_types"
FROM FROM
( SELECT "t1"."user_id", ( SELECT "t1"."user_id", min("t1"."time") AS "time", array_agg(("t1"."event") ORDER BY TIME ASC, event DESC) AS collected_events
min("t1"."time") AS "time",
array_agg(("t1"."event")
ORDER BY TIME ASC, event DESC) AS collected_events
FROM ( FROM (
(SELECT * (SELECT *
FROM FROM
(SELECT "events"."user_id", (SELECT
"events"."time", "events"."user_id", "events"."time", 0 AS event
0 AS event FROM
FROM events_table as "events" events_table as "events"
WHERE event_type IN (10, 11, 12, 13, 14, 15) ) events_subquery_1) WHERE
event_type IN (10, 11, 12, 13, 14, 15)) events_subquery_1)
UNION UNION
(SELECT * (SELECT *
FROM FROM
(SELECT "events"."user_id", "events"."time", 1 AS event (SELECT
FROM events_table as "events" "events"."user_id", "events"."time", 1 AS event
WHERE event_type IN (15, 16, 17, 18, 19) ) events_subquery_2) FROM
events_table as "events"
WHERE
event_type IN (15, 16, 17, 18, 19) ) events_subquery_2)
UNION UNION
(SELECT * (SELECT *
FROM FROM
(SELECT "events"."user_id", "events"."time", 2 AS event (SELECT
FROM events_table as "events" "events"."user_id", "events"."time", 2 AS event
WHERE event_type IN (20, 21, 22, 23, 24, 25) ) events_subquery_3) FROM
events_table as "events"
WHERE
event_type IN (20, 21, 22, 23, 24, 25) ) events_subquery_3)
UNION UNION
(SELECT * (SELECT *
FROM FROM
(SELECT "events"."user_id", "events"."time", 3 AS event (SELECT
FROM events_table as "events" "events"."user_id", "events"."time", 3 AS event
WHERE event_type IN (26, 27, 28, 29, 30, 13)) events_subquery_4)) t1 FROM
events_table as "events"
WHERE
event_type IN (26, 27, 28, 29, 30, 13)) events_subquery_4)) t1
GROUP BY "t1"."user_id") AS t) "q" GROUP BY "t1"."user_id") AS t) "q"
) as final_query ) as final_query
GROUP BY types GROUP BY types
@ -202,36 +213,41 @@ ORDER BY types;
-- but wrapper unions are removed from the inner part of the query -- but wrapper unions are removed from the inner part of the query
SELECT ("final_query"."event_types") as types, count(*) AS sumOfEventType SELECT ("final_query"."event_types") as types, count(*) AS sumOfEventType
FROM FROM
( SELECT *, random() (SELECT *, random()
FROM FROM
( SELECT "t"."user_id", (SELECT
"t"."time", "t"."user_id", "t"."time", unnest("t"."collected_events") AS "event_types"
unnest("t"."collected_events") AS "event_types"
FROM FROM
( SELECT "t1"."user_id", (SELECT
min("t1"."time") AS "time", "t1"."user_id", min("t1"."time") AS "time", array_agg(("t1"."event") ORDER BY TIME ASC, event DESC) AS collected_events
array_agg(("t1"."event") FROM(
ORDER BY TIME ASC, event DESC) AS collected_events (SELECT
FROM ( "events"."user_id", "events"."time", 0 AS event
(SELECT "events"."user_id", FROM
"events"."time", events_table as "events"
0 AS event WHERE
FROM events_table as "events" event_type IN (10, 11, 12, 13, 14, 15))
WHERE event_type IN (10, 11, 12, 13, 14, 15))
UNION UNION
(SELECT "events"."user_id", "events"."time", 1 AS event (SELECT
FROM events_table as "events" "events"."user_id", "events"."time", 1 AS event
WHERE event_type IN (15, 16, 17, 18, 19) ) FROM
events_table as "events"
WHERE
event_type IN (15, 16, 17, 18, 19) )
UNION UNION
(SELECT
(SELECT "events"."user_id", "events"."time", 2 AS event "events"."user_id", "events"."time", 2 AS event
FROM events_table as "events" FROM
WHERE event_type IN (20, 21, 22, 23, 24, 25) ) events_table as "events"
WHERE
event_type IN (20, 21, 22, 23, 24, 25) )
UNION UNION
(SELECT
(SELECT "events"."user_id", "events"."time", 3 AS event "events"."user_id", "events"."time", 3 AS event
FROM events_table as "events" FROM
WHERE event_type IN (26, 27, 28, 29, 30, 13))) t1 events_table as "events"
WHERE
event_type IN (26, 27, 28, 29, 30, 13))) t1
GROUP BY "t1"."user_id") AS t) "q" GROUP BY "t1"."user_id") AS t) "q"
) as final_query ) as final_query
GROUP BY types GROUP BY types
@ -240,35 +256,37 @@ ORDER BY types;
-- again excatly the same query with top level wrapper removed -- again excatly the same query with top level wrapper removed
SELECT ("q"."event_types") as types, count(*) AS sumOfEventType SELECT ("q"."event_types") as types, count(*) AS sumOfEventType
FROM FROM
( SELECT "t"."user_id", ( SELECT "t"."user_id", "t"."time", unnest("t"."collected_events") AS "event_types"
"t"."time",
unnest("t"."collected_events") AS "event_types"
FROM FROM
( SELECT "t1"."user_id", ( SELECT "t1"."user_id", min("t1"."time") AS "time", array_agg(("t1"."event") ORDER BY TIME ASC, event DESC) AS collected_events
min("t1"."time") AS "time",
array_agg(("t1"."event")
ORDER BY TIME ASC, event DESC) AS collected_events
FROM ( FROM (
(SELECT "events"."user_id", (SELECT
"events"."time", "events"."user_id", "events"."time", 0 AS event
0 AS event FROM
FROM events_table as "events" events_table as "events"
WHERE event_type IN (10, 11, 12, 13, 14, 15) WHERE
) event_type IN (10, 11, 12, 13, 14, 15))
UNION UNION
(SELECT "events"."user_id", "events"."time", 1 AS event (SELECT
FROM events_table as "events" "events"."user_id", "events"."time", 1 AS event
WHERE event_type IN (15, 16, 17, 18, 19) ) FROM
events_table as "events"
WHERE
event_type IN (15, 16, 17, 18, 19) )
UNION UNION
(SELECT
(SELECT "events"."user_id", "events"."time", 2 AS event "events"."user_id", "events"."time", 2 AS event
FROM events_table as "events" FROM
WHERE event_type IN (20, 21, 22, 23, 24, 25) ) events_table as "events"
WHERE
event_type IN (20, 21, 22, 23, 24, 25) )
UNION UNION
(SELECT
(SELECT "events"."user_id", "events"."time", 3 AS event "events"."user_id", "events"."time", 3 AS event
FROM events_table as "events" FROM
WHERE event_type IN (26, 27, 28, 29, 30, 13))) t1 events_table as "events"
WHERE
event_type IN (26, 27, 28, 29, 30, 13))) t1
GROUP BY "t1"."user_id") AS t) "q" GROUP BY "t1"."user_id") AS t) "q"
GROUP BY types GROUP BY types
ORDER BY types; ORDER BY types;
@ -280,60 +298,71 @@ FROM
FROM FROM
( SELECT "t1"."user_id" ( SELECT "t1"."user_id"
FROM ( FROM (
(SELECT "events"."user_id", (SELECT
"events"."time", "events"."user_id", "events"."time", 0 AS event
0 AS event FROM
FROM events_table as "events" events_table as "events"
WHERE event_type IN (10, 11, 12, 13, 14, 15) WHERE
) event_type IN (10, 11, 12, 13, 14, 15))
UNION UNION
(SELECT "events"."user_id", "events"."time", 1 AS event (SELECT
FROM events_table as "events" "events"."user_id", "events"."time", 1 AS event
WHERE event_type IN (15, 16, 17, 18, 19) ) FROM
events_table as "events"
WHERE
event_type IN (15, 16, 17, 18, 19) )
UNION UNION
(SELECT
(SELECT "events"."user_id", "events"."time", 2 AS event "events"."user_id", "events"."time", 2 AS event
FROM events_table as "events" FROM
WHERE event_type IN (20, 21, 22, 23, 24, 25) ) events_table as "events"
WHERE
event_type IN (20, 21, 22, 23, 24, 25) )
UNION UNION
(SELECT
(SELECT "events"."user_id", "events"."time", 3 AS event "events"."user_id", "events"."time", 3 AS event
FROM events_table as "events" FROM
WHERE event_type IN (26, 27, 28, 29, 30, 13))) t1 events_table as "events"
) AS t) "q" ORDER BY 1 LIMIT 5; WHERE
event_type IN (26, 27, 28, 29, 30, 13))) t1
) AS t) "q"
ORDER BY 1
LIMIT 5;
-- a very similar query UNION ALL -- a very similar query UNION ALL
SELECT ("q"."event_types") as types, count(*) AS sumOfEventType SELECT ("q"."event_types") as types, count(*) AS sumOfEventType
FROM FROM
( SELECT "t"."user_id", ( SELECT "t"."user_id", "t"."time", unnest("t"."collected_events") AS "event_types"
"t"."time",
unnest("t"."collected_events") AS "event_types"
FROM FROM
( SELECT "t1"."user_id", ( SELECT "t1"."user_id", min("t1"."time") AS "time", array_agg(("t1"."event") ORDER BY TIME ASC, event DESC) AS collected_events
min("t1"."time") AS "time",
array_agg(("t1"."event")
ORDER BY TIME ASC, event DESC) AS collected_events
FROM ( FROM (
(SELECT "events"."user_id", (SELECT
"events"."time", "events"."user_id", "events"."time", 0 AS event
0 AS event FROM
FROM events_table as "events" events_table as "events"
WHERE event_type IN (10, 11, 12, 13, 14, 15) WHERE
) event_type IN (10, 11, 12, 13, 14, 15))
UNION ALL UNION ALL
(SELECT "events"."user_id", "events"."time", 1 AS event (SELECT
FROM events_table as "events" "events"."user_id", "events"."time", 1 AS event
WHERE event_type IN (15, 16, 17, 18, 19) ) FROM
events_table as "events"
WHERE
event_type IN (15, 16, 17, 18, 19) )
UNION ALL UNION ALL
(SELECT
(SELECT "events"."user_id", "events"."time", 2 AS event "events"."user_id", "events"."time", 2 AS event
FROM events_table as "events" FROM
WHERE event_type IN (20, 21, 22, 23, 24, 25) ) events_table as "events"
WHERE
event_type IN (20, 21, 22, 23, 24, 25) )
UNION ALL UNION ALL
(SELECT
(SELECT "events"."user_id", "events"."time", 3 AS event "events"."user_id", "events"."time", 3 AS event
FROM events_table as "events" FROM
WHERE event_type IN (26, 27, 28, 29, 30, 13))) t1 events_table as "events"
WHERE
event_type IN (26, 27, 28, 29, 30, 13))) t1
GROUP BY "t1"."user_id") AS t) "q" GROUP BY "t1"."user_id") AS t) "q"
GROUP BY types GROUP BY types
ORDER BY types; ORDER BY types;
@ -405,13 +434,13 @@ FROM
(SELECT value_3, user_id FROM events_table where event_type IN (1, 2, 3, 4, 5)) (SELECT value_3, user_id FROM events_table where event_type IN (1, 2, 3, 4, 5))
UNION ALL UNION ALL
(SELECT value_3, user_id FROM events_table where event_type IN (6, 7, 8, 9, 10)) (SELECT value_3, user_id FROM events_table where event_type IN (6, 7, 8, 9, 10))
UNION ALL UNION ALL
(SELECT value_3, user_id FROM events_table where event_type IN (11, 12, 13, 14, 15)) (SELECT value_3, user_id FROM events_table where event_type IN (11, 12, 13, 14, 15))
UNION ALL UNION ALL
(SELECT value_3, user_id FROM events_table where event_type IN (16, 17, 18, 19, 20)) (SELECT value_3, user_id FROM events_table where event_type IN (16, 17, 18, 19, 20))
UNION ALL UNION ALL
(SELECT value_3, user_id FROM events_table where event_type IN (21, 22, 23, 24, 25)) (SELECT value_3, user_id FROM events_table where event_type IN (21, 22, 23, 24, 25))
UNION ALL UNION ALL
(SELECT value_3, user_id FROM events_table where event_type IN (26, 27, 28, 29, 30)) (SELECT value_3, user_id FROM events_table where event_type IN (26, 27, 28, 29, 30))
) b ) b
ORDER BY 1 DESC, 2 DESC ORDER BY 1 DESC, 2 DESC
@ -425,13 +454,13 @@ FROM
(SELECT value_3, user_id FROM events_table where event_type IN (1, 2, 3, 4, 5)) (SELECT value_3, user_id FROM events_table where event_type IN (1, 2, 3, 4, 5))
UNION ALL UNION ALL
(SELECT value_3, user_id FROM events_table where event_type IN (6, 7, 8, 9, 10)) (SELECT value_3, user_id FROM events_table where event_type IN (6, 7, 8, 9, 10))
UNION ALL UNION ALL
(SELECT value_3, user_id FROM events_table where event_type IN (11, 12, 13, 14, 15)) (SELECT value_3, user_id FROM events_table where event_type IN (11, 12, 13, 14, 15))
UNION ALL UNION ALL
(SELECT value_3, user_id FROM events_table where event_type IN (16, 17, 18, 19, 20)) (SELECT value_3, user_id FROM events_table where event_type IN (16, 17, 18, 19, 20))
UNION ALL UNION ALL
(SELECT value_3, user_id FROM events_table where event_type IN (21, 22, 23, 24, 25)) (SELECT value_3, user_id FROM events_table where event_type IN (21, 22, 23, 24, 25))
UNION ALL UNION ALL
(SELECT value_3, user_id FROM events_table where event_type IN (26, 27, 28, 29, 30)) (SELECT value_3, user_id FROM events_table where event_type IN (26, 27, 28, 29, 30))
) b ) b
GROUP BY user_id GROUP BY user_id
@ -458,9 +487,9 @@ FROM (
SELECT user_id, sum(value_2) AS counter FROM users_table where value_1 < 40 and value_1 < 60 GROUP BY user_id HAVING sum(value_2) > 500 SELECT user_id, sum(value_2) AS counter FROM users_table where value_1 < 40 and value_1 < 60 GROUP BY user_id HAVING sum(value_2) > 500
UNION UNION
SELECT user_id, sum(value_2) AS counter FROM users_table where value_1 < 60 and value_1 < 80 GROUP BY user_id HAVING sum(value_2) > 500 SELECT user_id, sum(value_2) AS counter FROM users_table where value_1 < 60 and value_1 < 80 GROUP BY user_id HAVING sum(value_2) > 500
UNION UNION
SELECT user_id, sum(value_2) AS counter FROM users_table where value_1 < 80 and value_1 < 100 GROUP BY user_id HAVING sum(value_2) > 500 SELECT user_id, sum(value_2) AS counter FROM users_table where value_1 < 80 and value_1 < 100 GROUP BY user_id HAVING sum(value_2) > 500
UNION UNION
SELECT 2 * user_id, sum(value_2) AS counter FROM users_table where value_1 < 100 and value_1 < 120 GROUP BY user_id HAVING sum(value_2) > 500 SELECT 2 * user_id, sum(value_2) AS counter FROM users_table where value_1 < 100 and value_1 < 120 GROUP BY user_id HAVING sum(value_2) > 500
) user_id ) user_id
GROUP BY user_id ORDER BY 1 DESC LIMIT 5; GROUP BY user_id ORDER BY 1 DESC LIMIT 5;
@ -472,7 +501,7 @@ SELECT * FROM
SELECT user_id, sum(counter) SELECT user_id, sum(counter)
FROM ( FROM (
SELECT user_id, sum(value_2) AS counter FROM users_table GROUP BY user_id SELECT user_id, sum(value_2) AS counter FROM users_table GROUP BY user_id
UNION UNION
SELECT user_id, sum(value_2) AS counter FROM events_table GROUP BY user_id SELECT user_id, sum(value_2) AS counter FROM events_table GROUP BY user_id
) user_id_1 ) user_id_1
GROUP BY user_id GROUP BY user_id
@ -492,7 +521,7 @@ UNION
SELECT user_id, sum(counter) SELECT user_id, sum(counter)
FROM ( FROM (
SELECT user_id, sum(value_2) AS counter FROM users_table GROUP BY user_id SELECT user_id, sum(value_2) AS counter FROM users_table GROUP BY user_id
UNION UNION
SELECT events_table.user_id, sum(events_table.value_2) AS counter FROM events_table, users_table WHERE users_table.user_id > events_table.user_id GROUP BY 1 SELECT events_table.user_id, sum(events_table.value_2) AS counter FROM events_table, users_table WHERE users_table.user_id > events_table.user_id GROUP BY 1
) user_id ) user_id
GROUP BY user_id; GROUP BY user_id;
@ -504,7 +533,7 @@ SELECT * FROM
SELECT user_id, sum(counter) SELECT user_id, sum(counter)
FROM ( FROM (
SELECT user_id, sum(value_2) AS counter FROM users_table GROUP BY user_id SELECT user_id, sum(value_2) AS counter FROM users_table GROUP BY user_id
UNION UNION
SELECT user_id, sum(value_2) AS counter FROM events_table GROUP BY user_id SELECT user_id, sum(value_2) AS counter FROM events_table GROUP BY user_id
) user_id_1 ) user_id_1
GROUP BY user_id GROUP BY user_id
@ -535,34 +564,41 @@ FROM (
( SELECT user_id, ( SELECT user_id,
sum(counter) sum(counter)
FROM FROM
( SELECT user_id, (SELECT
sum(value_2) AS counter user_id, sum(value_2) AS counter
FROM users_table FROM
GROUP BY user_id users_table
GROUP BY
user_id
UNION UNION
SELECT
SELECT user_id, user_id, sum(value_2) AS counter
sum(value_2) AS counter FROM
FROM events_table events_table
GROUP BY user_id ) user_id_1 GROUP BY
GROUP BY user_id) user_id) user_id_1
GROUP BY
user_id)
UNION UNION
( SELECT user_id, (SELECT
sum(counter) user_id, sum(counter)
FROM FROM
( SELECT sum(value_2) AS counter, (SELECT
user_id sum(value_2) AS counter, user_id
FROM users_table FROM
GROUP BY user_id users_table
GROUP BY
user_id
UNION UNION
SELECT
user_id, sum(value_2) AS counter
FROM
events_table
GROUP BY
user_id) user_id_2
GROUP BY
user_id)) AS ftop;
SELECT user_id,
sum(value_2) AS counter
FROM events_table
GROUP BY user_id) user_id_2
GROUP BY user_id)) AS ftop;
-- some UNION all queries that are going to be pulled up -- some UNION all queries that are going to be pulled up
SELECT SELECT
@ -582,13 +618,13 @@ FROM
(SELECT value_3, user_id FROM events_table where event_type IN (1, 2, 3, 4, 5)) (SELECT value_3, user_id FROM events_table where event_type IN (1, 2, 3, 4, 5))
UNION ALL UNION ALL
(SELECT value_3, user_id FROM events_table where event_type IN (6, 7, 8, 9, 10)) (SELECT value_3, user_id FROM events_table where event_type IN (6, 7, 8, 9, 10))
UNION ALL UNION ALL
(SELECT value_3, user_id FROM events_table where event_type IN (11, 12, 13, 14, 15)) (SELECT value_3, user_id FROM events_table where event_type IN (11, 12, 13, 14, 15))
UNION ALL UNION ALL
(SELECT value_3, user_id FROM events_table where event_type IN (16, 17, 18, 19, 20)) (SELECT value_3, user_id FROM events_table where event_type IN (16, 17, 18, 19, 20))
UNION ALL UNION ALL
(SELECT value_3, user_id FROM events_table where event_type IN (21, 22, 23, 24, 25)) (SELECT value_3, user_id FROM events_table where event_type IN (21, 22, 23, 24, 25))
UNION ALL UNION ALL
(SELECT value_3, value_2 FROM events_table where event_type IN (26, 27, 28, 29, 30)) (SELECT value_3, value_2 FROM events_table where event_type IN (26, 27, 28, 29, 30))
) b ) b
ORDER BY 1 DESC, 2 DESC ORDER BY 1 DESC, 2 DESC
@ -632,43 +668,58 @@ FROM
(SELECT value_3, user_id FROM events_table where event_type IN (1, 2, 3, 4, 5)) (SELECT value_3, user_id FROM events_table where event_type IN (1, 2, 3, 4, 5))
UNION ALL UNION ALL
(SELECT value_3, user_id FROM events_table where event_type IN (6, 7, 8, 9, 10)) (SELECT value_3, user_id FROM events_table where event_type IN (6, 7, 8, 9, 10))
UNION ALL UNION ALL
(SELECT value_3, user_id FROM events_table where event_type IN (11, 12, 13, 14, 15)) (SELECT value_3, user_id FROM events_table where event_type IN (11, 12, 13, 14, 15))
UNION ALL UNION ALL
(SELECT value_3, user_id FROM events_table where event_type IN (16, 17, 18, 19, 20)) (SELECT value_3, user_id FROM events_table where event_type IN (16, 17, 18, 19, 20))
UNION ALL UNION ALL
(SELECT value_3, user_id FROM events_table where event_type IN (21, 22, 23, 24, 25)) (SELECT value_3, user_id FROM events_table where event_type IN (21, 22, 23, 24, 25))
UNION ALL UNION ALL
(SELECT 1, 2) (SELECT 1, 2)
) b ) b
ORDER BY 1 DESC, 2 DESC ORDER BY 1 DESC, 2 DESC
LIMIT 5; LIMIT 5;
SELECT ("q"."event_types") as types, count(*) AS sumOfEventType SELECT ("final_query"."event_types") as types, count(*) AS sumOfEventType
FROM FROM
( SELECT "t"."user_id", ( SELECT *, random()
"t"."time", FROM
unnest("t"."collected_events") AS "event_types" ( SELECT "t"."user_id", "t"."time", unnest("t"."collected_events") AS "event_types"
FROM FROM
( SELECT "t1"."user_id", ( SELECT "t1"."user_id", min("t1"."time") AS "time", array_agg(("t1"."event") ORDER BY TIME ASC, event DESC) AS collected_events
min("t1"."time") AS "time",
array_agg(("t1"."event") ORDER BY time ASC, event DESC) AS collected_events
FROM ( FROM (
(SELECT "events"."user_id", "events"."time", 0 AS event (SELECT *
FROM events_table as "events" FROM
WHERE event_type IN (10, 11, 12, 13, 14, 15) (SELECT
) "events"."user_id", "events"."time", 0 AS event
UNION FROM
(SELECT "events"."user_id", "events"."time", 1 AS event events_table as "events"
FROM events_table as "events" WHERE
WHERE event_type IN (15, 16, 17, 18, 19) ) event_type IN (10, 11, 12, 13, 14, 15)) events_subquery_1)
UNION UNION
(SELECT "events"."user_id", "events"."time", 2 AS event (SELECT *
FROM events_table as "events" FROM
WHERE event_type IN (20, 21, 22, 23, 24, 25) ) (SELECT
UNION "events"."user_id", "events"."time", 1 AS event
(SELECT 1, now(), 3 AS event)) t1 FROM
events_table as "events"
WHERE
event_type IN (15, 16, 17, 18, 19) ) events_subquery_2)
UNION
(SELECT *
FROM
(SELECT
"events"."user_id", "events"."time", 2 AS event
FROM
events_table as "events"
WHERE
event_type IN (20, 21, 22, 23, 24, 25) ) events_subquery_3)
UNION
(SELECT *
FROM
(SELECT 1, now(), 3 AS event) events_subquery_4)) t1
GROUP BY "t1"."user_id") AS t) "q" GROUP BY "t1"."user_id") AS t) "q"
) as final_query
GROUP BY types GROUP BY types
ORDER BY types; ORDER BY types;