mirror of https://github.com/citusdata/citus.git
91 lines
2.0 KiB
SQL
91 lines
2.0 KiB
SQL
CREATE SCHEMA multi_column_distribution;
|
|
SET search_path TO multi_column_distribution;
|
|
SET citus.shard_count TO 4;
|
|
SET citus.shard_replication_factor TO 1;
|
|
SET citus.next_shard_id TO 27905500;
|
|
ALTER SEQUENCE pg_catalog.pg_dist_colocationid_seq RESTART 27905500;
|
|
|
|
create table t(id int, a int);
|
|
select create_distributed_table('t', ARRAY['id'], colocate_with := 'none');
|
|
select * from pg_dist_partition WHERE NOT (logicalrelid::text LIKE '%.%');
|
|
|
|
create table t2(id int, id2 int, a int);
|
|
select create_distributed_table('t2', ARRAY['id', 'id2'], colocate_with := 'none');
|
|
select * from pg_dist_partition WHERE NOT (logicalrelid::text LIKE '%.%');
|
|
|
|
INSERT INTO t2 VALUES
|
|
(1, 1, 1),
|
|
(1, 1, 2),
|
|
(1, 1, 4),
|
|
(2, 3, 4),
|
|
(2, 3, 5),
|
|
(2, 4, 5)
|
|
;
|
|
|
|
-- partitioning by both distribution columns pushes the window function down
|
|
SELECT id, id2, a, rnk FROM
|
|
(
|
|
SELECT
|
|
DISTINCT id, id2, a, rank() OVER (PARTITION BY id, id2 ORDER BY a) as rnk
|
|
FROM
|
|
t2
|
|
) as foo
|
|
ORDER BY
|
|
rnk, id, id2, a;
|
|
|
|
EXPLAIN SELECT id, id2, a, rnk FROM
|
|
(
|
|
SELECT
|
|
DISTINCT id, id2, a, rank() OVER (PARTITION BY id, id2 ORDER BY a) as rnk
|
|
FROM
|
|
t2
|
|
) as foo
|
|
ORDER BY
|
|
rnk, id, id2, a;
|
|
|
|
-- partitioning by one of the distribution causes the window function not to be
|
|
-- pushed down.
|
|
SELECT id, id2, a, rnk FROM
|
|
(
|
|
SELECT
|
|
DISTINCT id, id2, a, rank() OVER (PARTITION BY id ORDER BY a) as rnk
|
|
FROM
|
|
t2
|
|
) as foo
|
|
ORDER BY
|
|
rnk, id, id2, a;
|
|
|
|
EXPLAIN SELECT id, id2, a, rnk FROM
|
|
(
|
|
SELECT
|
|
DISTINCT id, id2, a, rank() OVER (PARTITION BY id ORDER BY a) as rnk
|
|
FROM
|
|
t2
|
|
) as foo
|
|
ORDER BY
|
|
rnk, id, id2, a;
|
|
|
|
SELECT id, id2, a, rnk FROM
|
|
(
|
|
SELECT
|
|
DISTINCT id, id2, a, rank() OVER (PARTITION BY id2 ORDER BY a) as rnk
|
|
FROM
|
|
t2
|
|
) as foo
|
|
ORDER BY
|
|
rnk, id, id2, a;
|
|
|
|
EXPLAIN SELECT id, id2, a, rnk FROM
|
|
(
|
|
SELECT
|
|
DISTINCT id, id2, a, rank() OVER (PARTITION BY id2 ORDER BY a) as rnk
|
|
FROM
|
|
t2
|
|
) as foo
|
|
ORDER BY
|
|
rnk, id, id2, a;
|
|
|
|
|
|
SET client_min_messages TO WARNING;
|
|
DROP SCHEMA multi_column_distribution CASCADE;
|