mirror of https://github.com/citusdata/citus.git
111 lines
4.9 KiB
Plaintext
111 lines
4.9 KiB
Plaintext
--
|
|
-- MULTI_JOIN_PRUNING
|
|
--
|
|
-- Check that join-pruning works for joins between two relations. For now
|
|
-- we only check for join-pruning between locally partitioned relations. In the
|
|
-- future we want to check for pruning between re-partitioned relations as well.
|
|
SET citus.explain_distributed_queries TO off;
|
|
SET client_min_messages TO DEBUG2;
|
|
SELECT sum(l_linenumber), avg(l_linenumber) FROM lineitem, orders
|
|
WHERE l_orderkey = o_orderkey;
|
|
DEBUG: Router planner does not support append-partitioned tables.
|
|
DEBUG: join prunable for intervals [1,5986] and [8997,14947]
|
|
DEBUG: join prunable for intervals [8997,14947] and [1,5986]
|
|
sum | avg
|
|
-------+--------------------
|
|
36089 | 3.0074166666666667
|
|
(1 row)
|
|
|
|
SELECT sum(l_linenumber), avg(l_linenumber) FROM lineitem, orders
|
|
WHERE l_orderkey = o_orderkey AND l_orderkey > 9030;
|
|
DEBUG: Router planner does not support append-partitioned tables.
|
|
DEBUG: join prunable for intervals [8997,14947] and [1,5986]
|
|
sum | avg
|
|
-------+--------------------
|
|
17999 | 3.0189533713518953
|
|
(1 row)
|
|
|
|
-- Shards for the lineitem table have been pruned away. Check that join pruning
|
|
-- works as expected in this case.
|
|
SELECT sum(l_linenumber), avg(l_linenumber) FROM lineitem, orders
|
|
WHERE l_orderkey = o_orderkey AND l_orderkey > 20000;
|
|
DEBUG: Router planner does not support append-partitioned tables.
|
|
sum | avg
|
|
-----+-----
|
|
|
|
|
(1 row)
|
|
|
|
-- Partition pruning left three shards for the lineitem and one shard for the
|
|
-- orders table. These shard sets don't overlap, so join pruning should prune
|
|
-- out all the shards, and leave us with an empty task list.
|
|
SELECT sum(l_linenumber), avg(l_linenumber) FROM lineitem, orders
|
|
WHERE l_orderkey = o_orderkey AND l_orderkey > 6000 AND o_orderkey < 6000;
|
|
DEBUG: Router planner does not support append-partitioned tables.
|
|
sum | avg
|
|
-----+-----
|
|
|
|
|
(1 row)
|
|
|
|
-- Make sure that we can handle filters without a column
|
|
SELECT sum(l_linenumber), avg(l_linenumber) FROM lineitem, orders
|
|
WHERE l_orderkey = o_orderkey AND false;
|
|
DEBUG: Router planner does not support append-partitioned tables.
|
|
sum | avg
|
|
-----+-----
|
|
|
|
|
(1 row)
|
|
|
|
SELECT sum(l_linenumber), avg(l_linenumber)
|
|
FROM lineitem INNER JOIN orders ON (l_orderkey = o_orderkey)
|
|
WHERE false;
|
|
DEBUG: Router planner does not support append-partitioned tables.
|
|
sum | avg
|
|
-----+-----
|
|
|
|
|
(1 row)
|
|
|
|
-- These tests check that we can do join pruning for tables partitioned over
|
|
-- different type of columns including varchar, array types, composite types
|
|
-- etc. This is in response to a bug we had where we were not able to resolve
|
|
-- correct operator types for some kind of column types.
|
|
EXPLAIN SELECT count(*)
|
|
FROM array_partitioned_table table1, array_partitioned_table table2
|
|
WHERE table1.array_column = table2.array_column;
|
|
DEBUG: Router planner does not support append-partitioned tables.
|
|
DEBUG: join prunable for intervals [{},{AZZXSP27F21T6,AZZXSP27F21T6}] and [{BA1000U2AMO4ZGX,BZZXSP27F21T6},{CA1000U2AMO4ZGX,CZZXSP27F21T6}]
|
|
DEBUG: join prunable for intervals [{BA1000U2AMO4ZGX,BZZXSP27F21T6},{CA1000U2AMO4ZGX,CZZXSP27F21T6}] and [{},{AZZXSP27F21T6,AZZXSP27F21T6}]
|
|
QUERY PLAN
|
|
-----------------------------------------------------------------------
|
|
Aggregate (cost=0.00..0.00 rows=0 width=0)
|
|
-> Custom Scan (Citus Real-Time) (cost=0.00..0.00 rows=0 width=0)
|
|
explain statements for distributed queries are not enabled
|
|
(3 rows)
|
|
|
|
EXPLAIN SELECT count(*)
|
|
FROM composite_partitioned_table table1, composite_partitioned_table table2
|
|
WHERE table1.composite_column = table2.composite_column;
|
|
DEBUG: Router planner does not support append-partitioned tables.
|
|
DEBUG: join prunable for intervals [(a,3,b),(b,4,c)] and [(c,5,d),(d,6,e)]
|
|
DEBUG: join prunable for intervals [(c,5,d),(d,6,e)] and [(a,3,b),(b,4,c)]
|
|
QUERY PLAN
|
|
-----------------------------------------------------------------------
|
|
Aggregate (cost=0.00..0.00 rows=0 width=0)
|
|
-> Custom Scan (Citus Real-Time) (cost=0.00..0.00 rows=0 width=0)
|
|
explain statements for distributed queries are not enabled
|
|
(3 rows)
|
|
|
|
-- Test that large table joins on partition varchar columns work
|
|
EXPLAIN SELECT count(*)
|
|
FROM varchar_partitioned_table table1, varchar_partitioned_table table2
|
|
WHERE table1.varchar_column = table2.varchar_column;
|
|
DEBUG: Router planner does not support append-partitioned tables.
|
|
DEBUG: join prunable for intervals [AA1000U2AMO4ZGX,AZZXSP27F21T6] and [BA1000U2AMO4ZGX,BZZXSP27F21T6]
|
|
DEBUG: join prunable for intervals [BA1000U2AMO4ZGX,BZZXSP27F21T6] and [AA1000U2AMO4ZGX,AZZXSP27F21T6]
|
|
QUERY PLAN
|
|
-----------------------------------------------------------------------
|
|
Aggregate (cost=0.00..0.00 rows=0 width=0)
|
|
-> Custom Scan (Citus Real-Time) (cost=0.00..0.00 rows=0 width=0)
|
|
explain statements for distributed queries are not enabled
|
|
(3 rows)
|
|
|