mirror of https://github.com/citusdata/citus.git
Add EXPLAIN regression test with subplans
parent
5e0539efa3
commit
6a6e986c2b
|
@ -713,6 +713,7 @@ Limit
|
|||
Sort Key: events.event_time DESC
|
||||
-> Seq Scan on events_1400029 events
|
||||
Filter: (composite_id = users.composite_id)
|
||||
RESET citus.subquery_pushdown;
|
||||
-- Test all tasks output
|
||||
SET citus.explain_all_tasks TO on;
|
||||
EXPLAIN (COSTS FALSE)
|
||||
|
@ -1115,3 +1116,75 @@ Custom Scan (Citus INSERT ... SELECT via coordinator)
|
|||
-> Append
|
||||
-> Function Scan on generate_series s
|
||||
-> Function Scan on generate_series s_1
|
||||
-- explain with recursive planning
|
||||
EXPLAIN (COSTS OFF, VERBOSE true)
|
||||
WITH keys AS (
|
||||
SELECT DISTINCT l_orderkey FROM lineitem_hash_part
|
||||
),
|
||||
series AS (
|
||||
SELECT s FROM generate_series(1,10) s
|
||||
)
|
||||
SELECT l_orderkey FROM series JOIN keys ON (s = l_orderkey)
|
||||
ORDER BY s;
|
||||
Custom Scan (Citus Router)
|
||||
Output: remote_scan.l_orderkey
|
||||
-> Distributed Subplan 54_1
|
||||
-> HashAggregate
|
||||
Output: remote_scan.l_orderkey
|
||||
Group Key: remote_scan.l_orderkey
|
||||
-> Custom Scan (Citus Real-Time)
|
||||
Output: remote_scan.l_orderkey
|
||||
Task Count: 4
|
||||
Tasks Shown: One of 4
|
||||
-> Task
|
||||
Node: host=localhost port=57637 dbname=regression
|
||||
-> HashAggregate
|
||||
Output: l_orderkey
|
||||
Group Key: lineitem_hash_part.l_orderkey
|
||||
-> Seq Scan on public.lineitem_hash_part_360038 lineitem_hash_part
|
||||
Output: l_orderkey, l_partkey, l_suppkey, l_linenumber, l_quantity, l_extendedprice, l_discount, l_tax, l_returnflag, l_linestatus, l_shipdate, l_commitdate, l_receiptdate, l_shipinstruct, l_shipmode, l_comment
|
||||
-> Distributed Subplan 54_2
|
||||
-> Function Scan on pg_catalog.generate_series s
|
||||
Output: s
|
||||
Function Call: generate_series(1, 10)
|
||||
Task Count: 1
|
||||
Tasks Shown: All
|
||||
-> Task
|
||||
Node: host=localhost port=57638 dbname=regression
|
||||
-> Merge Join
|
||||
Output: intermediate_result_1.l_orderkey, intermediate_result.s
|
||||
Merge Cond: (intermediate_result.s = intermediate_result_1.l_orderkey)
|
||||
-> Sort
|
||||
Output: intermediate_result.s
|
||||
Sort Key: intermediate_result.s
|
||||
-> Function Scan on pg_catalog.read_intermediate_result intermediate_result
|
||||
Output: intermediate_result.s
|
||||
Function Call: read_intermediate_result('54_2'::text, 'binary'::citus_copy_format)
|
||||
-> Sort
|
||||
Output: intermediate_result_1.l_orderkey
|
||||
Sort Key: intermediate_result_1.l_orderkey
|
||||
-> Function Scan on pg_catalog.read_intermediate_result intermediate_result_1
|
||||
Output: intermediate_result_1.l_orderkey
|
||||
Function Call: read_intermediate_result('54_1'::text, 'binary'::citus_copy_format)
|
||||
SELECT true AS valid FROM explain_json($$
|
||||
WITH result AS (
|
||||
SELECT l_quantity, count(*) count_quantity FROM lineitem
|
||||
GROUP BY l_quantity ORDER BY count_quantity, l_quantity
|
||||
),
|
||||
series AS (
|
||||
SELECT s FROM generate_series(1,10) s
|
||||
)
|
||||
SELECT * FROM result JOIN series ON (s = count_quantity) JOIN orders_hash_part ON (s = o_orderkey)
|
||||
$$);
|
||||
t
|
||||
SELECT true AS valid FROM explain_xml($$
|
||||
WITH result AS (
|
||||
SELECT l_quantity, count(*) count_quantity FROM lineitem
|
||||
GROUP BY l_quantity ORDER BY count_quantity, l_quantity
|
||||
),
|
||||
series AS (
|
||||
SELECT s FROM generate_series(1,10) s
|
||||
)
|
||||
SELECT * FROM result JOIN series ON (s = l_quantity) JOIN orders_hash_part ON (s = o_orderkey)
|
||||
$$);
|
||||
t
|
||||
|
|
|
@ -713,6 +713,7 @@ Limit
|
|||
Sort Key: events.event_time DESC
|
||||
-> Seq Scan on events_1400029 events
|
||||
Filter: (composite_id = users.composite_id)
|
||||
RESET citus.subquery_pushdown;
|
||||
-- Test all tasks output
|
||||
SET citus.explain_all_tasks TO on;
|
||||
EXPLAIN (COSTS FALSE)
|
||||
|
@ -1115,3 +1116,75 @@ Custom Scan (Citus INSERT ... SELECT via coordinator)
|
|||
-> Append
|
||||
-> Function Scan on generate_series s
|
||||
-> Function Scan on generate_series s_1
|
||||
-- explain with recursive planning
|
||||
EXPLAIN (COSTS OFF, VERBOSE true)
|
||||
WITH keys AS (
|
||||
SELECT DISTINCT l_orderkey FROM lineitem_hash_part
|
||||
),
|
||||
series AS (
|
||||
SELECT s FROM generate_series(1,10) s
|
||||
)
|
||||
SELECT l_orderkey FROM series JOIN keys ON (s = l_orderkey)
|
||||
ORDER BY s;
|
||||
Custom Scan (Citus Router)
|
||||
Output: remote_scan.l_orderkey
|
||||
-> Distributed Subplan 54_1
|
||||
-> HashAggregate
|
||||
Output: remote_scan.l_orderkey
|
||||
Group Key: remote_scan.l_orderkey
|
||||
-> Custom Scan (Citus Real-Time)
|
||||
Output: remote_scan.l_orderkey
|
||||
Task Count: 4
|
||||
Tasks Shown: One of 4
|
||||
-> Task
|
||||
Node: host=localhost port=57637 dbname=regression
|
||||
-> HashAggregate
|
||||
Output: l_orderkey
|
||||
Group Key: lineitem_hash_part.l_orderkey
|
||||
-> Seq Scan on public.lineitem_hash_part_360038 lineitem_hash_part
|
||||
Output: l_orderkey, l_partkey, l_suppkey, l_linenumber, l_quantity, l_extendedprice, l_discount, l_tax, l_returnflag, l_linestatus, l_shipdate, l_commitdate, l_receiptdate, l_shipinstruct, l_shipmode, l_comment
|
||||
-> Distributed Subplan 54_2
|
||||
-> Function Scan on pg_catalog.generate_series s
|
||||
Output: s
|
||||
Function Call: generate_series(1, 10)
|
||||
Task Count: 1
|
||||
Tasks Shown: All
|
||||
-> Task
|
||||
Node: host=localhost port=57638 dbname=regression
|
||||
-> Merge Join
|
||||
Output: intermediate_result_1.l_orderkey, intermediate_result.s
|
||||
Merge Cond: (intermediate_result.s = intermediate_result_1.l_orderkey)
|
||||
-> Sort
|
||||
Output: intermediate_result.s
|
||||
Sort Key: intermediate_result.s
|
||||
-> Function Scan on pg_catalog.read_intermediate_result intermediate_result
|
||||
Output: intermediate_result.s
|
||||
Function Call: read_intermediate_result('54_2'::text, 'binary'::citus_copy_format)
|
||||
-> Sort
|
||||
Output: intermediate_result_1.l_orderkey
|
||||
Sort Key: intermediate_result_1.l_orderkey
|
||||
-> Function Scan on pg_catalog.read_intermediate_result intermediate_result_1
|
||||
Output: intermediate_result_1.l_orderkey
|
||||
Function Call: read_intermediate_result('54_1'::text, 'binary'::citus_copy_format)
|
||||
SELECT true AS valid FROM explain_json($$
|
||||
WITH result AS (
|
||||
SELECT l_quantity, count(*) count_quantity FROM lineitem
|
||||
GROUP BY l_quantity ORDER BY count_quantity, l_quantity
|
||||
),
|
||||
series AS (
|
||||
SELECT s FROM generate_series(1,10) s
|
||||
)
|
||||
SELECT * FROM result JOIN series ON (s = count_quantity) JOIN orders_hash_part ON (s = o_orderkey)
|
||||
$$);
|
||||
t
|
||||
SELECT true AS valid FROM explain_xml($$
|
||||
WITH result AS (
|
||||
SELECT l_quantity, count(*) count_quantity FROM lineitem
|
||||
GROUP BY l_quantity ORDER BY count_quantity, l_quantity
|
||||
),
|
||||
series AS (
|
||||
SELECT s FROM generate_series(1,10) s
|
||||
)
|
||||
SELECT * FROM result JOIN series ON (s = l_quantity) JOIN orders_hash_part ON (s = o_orderkey)
|
||||
$$);
|
||||
t
|
||||
|
|
|
@ -356,6 +356,8 @@ ORDER BY
|
|||
LIMIT
|
||||
10;
|
||||
|
||||
RESET citus.subquery_pushdown;
|
||||
|
||||
-- Test all tasks output
|
||||
SET citus.explain_all_tasks TO on;
|
||||
|
||||
|
@ -519,3 +521,36 @@ EXPLAIN (COSTS OFF)
|
|||
INSERT INTO lineitem_hash_part
|
||||
( SELECT s FROM generate_series(1,5) s) UNION
|
||||
( SELECT s FROM generate_series(5,10) s);
|
||||
|
||||
-- explain with recursive planning
|
||||
EXPLAIN (COSTS OFF, VERBOSE true)
|
||||
WITH keys AS (
|
||||
SELECT DISTINCT l_orderkey FROM lineitem_hash_part
|
||||
),
|
||||
series AS (
|
||||
SELECT s FROM generate_series(1,10) s
|
||||
)
|
||||
SELECT l_orderkey FROM series JOIN keys ON (s = l_orderkey)
|
||||
ORDER BY s;
|
||||
|
||||
SELECT true AS valid FROM explain_json($$
|
||||
WITH result AS (
|
||||
SELECT l_quantity, count(*) count_quantity FROM lineitem
|
||||
GROUP BY l_quantity ORDER BY count_quantity, l_quantity
|
||||
),
|
||||
series AS (
|
||||
SELECT s FROM generate_series(1,10) s
|
||||
)
|
||||
SELECT * FROM result JOIN series ON (s = count_quantity) JOIN orders_hash_part ON (s = o_orderkey)
|
||||
$$);
|
||||
|
||||
SELECT true AS valid FROM explain_xml($$
|
||||
WITH result AS (
|
||||
SELECT l_quantity, count(*) count_quantity FROM lineitem
|
||||
GROUP BY l_quantity ORDER BY count_quantity, l_quantity
|
||||
),
|
||||
series AS (
|
||||
SELECT s FROM generate_series(1,10) s
|
||||
)
|
||||
SELECT * FROM result JOIN series ON (s = l_quantity) JOIN orders_hash_part ON (s = o_orderkey)
|
||||
$$);
|
||||
|
|
Loading…
Reference in New Issue