mirror of https://github.com/citusdata/citus.git
Increate subquery test coverage
parent
3a7e10a9b1
commit
3ca181fea8
|
@ -539,17 +539,181 @@ DEBUG: Plan is router executable
|
||||||
ERROR: duplicate key value violates unique constraint "agg_events_user_id_value_1_agg_key_13300008"
|
ERROR: duplicate key value violates unique constraint "agg_events_user_id_value_1_agg_key_13300008"
|
||||||
DETAIL: Key (user_id, value_1_agg)=(1, 10) already exists.
|
DETAIL: Key (user_id, value_1_agg)=(1, 10) already exists.
|
||||||
CONTEXT: while executing command on localhost:57638
|
CONTEXT: while executing command on localhost:57638
|
||||||
|
-- join between subqueries
|
||||||
|
INSERT INTO agg_events
|
||||||
|
(user_id)
|
||||||
|
SELECT f2.id FROM
|
||||||
|
(SELECT
|
||||||
|
id
|
||||||
|
FROM (SELECT reference_table.user_id AS id
|
||||||
|
FROM raw_events_first,
|
||||||
|
reference_table
|
||||||
|
WHERE raw_events_first.user_id = reference_table.user_id ) AS foo) as f
|
||||||
|
INNER JOIN
|
||||||
|
(SELECT v4,
|
||||||
|
v1,
|
||||||
|
id
|
||||||
|
FROM (SELECT SUM(raw_events_second.value_4) AS v4,
|
||||||
|
SUM(raw_events_first.value_1) AS v1,
|
||||||
|
raw_events_second.user_id AS id
|
||||||
|
FROM raw_events_first,
|
||||||
|
raw_events_second
|
||||||
|
WHERE raw_events_first.user_id = raw_events_second.user_id
|
||||||
|
GROUP BY raw_events_second.user_id
|
||||||
|
HAVING SUM(raw_events_second.value_4) > 10) AS foo2 ) as f2
|
||||||
|
ON (f.id = f2.id);
|
||||||
|
DEBUG: StartTransactionCommand
|
||||||
|
DEBUG: StartTransaction
|
||||||
|
DEBUG: name: unnamed; blockState: DEFAULT; state: INPROGR, xid/subid/cid: 0/1/0, nestlvl: 1, children:
|
||||||
|
DEBUG: predicate pruning for shardId 13300001
|
||||||
|
DEBUG: predicate pruning for shardId 13300002
|
||||||
|
DEBUG: predicate pruning for shardId 13300003
|
||||||
|
DEBUG: predicate pruning for shardId 13300005
|
||||||
|
DEBUG: predicate pruning for shardId 13300006
|
||||||
|
DEBUG: predicate pruning for shardId 13300007
|
||||||
|
DEBUG: predicate pruning for shardId 13300001
|
||||||
|
DEBUG: predicate pruning for shardId 13300002
|
||||||
|
DEBUG: predicate pruning for shardId 13300003
|
||||||
|
DEBUG: distributed statement: INSERT INTO public.agg_events_13300008 AS citus_table_alias (user_id) SELECT f2.id FROM ((SELECT foo.id FROM (SELECT reference_table.user_id AS id FROM public.raw_events_first_13300000 raw_events_first, public.reference_table_13300012 reference_table WHERE (raw_events_first.user_id = reference_table.user_id)) foo) f JOIN (SELECT foo2.v4, foo2.v1, foo2.id FROM (SELECT sum(raw_events_second.value_4) AS v4, sum(raw_events_first.value_1) AS v1, raw_events_second.user_id AS id FROM public.raw_events_first_13300000 raw_events_first, public.raw_events_second_13300004 raw_events_second WHERE (raw_events_first.user_id = raw_events_second.user_id) GROUP BY raw_events_second.user_id HAVING (sum(raw_events_second.value_4) > (10)::numeric)) foo2) f2 ON ((f.id = f2.id)))
|
||||||
|
DEBUG: predicate pruning for shardId 13300000
|
||||||
|
DEBUG: predicate pruning for shardId 13300002
|
||||||
|
DEBUG: predicate pruning for shardId 13300003
|
||||||
|
DEBUG: predicate pruning for shardId 13300004
|
||||||
|
DEBUG: predicate pruning for shardId 13300006
|
||||||
|
DEBUG: predicate pruning for shardId 13300007
|
||||||
|
DEBUG: predicate pruning for shardId 13300000
|
||||||
|
DEBUG: predicate pruning for shardId 13300002
|
||||||
|
DEBUG: predicate pruning for shardId 13300003
|
||||||
|
DEBUG: distributed statement: INSERT INTO public.agg_events_13300009 AS citus_table_alias (user_id) SELECT f2.id FROM ((SELECT foo.id FROM (SELECT reference_table.user_id AS id FROM public.raw_events_first_13300001 raw_events_first, public.reference_table_13300012 reference_table WHERE (raw_events_first.user_id = reference_table.user_id)) foo) f JOIN (SELECT foo2.v4, foo2.v1, foo2.id FROM (SELECT sum(raw_events_second.value_4) AS v4, sum(raw_events_first.value_1) AS v1, raw_events_second.user_id AS id FROM public.raw_events_first_13300001 raw_events_first, public.raw_events_second_13300005 raw_events_second WHERE (raw_events_first.user_id = raw_events_second.user_id) GROUP BY raw_events_second.user_id HAVING (sum(raw_events_second.value_4) > (10)::numeric)) foo2) f2 ON ((f.id = f2.id)))
|
||||||
|
DEBUG: predicate pruning for shardId 13300000
|
||||||
|
DEBUG: predicate pruning for shardId 13300001
|
||||||
|
DEBUG: predicate pruning for shardId 13300003
|
||||||
|
DEBUG: predicate pruning for shardId 13300004
|
||||||
|
DEBUG: predicate pruning for shardId 13300005
|
||||||
|
DEBUG: predicate pruning for shardId 13300007
|
||||||
|
DEBUG: predicate pruning for shardId 13300000
|
||||||
|
DEBUG: predicate pruning for shardId 13300001
|
||||||
|
DEBUG: predicate pruning for shardId 13300003
|
||||||
|
DEBUG: distributed statement: INSERT INTO public.agg_events_13300010 AS citus_table_alias (user_id) SELECT f2.id FROM ((SELECT foo.id FROM (SELECT reference_table.user_id AS id FROM public.raw_events_first_13300002 raw_events_first, public.reference_table_13300012 reference_table WHERE (raw_events_first.user_id = reference_table.user_id)) foo) f JOIN (SELECT foo2.v4, foo2.v1, foo2.id FROM (SELECT sum(raw_events_second.value_4) AS v4, sum(raw_events_first.value_1) AS v1, raw_events_second.user_id AS id FROM public.raw_events_first_13300002 raw_events_first, public.raw_events_second_13300006 raw_events_second WHERE (raw_events_first.user_id = raw_events_second.user_id) GROUP BY raw_events_second.user_id HAVING (sum(raw_events_second.value_4) > (10)::numeric)) foo2) f2 ON ((f.id = f2.id)))
|
||||||
|
DEBUG: predicate pruning for shardId 13300000
|
||||||
|
DEBUG: predicate pruning for shardId 13300001
|
||||||
|
DEBUG: predicate pruning for shardId 13300002
|
||||||
|
DEBUG: predicate pruning for shardId 13300004
|
||||||
|
DEBUG: predicate pruning for shardId 13300005
|
||||||
|
DEBUG: predicate pruning for shardId 13300006
|
||||||
|
DEBUG: predicate pruning for shardId 13300000
|
||||||
|
DEBUG: predicate pruning for shardId 13300001
|
||||||
|
DEBUG: predicate pruning for shardId 13300002
|
||||||
|
DEBUG: distributed statement: INSERT INTO public.agg_events_13300011 AS citus_table_alias (user_id) SELECT f2.id FROM ((SELECT foo.id FROM (SELECT reference_table.user_id AS id FROM public.raw_events_first_13300003 raw_events_first, public.reference_table_13300012 reference_table WHERE (raw_events_first.user_id = reference_table.user_id)) foo) f JOIN (SELECT foo2.v4, foo2.v1, foo2.id FROM (SELECT sum(raw_events_second.value_4) AS v4, sum(raw_events_first.value_1) AS v1, raw_events_second.user_id AS id FROM public.raw_events_first_13300003 raw_events_first, public.raw_events_second_13300007 raw_events_second WHERE (raw_events_first.user_id = raw_events_second.user_id) GROUP BY raw_events_second.user_id HAVING (sum(raw_events_second.value_4) > (10)::numeric)) foo2) f2 ON ((f.id = f2.id)))
|
||||||
|
DEBUG: ProcessQuery
|
||||||
|
DEBUG: Plan is router executable
|
||||||
|
DEBUG: CommitTransactionCommand
|
||||||
|
DEBUG: CommitTransaction
|
||||||
|
DEBUG: name: unnamed; blockState: STARTED; state: INPROGR, xid/subid/cid: 0/1/0, nestlvl: 1, children:
|
||||||
|
DEBUG: sent COMMIT over connection 13300008
|
||||||
|
DEBUG: sent COMMIT over connection 13300008
|
||||||
|
DEBUG: sent COMMIT over connection 13300011
|
||||||
|
DEBUG: sent COMMIT over connection 13300011
|
||||||
|
DEBUG: sent COMMIT over connection 13300009
|
||||||
|
DEBUG: sent COMMIT over connection 13300009
|
||||||
|
DEBUG: sent COMMIT over connection 13300010
|
||||||
|
DEBUG: sent COMMIT over connection 13300010
|
||||||
|
-- add one more level subqueris on top of subquery JOINs
|
||||||
|
INSERT INTO agg_events
|
||||||
|
(user_id, value_4_agg)
|
||||||
|
SELECT
|
||||||
|
outer_most.id, max(outer_most.value)
|
||||||
|
FROM
|
||||||
|
(
|
||||||
|
SELECT f2.id as id, f2.v4 as value FROM
|
||||||
|
(SELECT
|
||||||
|
id
|
||||||
|
FROM (SELECT reference_table.user_id AS id
|
||||||
|
FROM raw_events_first,
|
||||||
|
reference_table
|
||||||
|
WHERE raw_events_first.user_id = reference_table.user_id ) AS foo) as f
|
||||||
|
INNER JOIN
|
||||||
|
(SELECT v4,
|
||||||
|
v1,
|
||||||
|
id
|
||||||
|
FROM (SELECT SUM(raw_events_second.value_4) AS v4,
|
||||||
|
SUM(raw_events_first.value_1) AS v1,
|
||||||
|
raw_events_second.user_id AS id
|
||||||
|
FROM raw_events_first,
|
||||||
|
raw_events_second
|
||||||
|
WHERE raw_events_first.user_id = raw_events_second.user_id
|
||||||
|
GROUP BY raw_events_second.user_id
|
||||||
|
HAVING SUM(raw_events_second.value_4) > 10) AS foo2 ) as f2
|
||||||
|
ON (f.id = f2.id)) as outer_most
|
||||||
|
GROUP BY
|
||||||
|
outer_most.id;
|
||||||
|
DEBUG: StartTransactionCommand
|
||||||
|
DEBUG: StartTransaction
|
||||||
|
DEBUG: name: unnamed; blockState: DEFAULT; state: INPROGR, xid/subid/cid: 0/1/0, nestlvl: 1, children:
|
||||||
|
DEBUG: predicate pruning for shardId 13300001
|
||||||
|
DEBUG: predicate pruning for shardId 13300002
|
||||||
|
DEBUG: predicate pruning for shardId 13300003
|
||||||
|
DEBUG: predicate pruning for shardId 13300005
|
||||||
|
DEBUG: predicate pruning for shardId 13300006
|
||||||
|
DEBUG: predicate pruning for shardId 13300007
|
||||||
|
DEBUG: predicate pruning for shardId 13300001
|
||||||
|
DEBUG: predicate pruning for shardId 13300002
|
||||||
|
DEBUG: predicate pruning for shardId 13300003
|
||||||
|
DEBUG: distributed statement: INSERT INTO public.agg_events_13300008 AS citus_table_alias (user_id, value_4_agg) SELECT id, max(value) AS max FROM (SELECT f2.id, f2.v4 AS value FROM ((SELECT foo.id FROM (SELECT reference_table.user_id AS id FROM public.raw_events_first_13300000 raw_events_first, public.reference_table_13300012 reference_table WHERE (raw_events_first.user_id = reference_table.user_id)) foo) f JOIN (SELECT foo2.v4, foo2.v1, foo2.id FROM (SELECT sum(raw_events_second.value_4) AS v4, sum(raw_events_first.value_1) AS v1, raw_events_second.user_id AS id FROM public.raw_events_first_13300000 raw_events_first, public.raw_events_second_13300004 raw_events_second WHERE (raw_events_first.user_id = raw_events_second.user_id) GROUP BY raw_events_second.user_id HAVING (sum(raw_events_second.value_4) > (10)::numeric)) foo2) f2 ON ((f.id = f2.id)))) outer_most GROUP BY id
|
||||||
|
DEBUG: predicate pruning for shardId 13300000
|
||||||
|
DEBUG: predicate pruning for shardId 13300002
|
||||||
|
DEBUG: predicate pruning for shardId 13300003
|
||||||
|
DEBUG: predicate pruning for shardId 13300004
|
||||||
|
DEBUG: predicate pruning for shardId 13300006
|
||||||
|
DEBUG: predicate pruning for shardId 13300007
|
||||||
|
DEBUG: predicate pruning for shardId 13300000
|
||||||
|
DEBUG: predicate pruning for shardId 13300002
|
||||||
|
DEBUG: predicate pruning for shardId 13300003
|
||||||
|
DEBUG: distributed statement: INSERT INTO public.agg_events_13300009 AS citus_table_alias (user_id, value_4_agg) SELECT id, max(value) AS max FROM (SELECT f2.id, f2.v4 AS value FROM ((SELECT foo.id FROM (SELECT reference_table.user_id AS id FROM public.raw_events_first_13300001 raw_events_first, public.reference_table_13300012 reference_table WHERE (raw_events_first.user_id = reference_table.user_id)) foo) f JOIN (SELECT foo2.v4, foo2.v1, foo2.id FROM (SELECT sum(raw_events_second.value_4) AS v4, sum(raw_events_first.value_1) AS v1, raw_events_second.user_id AS id FROM public.raw_events_first_13300001 raw_events_first, public.raw_events_second_13300005 raw_events_second WHERE (raw_events_first.user_id = raw_events_second.user_id) GROUP BY raw_events_second.user_id HAVING (sum(raw_events_second.value_4) > (10)::numeric)) foo2) f2 ON ((f.id = f2.id)))) outer_most GROUP BY id
|
||||||
|
DEBUG: predicate pruning for shardId 13300000
|
||||||
|
DEBUG: predicate pruning for shardId 13300001
|
||||||
|
DEBUG: predicate pruning for shardId 13300003
|
||||||
|
DEBUG: predicate pruning for shardId 13300004
|
||||||
|
DEBUG: predicate pruning for shardId 13300005
|
||||||
|
DEBUG: predicate pruning for shardId 13300007
|
||||||
|
DEBUG: predicate pruning for shardId 13300000
|
||||||
|
DEBUG: predicate pruning for shardId 13300001
|
||||||
|
DEBUG: predicate pruning for shardId 13300003
|
||||||
|
DEBUG: distributed statement: INSERT INTO public.agg_events_13300010 AS citus_table_alias (user_id, value_4_agg) SELECT id, max(value) AS max FROM (SELECT f2.id, f2.v4 AS value FROM ((SELECT foo.id FROM (SELECT reference_table.user_id AS id FROM public.raw_events_first_13300002 raw_events_first, public.reference_table_13300012 reference_table WHERE (raw_events_first.user_id = reference_table.user_id)) foo) f JOIN (SELECT foo2.v4, foo2.v1, foo2.id FROM (SELECT sum(raw_events_second.value_4) AS v4, sum(raw_events_first.value_1) AS v1, raw_events_second.user_id AS id FROM public.raw_events_first_13300002 raw_events_first, public.raw_events_second_13300006 raw_events_second WHERE (raw_events_first.user_id = raw_events_second.user_id) GROUP BY raw_events_second.user_id HAVING (sum(raw_events_second.value_4) > (10)::numeric)) foo2) f2 ON ((f.id = f2.id)))) outer_most GROUP BY id
|
||||||
|
DEBUG: predicate pruning for shardId 13300000
|
||||||
|
DEBUG: predicate pruning for shardId 13300001
|
||||||
|
DEBUG: predicate pruning for shardId 13300002
|
||||||
|
DEBUG: predicate pruning for shardId 13300004
|
||||||
|
DEBUG: predicate pruning for shardId 13300005
|
||||||
|
DEBUG: predicate pruning for shardId 13300006
|
||||||
|
DEBUG: predicate pruning for shardId 13300000
|
||||||
|
DEBUG: predicate pruning for shardId 13300001
|
||||||
|
DEBUG: predicate pruning for shardId 13300002
|
||||||
|
DEBUG: distributed statement: INSERT INTO public.agg_events_13300011 AS citus_table_alias (user_id, value_4_agg) SELECT id, max(value) AS max FROM (SELECT f2.id, f2.v4 AS value FROM ((SELECT foo.id FROM (SELECT reference_table.user_id AS id FROM public.raw_events_first_13300003 raw_events_first, public.reference_table_13300012 reference_table WHERE (raw_events_first.user_id = reference_table.user_id)) foo) f JOIN (SELECT foo2.v4, foo2.v1, foo2.id FROM (SELECT sum(raw_events_second.value_4) AS v4, sum(raw_events_first.value_1) AS v1, raw_events_second.user_id AS id FROM public.raw_events_first_13300003 raw_events_first, public.raw_events_second_13300007 raw_events_second WHERE (raw_events_first.user_id = raw_events_second.user_id) GROUP BY raw_events_second.user_id HAVING (sum(raw_events_second.value_4) > (10)::numeric)) foo2) f2 ON ((f.id = f2.id)))) outer_most GROUP BY id
|
||||||
|
DEBUG: ProcessQuery
|
||||||
|
DEBUG: Plan is router executable
|
||||||
|
DEBUG: CommitTransactionCommand
|
||||||
|
DEBUG: CommitTransaction
|
||||||
|
DEBUG: name: unnamed; blockState: STARTED; state: INPROGR, xid/subid/cid: 0/1/0, nestlvl: 1, children:
|
||||||
|
DEBUG: sent COMMIT over connection 13300008
|
||||||
|
DEBUG: sent COMMIT over connection 13300008
|
||||||
|
DEBUG: sent COMMIT over connection 13300011
|
||||||
|
DEBUG: sent COMMIT over connection 13300011
|
||||||
|
DEBUG: sent COMMIT over connection 13300009
|
||||||
|
DEBUG: sent COMMIT over connection 13300009
|
||||||
|
DEBUG: sent COMMIT over connection 13300010
|
||||||
|
DEBUG: sent COMMIT over connection 13300010
|
||||||
-- some UPSERTS
|
-- some UPSERTS
|
||||||
INSERT INTO agg_events AS ae
|
INSERT INTO agg_events AS ae
|
||||||
(
|
(
|
||||||
user_id,
|
user_id,
|
||||||
value_1_agg,
|
value_1_agg,
|
||||||
agg_time
|
agg_time
|
||||||
)
|
)
|
||||||
SELECT user_id,
|
SELECT user_id,
|
||||||
value_1,
|
value_1,
|
||||||
time
|
time
|
||||||
FROM raw_events_first
|
FROM raw_events_first
|
||||||
ON conflict (user_id, value_1_agg)
|
ON conflict (user_id, value_1_agg)
|
||||||
DO UPDATE
|
DO UPDATE
|
||||||
SET agg_time = EXCLUDED.agg_time
|
SET agg_time = EXCLUDED.agg_time
|
||||||
|
@ -822,124 +986,224 @@ DEBUG: name: unnamed; blockState: DEFAULT; state: INPROGR, xid/subid/cid:
|
||||||
ERROR: cannot perform distributed planning for the given modification
|
ERROR: cannot perform distributed planning for the given modification
|
||||||
DETAIL: Set operations are not allowed in INSERT ... SELECT queries
|
DETAIL: Set operations are not allowed in INSERT ... SELECT queries
|
||||||
-- unsupported JOIN
|
-- unsupported JOIN
|
||||||
INSERT INTO agg_events
|
INSERT INTO agg_events
|
||||||
(value_4_agg,
|
(value_4_agg,
|
||||||
value_1_agg,
|
value_1_agg,
|
||||||
user_id)
|
user_id)
|
||||||
SELECT v4,
|
SELECT v4,
|
||||||
v1,
|
v1,
|
||||||
id
|
id
|
||||||
FROM (SELECT SUM(raw_events_second.value_4) AS v4,
|
FROM (SELECT SUM(raw_events_second.value_4) AS v4,
|
||||||
SUM(raw_events_first.value_1) AS v1,
|
SUM(raw_events_first.value_1) AS v1,
|
||||||
raw_events_second.user_id AS id
|
raw_events_second.user_id AS id
|
||||||
FROM raw_events_first,
|
FROM raw_events_first,
|
||||||
raw_events_second
|
raw_events_second
|
||||||
WHERE raw_events_first.user_id != raw_events_second.user_id
|
WHERE raw_events_first.user_id != raw_events_second.user_id
|
||||||
GROUP BY raw_events_second.user_id) AS foo;
|
GROUP BY raw_events_second.user_id) AS foo;
|
||||||
DEBUG: StartTransactionCommand
|
DEBUG: StartTransactionCommand
|
||||||
DEBUG: StartTransaction
|
DEBUG: StartTransaction
|
||||||
DEBUG: name: unnamed; blockState: DEFAULT; state: INPROGR, xid/subid/cid: 0/1/0, nestlvl: 1, children:
|
DEBUG: name: unnamed; blockState: DEFAULT; state: INPROGR, xid/subid/cid: 0/1/0, nestlvl: 1, children:
|
||||||
ERROR: cannot perform distributed planning for the given modification
|
ERROR: cannot perform distributed planning for the given modification
|
||||||
DETAIL: Select query cannot be pushed down to the worker.
|
DETAIL: Select query cannot be pushed down to the worker.
|
||||||
-- INSERT partition column does not match with SELECT partition column
|
-- INSERT partition column does not match with SELECT partition column
|
||||||
INSERT INTO agg_events
|
INSERT INTO agg_events
|
||||||
(value_4_agg,
|
(value_4_agg,
|
||||||
value_1_agg,
|
value_1_agg,
|
||||||
user_id)
|
user_id)
|
||||||
SELECT v4,
|
SELECT v4,
|
||||||
v1,
|
v1,
|
||||||
id
|
id
|
||||||
FROM (SELECT SUM(raw_events_second.value_4) AS v4,
|
FROM (SELECT SUM(raw_events_second.value_4) AS v4,
|
||||||
SUM(raw_events_first.value_1) AS v1,
|
SUM(raw_events_first.value_1) AS v1,
|
||||||
raw_events_second.value_3 AS id
|
raw_events_second.value_3 AS id
|
||||||
FROM raw_events_first,
|
FROM raw_events_first,
|
||||||
raw_events_second
|
raw_events_second
|
||||||
WHERE raw_events_first.user_id = raw_events_second.user_id
|
WHERE raw_events_first.user_id = raw_events_second.user_id
|
||||||
GROUP BY raw_events_second.value_3) AS foo;
|
GROUP BY raw_events_second.value_3) AS foo;
|
||||||
DEBUG: StartTransactionCommand
|
DEBUG: StartTransactionCommand
|
||||||
DEBUG: StartTransaction
|
DEBUG: StartTransaction
|
||||||
DEBUG: name: unnamed; blockState: DEFAULT; state: INPROGR, xid/subid/cid: 0/1/0, nestlvl: 1, children:
|
DEBUG: name: unnamed; blockState: DEFAULT; state: INPROGR, xid/subid/cid: 0/1/0, nestlvl: 1, children:
|
||||||
ERROR: SELECT query should return bare partition column on the same ordinal position with INSERT query's partition column
|
ERROR: SELECT query should return bare partition column on the same ordinal position with INSERT query's partition column
|
||||||
-- error cases
|
-- error cases
|
||||||
-- no part column at all
|
-- no part column at all
|
||||||
INSERT INTO raw_events_second
|
INSERT INTO raw_events_second
|
||||||
(value_1)
|
(value_1)
|
||||||
SELECT value_1
|
SELECT value_1
|
||||||
FROM raw_events_first;
|
FROM raw_events_first;
|
||||||
DEBUG: StartTransactionCommand
|
DEBUG: StartTransactionCommand
|
||||||
DEBUG: StartTransaction
|
DEBUG: StartTransaction
|
||||||
DEBUG: name: unnamed; blockState: DEFAULT; state: INPROGR, xid/subid/cid: 0/1/0, nestlvl: 1, children:
|
DEBUG: name: unnamed; blockState: DEFAULT; state: INPROGR, xid/subid/cid: 0/1/0, nestlvl: 1, children:
|
||||||
ERROR: SELECT query should return bare partition column on the same ordinal position with INSERT query's partition column
|
ERROR: SELECT query should return bare partition column on the same ordinal position with INSERT query's partition column
|
||||||
INSERT INTO raw_events_second
|
INSERT INTO raw_events_second
|
||||||
(value_1)
|
(value_1)
|
||||||
SELECT user_id
|
SELECT user_id
|
||||||
FROM raw_events_first;
|
FROM raw_events_first;
|
||||||
DEBUG: StartTransactionCommand
|
DEBUG: StartTransactionCommand
|
||||||
DEBUG: StartTransaction
|
DEBUG: StartTransaction
|
||||||
DEBUG: name: unnamed; blockState: DEFAULT; state: INPROGR, xid/subid/cid: 0/1/0, nestlvl: 1, children:
|
DEBUG: name: unnamed; blockState: DEFAULT; state: INPROGR, xid/subid/cid: 0/1/0, nestlvl: 1, children:
|
||||||
ERROR: SELECT query should return bare partition column on the same ordinal position with INSERT query's partition column
|
ERROR: SELECT query should return bare partition column on the same ordinal position with INSERT query's partition column
|
||||||
INSERT INTO raw_events_second
|
INSERT INTO raw_events_second
|
||||||
(user_id)
|
(user_id)
|
||||||
SELECT value_1
|
SELECT value_1
|
||||||
FROM raw_events_first;
|
FROM raw_events_first;
|
||||||
DEBUG: StartTransactionCommand
|
DEBUG: StartTransactionCommand
|
||||||
DEBUG: StartTransaction
|
DEBUG: StartTransaction
|
||||||
DEBUG: name: unnamed; blockState: DEFAULT; state: INPROGR, xid/subid/cid: 0/1/0, nestlvl: 1, children:
|
DEBUG: name: unnamed; blockState: DEFAULT; state: INPROGR, xid/subid/cid: 0/1/0, nestlvl: 1, children:
|
||||||
ERROR: SELECT query should return bare partition column on the same ordinal position with INSERT query's partition column
|
ERROR: SELECT query should return bare partition column on the same ordinal position with INSERT query's partition column
|
||||||
INSERT INTO raw_events_second
|
INSERT INTO raw_events_second
|
||||||
(user_id)
|
(user_id)
|
||||||
SELECT user_id * 2
|
SELECT user_id * 2
|
||||||
FROM raw_events_first;
|
FROM raw_events_first;
|
||||||
DEBUG: StartTransactionCommand
|
DEBUG: StartTransactionCommand
|
||||||
DEBUG: StartTransaction
|
DEBUG: StartTransaction
|
||||||
DEBUG: name: unnamed; blockState: DEFAULT; state: INPROGR, xid/subid/cid: 0/1/0, nestlvl: 1, children:
|
DEBUG: name: unnamed; blockState: DEFAULT; state: INPROGR, xid/subid/cid: 0/1/0, nestlvl: 1, children:
|
||||||
ERROR: SELECT query should return bare partition column on the same ordinal position with INSERT query's partition column
|
ERROR: SELECT query should return bare partition column on the same ordinal position with INSERT query's partition column
|
||||||
INSERT INTO raw_events_second
|
INSERT INTO raw_events_second
|
||||||
(user_id)
|
(user_id)
|
||||||
SELECT user_id :: bigint
|
SELECT user_id :: bigint
|
||||||
FROM raw_events_first;
|
FROM raw_events_first;
|
||||||
DEBUG: StartTransactionCommand
|
DEBUG: StartTransactionCommand
|
||||||
DEBUG: StartTransaction
|
DEBUG: StartTransaction
|
||||||
DEBUG: name: unnamed; blockState: DEFAULT; state: INPROGR, xid/subid/cid: 0/1/0, nestlvl: 1, children:
|
DEBUG: name: unnamed; blockState: DEFAULT; state: INPROGR, xid/subid/cid: 0/1/0, nestlvl: 1, children:
|
||||||
ERROR: SELECT query should return bare partition column on the same ordinal position with INSERT query's partition column
|
ERROR: SELECT query should return bare partition column on the same ordinal position with INSERT query's partition column
|
||||||
INSERT INTO agg_events
|
INSERT INTO agg_events
|
||||||
(value_3_agg,
|
(value_3_agg,
|
||||||
value_4_agg,
|
value_4_agg,
|
||||||
value_1_agg,
|
value_1_agg,
|
||||||
value_2_agg,
|
value_2_agg,
|
||||||
user_id)
|
user_id)
|
||||||
SELECT SUM(value_3),
|
SELECT SUM(value_3),
|
||||||
Count(value_4),
|
Count(value_4),
|
||||||
user_id,
|
user_id,
|
||||||
|
SUM(value_1),
|
||||||
|
Avg(value_2)
|
||||||
|
FROM raw_events_first
|
||||||
|
GROUP BY user_id;
|
||||||
|
DEBUG: StartTransactionCommand
|
||||||
|
DEBUG: StartTransaction
|
||||||
|
DEBUG: name: unnamed; blockState: DEFAULT; state: INPROGR, xid/subid/cid: 0/1/0, nestlvl: 1, children:
|
||||||
|
ERROR: SELECT query should return bare partition column on the same ordinal position with INSERT query's partition column
|
||||||
|
INSERT INTO agg_events
|
||||||
|
(value_3_agg,
|
||||||
|
value_4_agg,
|
||||||
|
value_1_agg,
|
||||||
|
value_2_agg,
|
||||||
|
user_id)
|
||||||
|
SELECT SUM(value_3),
|
||||||
|
Count(value_4),
|
||||||
|
user_id,
|
||||||
SUM(value_1),
|
SUM(value_1),
|
||||||
Avg(value_2)
|
value_2
|
||||||
FROM raw_events_first
|
FROM raw_events_first
|
||||||
GROUP BY user_id;
|
GROUP BY user_id,
|
||||||
DEBUG: StartTransactionCommand
|
value_2;
|
||||||
DEBUG: StartTransaction
|
|
||||||
DEBUG: name: unnamed; blockState: DEFAULT; state: INPROGR, xid/subid/cid: 0/1/0, nestlvl: 1, children:
|
|
||||||
ERROR: SELECT query should return bare partition column on the same ordinal position with INSERT query's partition column
|
|
||||||
INSERT INTO agg_events
|
|
||||||
(value_3_agg,
|
|
||||||
value_4_agg,
|
|
||||||
value_1_agg,
|
|
||||||
value_2_agg,
|
|
||||||
user_id)
|
|
||||||
SELECT SUM(value_3),
|
|
||||||
Count(value_4),
|
|
||||||
user_id,
|
|
||||||
SUM(value_1),
|
|
||||||
value_2
|
|
||||||
FROM raw_events_first
|
|
||||||
GROUP BY user_id,
|
|
||||||
value_2;
|
|
||||||
DEBUG: StartTransactionCommand
|
DEBUG: StartTransactionCommand
|
||||||
DEBUG: StartTransaction
|
DEBUG: StartTransaction
|
||||||
DEBUG: name: unnamed; blockState: DEFAULT; state: INPROGR, xid/subid/cid: 0/1/0, nestlvl: 1, children:
|
DEBUG: name: unnamed; blockState: DEFAULT; state: INPROGR, xid/subid/cid: 0/1/0, nestlvl: 1, children:
|
||||||
ERROR: SELECT query should return bare partition column on the same ordinal position with INSERT query's partition column
|
ERROR: SELECT query should return bare partition column on the same ordinal position with INSERT query's partition column
|
||||||
-- tables should be co-located
|
-- tables should be co-located
|
||||||
INSERT INTO agg_events (user_id) SELECT user_id FROM reference_table;
|
INSERT INTO agg_events (user_id)
|
||||||
|
SELECT
|
||||||
|
user_id
|
||||||
|
FROM
|
||||||
|
reference_table;
|
||||||
DEBUG: StartTransactionCommand
|
DEBUG: StartTransactionCommand
|
||||||
DEBUG: StartTransaction
|
DEBUG: StartTransaction
|
||||||
DEBUG: name: unnamed; blockState: DEFAULT; state: INPROGR, xid/subid/cid: 0/1/0, nestlvl: 1, children:
|
DEBUG: name: unnamed; blockState: DEFAULT; state: INPROGR, xid/subid/cid: 0/1/0, nestlvl: 1, children:
|
||||||
ERROR: INSERT target table and the source relation of the SELECT partition column value must be colocated
|
ERROR: INSERT target table and the source relation of the SELECT partition column value must be colocated
|
||||||
|
-- unsupported joins between subqueries
|
||||||
|
-- we do not return bare partition column on the inner query
|
||||||
|
INSERT INTO agg_events
|
||||||
|
(user_id)
|
||||||
|
SELECT f2.id FROM
|
||||||
|
(SELECT
|
||||||
|
id
|
||||||
|
FROM (SELECT reference_table.user_id AS id
|
||||||
|
FROM raw_events_first,
|
||||||
|
reference_table
|
||||||
|
WHERE raw_events_first.user_id = reference_table.user_id ) AS foo) as f
|
||||||
|
INNER JOIN
|
||||||
|
(SELECT v4,
|
||||||
|
v1,
|
||||||
|
id
|
||||||
|
FROM (SELECT SUM(raw_events_second.value_4) AS v4,
|
||||||
|
raw_events_second.value_1 AS v1,
|
||||||
|
SUM(raw_events_second.user_id) AS id
|
||||||
|
FROM raw_events_first,
|
||||||
|
raw_events_second
|
||||||
|
WHERE raw_events_first.user_id = raw_events_second.user_id
|
||||||
|
GROUP BY raw_events_second.value_1
|
||||||
|
HAVING SUM(raw_events_second.value_4) > 10) AS foo2 ) as f2
|
||||||
|
ON (f.id = f2.id);
|
||||||
|
DEBUG: StartTransactionCommand
|
||||||
|
DEBUG: StartTransaction
|
||||||
|
DEBUG: name: unnamed; blockState: DEFAULT; state: INPROGR, xid/subid/cid: 0/1/0, nestlvl: 1, children:
|
||||||
|
ERROR: SELECT query should return bare partition column on the same ordinal position with INSERT query's partition column
|
||||||
|
-- the second part of the query is not routable since
|
||||||
|
-- no GROUP BY on the partition column
|
||||||
|
INSERT INTO agg_events
|
||||||
|
(user_id)
|
||||||
|
SELECT f.id FROM
|
||||||
|
(SELECT
|
||||||
|
id
|
||||||
|
FROM (SELECT raw_events_first.user_id AS id
|
||||||
|
FROM raw_events_first,
|
||||||
|
reference_table
|
||||||
|
WHERE raw_events_first.user_id = reference_table.user_id ) AS foo) as f
|
||||||
|
INNER JOIN
|
||||||
|
(SELECT v4,
|
||||||
|
v1,
|
||||||
|
id
|
||||||
|
FROM (SELECT SUM(raw_events_second.value_4) AS v4,
|
||||||
|
raw_events_second.value_1 AS v1,
|
||||||
|
SUM(raw_events_second.user_id) AS id
|
||||||
|
FROM raw_events_first,
|
||||||
|
raw_events_second
|
||||||
|
WHERE raw_events_first.user_id = raw_events_second.user_id
|
||||||
|
GROUP BY raw_events_second.value_1
|
||||||
|
HAVING SUM(raw_events_second.value_4) > 10) AS foo2 ) as f2
|
||||||
|
ON (f.id = f2.id);
|
||||||
|
DEBUG: StartTransactionCommand
|
||||||
|
DEBUG: StartTransaction
|
||||||
|
DEBUG: name: unnamed; blockState: DEFAULT; state: INPROGR, xid/subid/cid: 0/1/0, nestlvl: 1, children:
|
||||||
|
ERROR: cannot perform distributed planning for the given modification
|
||||||
|
DETAIL: Select query cannot be pushed down to the worker.
|
||||||
|
-- cannot pushdown the query since the JOIN is not equi JOIN
|
||||||
|
INSERT INTO agg_events
|
||||||
|
(user_id, value_4_agg)
|
||||||
|
SELECT
|
||||||
|
outer_most.id, max(outer_most.value)
|
||||||
|
FROM
|
||||||
|
(
|
||||||
|
SELECT f2.id as id, f2.v4 as value FROM
|
||||||
|
(SELECT
|
||||||
|
id
|
||||||
|
FROM (SELECT reference_table.user_id AS id
|
||||||
|
FROM raw_events_first,
|
||||||
|
reference_table
|
||||||
|
WHERE raw_events_first.user_id = reference_table.user_id ) AS foo) as f
|
||||||
|
INNER JOIN
|
||||||
|
(SELECT v4,
|
||||||
|
v1,
|
||||||
|
id
|
||||||
|
FROM (SELECT SUM(raw_events_second.value_4) AS v4,
|
||||||
|
SUM(raw_events_first.value_1) AS v1,
|
||||||
|
raw_events_second.user_id AS id
|
||||||
|
FROM raw_events_first,
|
||||||
|
raw_events_second
|
||||||
|
WHERE raw_events_first.user_id = raw_events_second.user_id
|
||||||
|
GROUP BY raw_events_second.user_id
|
||||||
|
HAVING SUM(raw_events_second.value_4) > 10) AS foo2 ) as f2
|
||||||
|
ON (f.id != f2.id)) as outer_most
|
||||||
|
GROUP BY outer_most.id;
|
||||||
|
DEBUG: StartTransactionCommand
|
||||||
|
DEBUG: StartTransaction
|
||||||
|
DEBUG: name: unnamed; blockState: DEFAULT; state: INPROGR, xid/subid/cid: 0/1/0, nestlvl: 1, children:
|
||||||
|
DEBUG: predicate pruning for shardId 13300001
|
||||||
|
DEBUG: predicate pruning for shardId 13300002
|
||||||
|
DEBUG: predicate pruning for shardId 13300003
|
||||||
|
DEBUG: predicate pruning for shardId 13300005
|
||||||
|
DEBUG: predicate pruning for shardId 13300006
|
||||||
|
DEBUG: predicate pruning for shardId 13300007
|
||||||
|
ERROR: cannot perform distributed planning for the given modification
|
||||||
|
DETAIL: Select query cannot be pushed down to the worker.
|
||||||
|
|
|
@ -180,18 +180,72 @@ FROM (SELECT SUM(raw_events_second.value_4) AS v4,
|
||||||
WHERE raw_events_first.user_id = raw_events_second.user_id
|
WHERE raw_events_first.user_id = raw_events_second.user_id
|
||||||
GROUP BY raw_events_second.user_id) AS foo;
|
GROUP BY raw_events_second.user_id) AS foo;
|
||||||
|
|
||||||
|
-- join between subqueries
|
||||||
|
INSERT INTO agg_events
|
||||||
|
(user_id)
|
||||||
|
SELECT f2.id FROM
|
||||||
|
|
||||||
|
(SELECT
|
||||||
|
id
|
||||||
|
FROM (SELECT reference_table.user_id AS id
|
||||||
|
FROM raw_events_first,
|
||||||
|
reference_table
|
||||||
|
WHERE raw_events_first.user_id = reference_table.user_id ) AS foo) as f
|
||||||
|
INNER JOIN
|
||||||
|
(SELECT v4,
|
||||||
|
v1,
|
||||||
|
id
|
||||||
|
FROM (SELECT SUM(raw_events_second.value_4) AS v4,
|
||||||
|
SUM(raw_events_first.value_1) AS v1,
|
||||||
|
raw_events_second.user_id AS id
|
||||||
|
FROM raw_events_first,
|
||||||
|
raw_events_second
|
||||||
|
WHERE raw_events_first.user_id = raw_events_second.user_id
|
||||||
|
GROUP BY raw_events_second.user_id
|
||||||
|
HAVING SUM(raw_events_second.value_4) > 10) AS foo2 ) as f2
|
||||||
|
ON (f.id = f2.id);
|
||||||
|
|
||||||
|
-- add one more level subqueris on top of subquery JOINs
|
||||||
|
INSERT INTO agg_events
|
||||||
|
(user_id, value_4_agg)
|
||||||
|
SELECT
|
||||||
|
outer_most.id, max(outer_most.value)
|
||||||
|
FROM
|
||||||
|
(
|
||||||
|
SELECT f2.id as id, f2.v4 as value FROM
|
||||||
|
(SELECT
|
||||||
|
id
|
||||||
|
FROM (SELECT reference_table.user_id AS id
|
||||||
|
FROM raw_events_first,
|
||||||
|
reference_table
|
||||||
|
WHERE raw_events_first.user_id = reference_table.user_id ) AS foo) as f
|
||||||
|
INNER JOIN
|
||||||
|
(SELECT v4,
|
||||||
|
v1,
|
||||||
|
id
|
||||||
|
FROM (SELECT SUM(raw_events_second.value_4) AS v4,
|
||||||
|
SUM(raw_events_first.value_1) AS v1,
|
||||||
|
raw_events_second.user_id AS id
|
||||||
|
FROM raw_events_first,
|
||||||
|
raw_events_second
|
||||||
|
WHERE raw_events_first.user_id = raw_events_second.user_id
|
||||||
|
GROUP BY raw_events_second.user_id
|
||||||
|
HAVING SUM(raw_events_second.value_4) > 10) AS foo2 ) as f2
|
||||||
|
ON (f.id = f2.id)) as outer_most
|
||||||
|
GROUP BY
|
||||||
|
outer_most.id;
|
||||||
|
|
||||||
-- some UPSERTS
|
-- some UPSERTS
|
||||||
INSERT INTO agg_events AS ae
|
INSERT INTO agg_events AS ae
|
||||||
(
|
(
|
||||||
user_id,
|
user_id,
|
||||||
value_1_agg,
|
value_1_agg,
|
||||||
agg_time
|
agg_time
|
||||||
)
|
)
|
||||||
SELECT user_id,
|
SELECT user_id,
|
||||||
value_1,
|
value_1,
|
||||||
time
|
time
|
||||||
FROM raw_events_first
|
FROM raw_events_first
|
||||||
ON conflict (user_id, value_1_agg)
|
ON conflict (user_id, value_1_agg)
|
||||||
DO UPDATE
|
DO UPDATE
|
||||||
SET agg_time = EXCLUDED.agg_time
|
SET agg_time = EXCLUDED.agg_time
|
||||||
|
@ -287,93 +341,178 @@ FROM
|
||||||
(SELECT user_id FROM raw_events_second where user_id = 17)) as foo;
|
(SELECT user_id FROM raw_events_second where user_id = 17)) as foo;
|
||||||
|
|
||||||
-- unsupported JOIN
|
-- unsupported JOIN
|
||||||
INSERT INTO agg_events
|
INSERT INTO agg_events
|
||||||
(value_4_agg,
|
(value_4_agg,
|
||||||
value_1_agg,
|
value_1_agg,
|
||||||
user_id)
|
user_id)
|
||||||
SELECT v4,
|
SELECT v4,
|
||||||
v1,
|
v1,
|
||||||
id
|
id
|
||||||
FROM (SELECT SUM(raw_events_second.value_4) AS v4,
|
FROM (SELECT SUM(raw_events_second.value_4) AS v4,
|
||||||
SUM(raw_events_first.value_1) AS v1,
|
SUM(raw_events_first.value_1) AS v1,
|
||||||
raw_events_second.user_id AS id
|
raw_events_second.user_id AS id
|
||||||
FROM raw_events_first,
|
FROM raw_events_first,
|
||||||
raw_events_second
|
raw_events_second
|
||||||
WHERE raw_events_first.user_id != raw_events_second.user_id
|
WHERE raw_events_first.user_id != raw_events_second.user_id
|
||||||
GROUP BY raw_events_second.user_id) AS foo;
|
GROUP BY raw_events_second.user_id) AS foo;
|
||||||
|
|
||||||
|
|
||||||
-- INSERT partition column does not match with SELECT partition column
|
-- INSERT partition column does not match with SELECT partition column
|
||||||
INSERT INTO agg_events
|
INSERT INTO agg_events
|
||||||
(value_4_agg,
|
(value_4_agg,
|
||||||
value_1_agg,
|
value_1_agg,
|
||||||
user_id)
|
user_id)
|
||||||
SELECT v4,
|
SELECT v4,
|
||||||
v1,
|
v1,
|
||||||
id
|
id
|
||||||
FROM (SELECT SUM(raw_events_second.value_4) AS v4,
|
FROM (SELECT SUM(raw_events_second.value_4) AS v4,
|
||||||
SUM(raw_events_first.value_1) AS v1,
|
SUM(raw_events_first.value_1) AS v1,
|
||||||
raw_events_second.value_3 AS id
|
raw_events_second.value_3 AS id
|
||||||
FROM raw_events_first,
|
FROM raw_events_first,
|
||||||
raw_events_second
|
raw_events_second
|
||||||
WHERE raw_events_first.user_id = raw_events_second.user_id
|
WHERE raw_events_first.user_id = raw_events_second.user_id
|
||||||
GROUP BY raw_events_second.value_3) AS foo;
|
GROUP BY raw_events_second.value_3) AS foo;
|
||||||
|
|
||||||
-- error cases
|
-- error cases
|
||||||
-- no part column at all
|
-- no part column at all
|
||||||
INSERT INTO raw_events_second
|
INSERT INTO raw_events_second
|
||||||
(value_1)
|
(value_1)
|
||||||
SELECT value_1
|
SELECT value_1
|
||||||
FROM raw_events_first;
|
FROM raw_events_first;
|
||||||
|
|
||||||
INSERT INTO raw_events_second
|
INSERT INTO raw_events_second
|
||||||
(value_1)
|
(value_1)
|
||||||
SELECT user_id
|
SELECT user_id
|
||||||
FROM raw_events_first;
|
FROM raw_events_first;
|
||||||
|
|
||||||
INSERT INTO raw_events_second
|
INSERT INTO raw_events_second
|
||||||
(user_id)
|
(user_id)
|
||||||
SELECT value_1
|
SELECT value_1
|
||||||
FROM raw_events_first;
|
FROM raw_events_first;
|
||||||
|
|
||||||
INSERT INTO raw_events_second
|
INSERT INTO raw_events_second
|
||||||
(user_id)
|
(user_id)
|
||||||
SELECT user_id * 2
|
SELECT user_id * 2
|
||||||
FROM raw_events_first;
|
FROM raw_events_first;
|
||||||
|
|
||||||
INSERT INTO raw_events_second
|
INSERT INTO raw_events_second
|
||||||
(user_id)
|
(user_id)
|
||||||
SELECT user_id :: bigint
|
SELECT user_id :: bigint
|
||||||
FROM raw_events_first;
|
FROM raw_events_first;
|
||||||
|
|
||||||
INSERT INTO agg_events
|
INSERT INTO agg_events
|
||||||
(value_3_agg,
|
(value_3_agg,
|
||||||
value_4_agg,
|
value_4_agg,
|
||||||
value_1_agg,
|
value_1_agg,
|
||||||
value_2_agg,
|
value_2_agg,
|
||||||
user_id)
|
user_id)
|
||||||
SELECT SUM(value_3),
|
SELECT SUM(value_3),
|
||||||
Count(value_4),
|
Count(value_4),
|
||||||
user_id,
|
user_id,
|
||||||
|
SUM(value_1),
|
||||||
|
Avg(value_2)
|
||||||
|
FROM raw_events_first
|
||||||
|
GROUP BY user_id;
|
||||||
|
|
||||||
|
INSERT INTO agg_events
|
||||||
|
(value_3_agg,
|
||||||
|
value_4_agg,
|
||||||
|
value_1_agg,
|
||||||
|
value_2_agg,
|
||||||
|
user_id)
|
||||||
|
SELECT SUM(value_3),
|
||||||
|
Count(value_4),
|
||||||
|
user_id,
|
||||||
SUM(value_1),
|
SUM(value_1),
|
||||||
Avg(value_2)
|
value_2
|
||||||
FROM raw_events_first
|
FROM raw_events_first
|
||||||
GROUP BY user_id;
|
GROUP BY user_id,
|
||||||
|
value_2;
|
||||||
INSERT INTO agg_events
|
|
||||||
(value_3_agg,
|
|
||||||
value_4_agg,
|
|
||||||
value_1_agg,
|
|
||||||
value_2_agg,
|
|
||||||
user_id)
|
|
||||||
SELECT SUM(value_3),
|
|
||||||
Count(value_4),
|
|
||||||
user_id,
|
|
||||||
SUM(value_1),
|
|
||||||
value_2
|
|
||||||
FROM raw_events_first
|
|
||||||
GROUP BY user_id,
|
|
||||||
value_2;
|
|
||||||
|
|
||||||
-- tables should be co-located
|
-- tables should be co-located
|
||||||
INSERT INTO agg_events (user_id) SELECT user_id FROM reference_table;
|
INSERT INTO agg_events (user_id)
|
||||||
|
SELECT
|
||||||
|
user_id
|
||||||
|
FROM
|
||||||
|
reference_table;
|
||||||
|
|
||||||
|
-- unsupported joins between subqueries
|
||||||
|
-- we do not return bare partition column on the inner query
|
||||||
|
INSERT INTO agg_events
|
||||||
|
(user_id)
|
||||||
|
SELECT f2.id FROM
|
||||||
|
(SELECT
|
||||||
|
id
|
||||||
|
FROM (SELECT reference_table.user_id AS id
|
||||||
|
FROM raw_events_first,
|
||||||
|
reference_table
|
||||||
|
WHERE raw_events_first.user_id = reference_table.user_id ) AS foo) as f
|
||||||
|
INNER JOIN
|
||||||
|
(SELECT v4,
|
||||||
|
v1,
|
||||||
|
id
|
||||||
|
FROM (SELECT SUM(raw_events_second.value_4) AS v4,
|
||||||
|
raw_events_second.value_1 AS v1,
|
||||||
|
SUM(raw_events_second.user_id) AS id
|
||||||
|
FROM raw_events_first,
|
||||||
|
raw_events_second
|
||||||
|
WHERE raw_events_first.user_id = raw_events_second.user_id
|
||||||
|
GROUP BY raw_events_second.value_1
|
||||||
|
HAVING SUM(raw_events_second.value_4) > 10) AS foo2 ) as f2
|
||||||
|
ON (f.id = f2.id);
|
||||||
|
|
||||||
|
|
||||||
|
-- the second part of the query is not routable since
|
||||||
|
-- no GROUP BY on the partition column
|
||||||
|
INSERT INTO agg_events
|
||||||
|
(user_id)
|
||||||
|
SELECT f.id FROM
|
||||||
|
(SELECT
|
||||||
|
id
|
||||||
|
FROM (SELECT raw_events_first.user_id AS id
|
||||||
|
FROM raw_events_first,
|
||||||
|
reference_table
|
||||||
|
WHERE raw_events_first.user_id = reference_table.user_id ) AS foo) as f
|
||||||
|
INNER JOIN
|
||||||
|
(SELECT v4,
|
||||||
|
v1,
|
||||||
|
id
|
||||||
|
FROM (SELECT SUM(raw_events_second.value_4) AS v4,
|
||||||
|
raw_events_second.value_1 AS v1,
|
||||||
|
SUM(raw_events_second.user_id) AS id
|
||||||
|
FROM raw_events_first,
|
||||||
|
raw_events_second
|
||||||
|
WHERE raw_events_first.user_id = raw_events_second.user_id
|
||||||
|
GROUP BY raw_events_second.value_1
|
||||||
|
HAVING SUM(raw_events_second.value_4) > 10) AS foo2 ) as f2
|
||||||
|
ON (f.id = f2.id);
|
||||||
|
|
||||||
|
-- cannot pushdown the query since the JOIN is not equi JOIN
|
||||||
|
INSERT INTO agg_events
|
||||||
|
(user_id, value_4_agg)
|
||||||
|
SELECT
|
||||||
|
outer_most.id, max(outer_most.value)
|
||||||
|
FROM
|
||||||
|
(
|
||||||
|
SELECT f2.id as id, f2.v4 as value FROM
|
||||||
|
(SELECT
|
||||||
|
id
|
||||||
|
FROM (SELECT reference_table.user_id AS id
|
||||||
|
FROM raw_events_first,
|
||||||
|
reference_table
|
||||||
|
WHERE raw_events_first.user_id = reference_table.user_id ) AS foo) as f
|
||||||
|
INNER JOIN
|
||||||
|
(SELECT v4,
|
||||||
|
v1,
|
||||||
|
id
|
||||||
|
FROM (SELECT SUM(raw_events_second.value_4) AS v4,
|
||||||
|
SUM(raw_events_first.value_1) AS v1,
|
||||||
|
raw_events_second.user_id AS id
|
||||||
|
FROM raw_events_first,
|
||||||
|
raw_events_second
|
||||||
|
WHERE raw_events_first.user_id = raw_events_second.user_id
|
||||||
|
GROUP BY raw_events_second.user_id
|
||||||
|
HAVING SUM(raw_events_second.value_4) > 10) AS foo2 ) as f2
|
||||||
|
ON (f.id != f2.id)) as outer_most
|
||||||
|
GROUP BY outer_most.id;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue