mirror of https://github.com/citusdata/citus.git
Add tests for complex joins on reference tables
parent
3a042e4611
commit
cf88bdf833
|
@ -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)
|
||||||
|
|
|
@ -112,7 +112,7 @@ test: multi_join_order_tpch_repartition
|
||||||
# new shards before these tests, as they expect specific shard identifiers in
|
# new shards before these tests, as they expect specific shard identifiers in
|
||||||
# the output.
|
# 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
|
test: adaptive_executor_repartition
|
||||||
|
|
||||||
# ---------
|
# ---------
|
||||||
|
|
|
@ -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;
|
Loading…
Reference in New Issue