Add tests for complex joins on reference tables

pull/3323/head
Jelte Fennema 2019-12-18 15:30:25 +01:00
parent 3a042e4611
commit cf88bdf833
3 changed files with 332 additions and 1 deletions

View File

@ -0,0 +1,226 @@
SET citus.log_multi_join_order to TRUE;
SET client_min_messages to DEBUG1;
SET citus.enable_repartition_joins to on;
SELECT
l_partkey, l_suppkey, count(*)
FROM
lineitem, part_append, supplier
WHERE
l_partkey = p_partkey
AND l_suppkey < s_suppkey
GROUP BY
l_partkey, l_suppkey
ORDER BY
l_partkey, l_suppkey
LIMIT 10;
LOG: join order: [ "lineitem" ][ reference join "supplier" ][ single range partition join "part_append" ]
DEBUG: push down of limit count: 10
l_partkey | l_suppkey | count
-----------+-----------+-------
195 | 196 | 804
245 | 246 | 754
278 | 279 | 721
308 | 309 | 691
309 | 310 | 1380
350 | 351 | 649
358 | 359 | 641
574 | 575 | 425
641 | 642 | 358
654 | 655 | 345
(10 rows)
SELECT
l_partkey, l_suppkey, count(*)
FROM
lineitem, part_append, supplier
WHERE
l_partkey = p_partkey
AND int4eq(l_suppkey, s_suppkey)
GROUP BY
l_partkey, l_suppkey
ORDER BY
l_partkey, l_suppkey
LIMIT 10;
LOG: join order: [ "lineitem" ][ reference join "supplier" ][ single range partition join "part_append" ]
DEBUG: push down of limit count: 10
l_partkey | l_suppkey | count
-----------+-----------+-------
195 | 196 | 1
245 | 246 | 1
278 | 279 | 1
308 | 309 | 1
309 | 310 | 2
350 | 351 | 1
358 | 359 | 1
574 | 575 | 1
641 | 642 | 1
654 | 655 | 1
(10 rows)
SELECT
l_partkey, l_suppkey, count(*)
FROM
lineitem, part_append, supplier
WHERE
l_partkey = p_partkey
AND NOT int4ne(l_suppkey, s_suppkey)
GROUP BY
l_partkey, l_suppkey
ORDER BY
l_partkey, l_suppkey
LIMIT 10;
LOG: join order: [ "lineitem" ][ reference join "supplier" ][ single range partition join "part_append" ]
DEBUG: push down of limit count: 10
l_partkey | l_suppkey | count
-----------+-----------+-------
195 | 196 | 1
245 | 246 | 1
278 | 279 | 1
308 | 309 | 1
309 | 310 | 2
350 | 351 | 1
358 | 359 | 1
574 | 575 | 1
641 | 642 | 1
654 | 655 | 1
(10 rows)
SELECT
l_partkey, l_suppkey, count(*)
FROM
lineitem, part_append, supplier
WHERE
l_partkey = p_partkey
GROUP BY
l_partkey, l_suppkey
ORDER BY
l_partkey, l_suppkey
LIMIT 10;
LOG: join order: [ "lineitem" ][ single range partition join "part_append" ][ cartesian product reference join "supplier" ]
DEBUG: push down of limit count: 10
l_partkey | l_suppkey | count
-----------+-----------+-------
18 | 7519 | 1000
79 | 7580 | 1000
91 | 2592 | 1000
149 | 5150 | 1000
149 | 7650 | 1000
175 | 5176 | 1000
179 | 2680 | 1000
182 | 7683 | 1000
195 | 196 | 1000
204 | 7705 | 1000
(10 rows)
SELECT
l_partkey, l_suppkey, count(*)
FROM
lineitem, part_append, supplier
WHERE
l_partkey = p_partkey
AND (int4eq(l_suppkey, s_suppkey) OR l_suppkey = s_suppkey)
GROUP BY
l_partkey, l_suppkey
ORDER BY
l_partkey, l_suppkey
LIMIT 10;
LOG: join order: [ "lineitem" ][ reference join "supplier" ][ single range partition join "part_append" ]
DEBUG: push down of limit count: 10
l_partkey | l_suppkey | count
-----------+-----------+-------
195 | 196 | 1
245 | 246 | 1
278 | 279 | 1
308 | 309 | 1
309 | 310 | 2
350 | 351 | 1
358 | 359 | 1
574 | 575 | 1
641 | 642 | 1
654 | 655 | 1
(10 rows)
SELECT
l_partkey, l_suppkey, count(*)
FROM
lineitem, part_append, supplier
WHERE
l_partkey = p_partkey
AND (int4eq(l_suppkey, s_suppkey) OR random() > 2)
GROUP BY
l_partkey, l_suppkey
ORDER BY
l_partkey, l_suppkey
LIMIT 10;
LOG: join order: [ "lineitem" ][ reference join "supplier" ][ single range partition join "part_append" ]
DEBUG: push down of limit count: 10
l_partkey | l_suppkey | count
-----------+-----------+-------
195 | 196 | 1
245 | 246 | 1
278 | 279 | 1
308 | 309 | 1
309 | 310 | 2
350 | 351 | 1
358 | 359 | 1
574 | 575 | 1
641 | 642 | 1
654 | 655 | 1
(10 rows)
SELECT
l_partkey, l_suppkey, count(*)
FROM
lineitem, part_append, supplier
WHERE
l_partkey = p_partkey
AND (l_suppkey = 1 OR s_suppkey = 1)
GROUP BY
l_partkey, l_suppkey
ORDER BY
l_partkey, l_suppkey
LIMIT 10;
LOG: join order: [ "lineitem" ][ reference join "supplier" ][ single range partition join "part_append" ]
DEBUG: push down of limit count: 10
l_partkey | l_suppkey | count
-----------+-----------+-------
18 | 7519 | 1
79 | 7580 | 1
91 | 2592 | 1
149 | 5150 | 1
149 | 7650 | 1
175 | 5176 | 1
179 | 2680 | 1
182 | 7683 | 1
195 | 196 | 1
204 | 7705 | 1
(10 rows)
SELECT
l_partkey, l_suppkey, count(*)
FROM
lineitem, part_append, supplier
WHERE
l_partkey = p_partkey
AND l_partkey + p_partkey = s_suppkey
GROUP BY
l_partkey, l_suppkey
ORDER BY
l_partkey, l_suppkey
LIMIT 10;
LOG: join order: [ "lineitem" ][ single range partition join "part_append" ][ reference join "supplier" ]
DEBUG: push down of limit count: 10
l_partkey | l_suppkey | count
-----------+-----------+-------
18 | 7519 | 1
79 | 7580 | 1
91 | 2592 | 1
149 | 5150 | 1
149 | 7650 | 1
175 | 5176 | 1
179 | 2680 | 1
182 | 7683 | 1
195 | 196 | 1
204 | 7705 | 1
(10 rows)

