mirror of https://github.com/citusdata/citus.git
210 lines
8.5 KiB
Plaintext
210 lines
8.5 KiB
Plaintext
CREATE SCHEMA partition_wise_join;
|
|
SET search_path to partition_wise_join;
|
|
SET citus.next_shard_id TO 360147;
|
|
CREATE TABLE partitioning_hash_test(id int, subid int) PARTITION BY HASH(subid);
|
|
CREATE TABLE partitioning_hash_test_0 PARTITION OF partitioning_hash_test FOR VALUES WITH (MODULUS 3, REMAINDER 0);
|
|
CREATE TABLE partitioning_hash_test_1 PARTITION OF partitioning_hash_test FOR VALUES WITH (MODULUS 3, REMAINDER 1);
|
|
INSERT INTO partitioning_hash_test VALUES (1, 2);
|
|
INSERT INTO partitioning_hash_test VALUES (2, 13);
|
|
INSERT INTO partitioning_hash_test VALUES (3, 7);
|
|
INSERT INTO partitioning_hash_test VALUES (4, 4);
|
|
-- distribute partitioned table
|
|
SELECT create_distributed_table('partitioning_hash_test', 'id');
|
|
NOTICE: Copying data from local table...
|
|
NOTICE: copying the data has completed
|
|
DETAIL: The local data in the table is no longer visible, but is still on disk.
|
|
HINT: To remove the local data, run: SELECT truncate_local_data_after_distributing_table($$partition_wise_join.partitioning_hash_test_0$$)
|
|
NOTICE: Copying data from local table...
|
|
NOTICE: copying the data has completed
|
|
DETAIL: The local data in the table is no longer visible, but is still on disk.
|
|
HINT: To remove the local data, run: SELECT truncate_local_data_after_distributing_table($$partition_wise_join.partitioning_hash_test_1$$)
|
|
create_distributed_table
|
|
---------------------------------------------------------------------
|
|
|
|
(1 row)
|
|
|
|
-- test partition-wise join
|
|
CREATE TABLE partitioning_hash_join_test(id int, subid int) PARTITION BY HASH(subid);
|
|
CREATE TABLE partitioning_hash_join_test_0 PARTITION OF partitioning_hash_join_test FOR VALUES WITH (MODULUS 3, REMAINDER 0);
|
|
CREATE TABLE partitioning_hash_join_test_1 PARTITION OF partitioning_hash_join_test FOR VALUES WITH (MODULUS 3, REMAINDER 1);
|
|
CREATE TABLE partitioning_hash_join_test_2 PARTITION OF partitioning_hash_join_test FOR VALUES WITH (MODULUS 3, REMAINDER 2);
|
|
SELECT create_distributed_table('partitioning_hash_join_test', 'id');
|
|
create_distributed_table
|
|
---------------------------------------------------------------------
|
|
|
|
(1 row)
|
|
|
|
SELECT success FROM run_command_on_workers('alter system set enable_mergejoin to off');
|
|
success
|
|
---------------------------------------------------------------------
|
|
t
|
|
t
|
|
(2 rows)
|
|
|
|
SELECT success FROM run_command_on_workers('alter system set enable_nestloop to off');
|
|
success
|
|
---------------------------------------------------------------------
|
|
t
|
|
t
|
|
(2 rows)
|
|
|
|
SELECT success FROM run_command_on_workers('alter system set enable_indexscan to off');
|
|
success
|
|
---------------------------------------------------------------------
|
|
t
|
|
t
|
|
(2 rows)
|
|
|
|
SELECT success FROM run_command_on_workers('alter system set enable_indexonlyscan to off');
|
|
success
|
|
---------------------------------------------------------------------
|
|
t
|
|
t
|
|
(2 rows)
|
|
|
|
SELECT success FROM run_command_on_workers('alter system set enable_partitionwise_join to off');
|
|
success
|
|
---------------------------------------------------------------------
|
|
t
|
|
t
|
|
(2 rows)
|
|
|
|
SELECT success FROM run_command_on_workers('select pg_reload_conf()');
|
|
success
|
|
---------------------------------------------------------------------
|
|
t
|
|
t
|
|
(2 rows)
|
|
|
|
EXPLAIN (COSTS OFF)
|
|
SELECT * FROM partitioning_hash_test JOIN partitioning_hash_join_test USING (id, subid);
|
|
QUERY PLAN
|
|
---------------------------------------------------------------------
|
|
Custom Scan (Citus Adaptive)
|
|
Task Count: 4
|
|
Tasks Shown: One of 4
|
|
-> Task
|
|
Node: host=localhost port=xxxxx dbname=regression
|
|
-> Hash Join
|
|
Hash Cond: ((partitioning_hash_join_test.id = partitioning_hash_test.id) AND (partitioning_hash_join_test.subid = partitioning_hash_test.subid))
|
|
-> Append
|
|
-> Seq Scan on partitioning_hash_join_test_0_360163 partitioning_hash_join_test_1
|
|
-> Seq Scan on partitioning_hash_join_test_1_360167 partitioning_hash_join_test_2
|
|
-> Seq Scan on partitioning_hash_join_test_2_360171 partitioning_hash_join_test_3
|
|
-> Hash
|
|
-> Append
|
|
-> Seq Scan on partitioning_hash_test_0_360151 partitioning_hash_test_1
|
|
-> Seq Scan on partitioning_hash_test_1_360155 partitioning_hash_test_2
|
|
(15 rows)
|
|
|
|
-- set partition-wise join on and parallel to off
|
|
SELECT success FROM run_command_on_workers('alter system set enable_partitionwise_join to on');
|
|
success
|
|
---------------------------------------------------------------------
|
|
t
|
|
t
|
|
(2 rows)
|
|
|
|
SELECT success FROM run_command_on_workers('select pg_reload_conf()');
|
|
success
|
|
---------------------------------------------------------------------
|
|
t
|
|
t
|
|
(2 rows)
|
|
|
|
-- SET enable_partitionwise_join TO on;
|
|
ANALYZE partitioning_hash_test, partitioning_hash_join_test;
|
|
EXPLAIN (COSTS OFF)
|
|
SELECT * FROM partitioning_hash_test JOIN partitioning_hash_join_test USING (id, subid);
|
|
QUERY PLAN
|
|
---------------------------------------------------------------------
|
|
Custom Scan (Citus Adaptive)
|
|
Task Count: 4
|
|
Tasks Shown: One of 4
|
|
-> Task
|
|
Node: host=localhost port=xxxxx dbname=regression
|
|
-> Hash Join
|
|
Hash Cond: ((partitioning_hash_join_test.id = partitioning_hash_test.id) AND (partitioning_hash_join_test.subid = partitioning_hash_test.subid))
|
|
-> Append
|
|
-> Seq Scan on partitioning_hash_join_test_0_360163 partitioning_hash_join_test_1
|
|
-> Seq Scan on partitioning_hash_join_test_1_360167 partitioning_hash_join_test_2
|
|
-> Seq Scan on partitioning_hash_join_test_2_360171 partitioning_hash_join_test_3
|
|
-> Hash
|
|
-> Append
|
|
-> Seq Scan on partitioning_hash_test_0_360151 partitioning_hash_test_1
|
|
-> Seq Scan on partitioning_hash_test_1_360155 partitioning_hash_test_2
|
|
(15 rows)
|
|
|
|
-- note that partition-wise joins only work when partition key is in the join
|
|
-- following join does not have that, therefore join will not be pushed down to
|
|
-- partitions
|
|
EXPLAIN (COSTS OFF)
|
|
SELECT * FROM partitioning_hash_test JOIN partitioning_hash_join_test USING (id);
|
|
QUERY PLAN
|
|
---------------------------------------------------------------------
|
|
Custom Scan (Citus Adaptive)
|
|
Task Count: 4
|
|
Tasks Shown: One of 4
|
|
-> Task
|
|
Node: host=localhost port=xxxxx dbname=regression
|
|
-> Hash Join
|
|
Hash Cond: (partitioning_hash_join_test.id = partitioning_hash_test.id)
|
|
-> Append
|
|
-> Seq Scan on partitioning_hash_join_test_0_360163 partitioning_hash_join_test_1
|
|
-> Seq Scan on partitioning_hash_join_test_1_360167 partitioning_hash_join_test_2
|
|
-> Seq Scan on partitioning_hash_join_test_2_360171 partitioning_hash_join_test_3
|
|
-> Hash
|
|
-> Append
|
|
-> Seq Scan on partitioning_hash_test_0_360151 partitioning_hash_test_1
|
|
-> Seq Scan on partitioning_hash_test_1_360155 partitioning_hash_test_2
|
|
(15 rows)
|
|
|
|
-- reset partition-wise join
|
|
SELECT success FROM run_command_on_workers('alter system reset enable_partitionwise_join');
|
|
success
|
|
---------------------------------------------------------------------
|
|
t
|
|
t
|
|
(2 rows)
|
|
|
|
SELECT success FROM run_command_on_workers('alter system reset enable_mergejoin');
|
|
success
|
|
---------------------------------------------------------------------
|
|
t
|
|
t
|
|
(2 rows)
|
|
|
|
SELECT success FROM run_command_on_workers('alter system reset enable_nestloop');
|
|
success
|
|
---------------------------------------------------------------------
|
|
t
|
|
t
|
|
(2 rows)
|
|
|
|
SELECT success FROM run_command_on_workers('alter system reset enable_indexscan');
|
|
success
|
|
---------------------------------------------------------------------
|
|
t
|
|
t
|
|
(2 rows)
|
|
|
|
SELECT success FROM run_command_on_workers('alter system reset enable_indexonlyscan');
|
|
success
|
|
---------------------------------------------------------------------
|
|
t
|
|
t
|
|
(2 rows)
|
|
|
|
SELECT success FROM run_command_on_workers('select pg_reload_conf()');
|
|
success
|
|
---------------------------------------------------------------------
|
|
t
|
|
t
|
|
(2 rows)
|
|
|
|
RESET enable_partitionwise_join;
|
|
DROP SCHEMA partition_wise_join CASCADE;
|
|
NOTICE: drop cascades to 2 other objects
|
|
DETAIL: drop cascades to table partitioning_hash_test
|
|
drop cascades to table partitioning_hash_join_test
|