View File

@ -112,7 +112,7 @@ test: multi_join_order_tpch_repartition
# new shards before these tests, as they expect specific shard identifiers in
# the output.
# ----------
test: multi_repartition_join_planning multi_repartition_join_pruning multi_repartition_join_task_assignment
test: multi_repartition_join_planning multi_repartition_join_pruning multi_repartition_join_task_assignment multi_repartition_join_ref
test: adaptive_executor_repartition
# ---------

View File

@ -0,0 +1,105 @@
SET citus.log_multi_join_order to TRUE;
SET client_min_messages to DEBUG1;
SET citus.enable_repartition_joins to on;
SELECT
l_partkey, l_suppkey, count(*)
FROM
lineitem, part_append, supplier
WHERE
l_partkey = p_partkey
AND l_suppkey < s_suppkey
GROUP BY
l_partkey, l_suppkey
ORDER BY
l_partkey, l_suppkey
LIMIT 10;
SELECT
l_partkey, l_suppkey, count(*)
FROM
lineitem, part_append, supplier
WHERE
l_partkey = p_partkey
AND int4eq(l_suppkey, s_suppkey)
GROUP BY
l_partkey, l_suppkey
ORDER BY
l_partkey, l_suppkey
LIMIT 10;
SELECT
l_partkey, l_suppkey, count(*)
FROM
lineitem, part_append, supplier
WHERE
l_partkey = p_partkey
AND NOT int4ne(l_suppkey, s_suppkey)
GROUP BY
l_partkey, l_suppkey
ORDER BY
l_partkey, l_suppkey
LIMIT 10;
SELECT
l_partkey, l_suppkey, count(*)
FROM
lineitem, part_append, supplier
WHERE
l_partkey = p_partkey
GROUP BY
l_partkey, l_suppkey
ORDER BY
l_partkey, l_suppkey
LIMIT 10;
SELECT
l_partkey, l_suppkey, count(*)
FROM
lineitem, part_append, supplier
WHERE
l_partkey = p_partkey
AND (int4eq(l_suppkey, s_suppkey) OR l_suppkey = s_suppkey)
GROUP BY
l_partkey, l_suppkey
ORDER BY
l_partkey, l_suppkey
LIMIT 10;
SELECT
l_partkey, l_suppkey, count(*)
FROM
lineitem, part_append, supplier
WHERE
l_partkey = p_partkey
AND (int4eq(l_suppkey, s_suppkey) OR random() > 2)
GROUP BY
l_partkey, l_suppkey
ORDER BY
l_partkey, l_suppkey
LIMIT 10;
SELECT
l_partkey, l_suppkey, count(*)
FROM
lineitem, part_append, supplier
WHERE
l_partkey = p_partkey
AND (l_suppkey = 1 OR s_suppkey = 1)
GROUP BY
l_partkey, l_suppkey
ORDER BY
l_partkey, l_suppkey
LIMIT 10;
SELECT
l_partkey, l_suppkey, count(*)
FROM
lineitem, part_append, supplier
WHERE
l_partkey = p_partkey
AND l_partkey + p_partkey = s_suppkey
GROUP BY
l_partkey, l_suppkey
ORDER BY
l_partkey, l_suppkey
LIMIT 10;