mirror of https://github.com/citusdata/citus.git
Merge pull request #5356 from citusdata/marcocitus/remove-append-2
Reduce reliance on append tables in regression testspull/5296/head
commit
09a070221a
|
@ -11,7 +11,6 @@
|
||||||
/multi_complex_count_distinct.out
|
/multi_complex_count_distinct.out
|
||||||
/multi_copy.out
|
/multi_copy.out
|
||||||
/multi_create_schema.out
|
/multi_create_schema.out
|
||||||
/multi_large_shardid.out
|
|
||||||
/multi_load_data.out
|
/multi_load_data.out
|
||||||
/multi_load_data_superuser.out
|
/multi_load_data_superuser.out
|
||||||
/multi_load_large_records.out
|
/multi_load_large_records.out
|
||||||
|
|
|
@ -48,13 +48,13 @@ HAVING (
|
||||||
-> Task
|
-> Task
|
||||||
Node: host=localhost port=xxxxx dbname=regression
|
Node: host=localhost port=xxxxx dbname=regression
|
||||||
-> Aggregate
|
-> Aggregate
|
||||||
-> Seq Scan on customer_360001 customer
|
-> Seq Scan on customer_360005 customer
|
||||||
Task Count: 2
|
Task Count: 2
|
||||||
Tasks Shown: One of 2
|
Tasks Shown: One of 2
|
||||||
-> Task
|
-> Task
|
||||||
Node: host=localhost port=xxxxx dbname=regression
|
Node: host=localhost port=xxxxx dbname=regression
|
||||||
-> HashAggregate
|
-> HashAggregate
|
||||||
Group Key: orders.o_orderstatus
|
Group Key: orders.o_orderstatus
|
||||||
-> Seq Scan on orders_290002 orders
|
-> Seq Scan on orders_360002 orders
|
||||||
(23 rows)
|
(23 rows)
|
||||||
|
|
||||||
|
|
|
@ -185,26 +185,26 @@ SELECT l_returnflag, count(DISTINCT l_shipdate) as count_distinct, count(*) as t
|
||||||
(3 rows)
|
(3 rows)
|
||||||
|
|
||||||
SELECT
|
SELECT
|
||||||
l_orderkey,
|
l_partkey,
|
||||||
count(l_partkey) FILTER (WHERE l_shipmode = 'AIR'),
|
count(l_partkey) FILTER (WHERE l_shipmode = 'AIR'),
|
||||||
count(DISTINCT l_partkey) FILTER (WHERE l_shipmode = 'AIR'),
|
count(DISTINCT l_partkey) FILTER (WHERE l_shipmode = 'AIR'),
|
||||||
count(DISTINCT CASE WHEN l_shipmode = 'AIR' THEN l_partkey ELSE NULL END)
|
count(DISTINCT CASE WHEN l_shipmode = 'AIR' THEN l_partkey ELSE NULL END)
|
||||||
FROM lineitem
|
FROM lineitem
|
||||||
GROUP BY l_orderkey
|
GROUP BY l_partkey
|
||||||
ORDER BY 2 DESC, 1 DESC
|
ORDER BY 2 DESC, 1 DESC
|
||||||
LIMIT 10;
|
LIMIT 10;
|
||||||
l_orderkey | count | count | count
|
l_partkey | count | count | count
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
12005 | 4 | 4 | 4
|
147722 | 2 | 1 | 1
|
||||||
5409 | 4 | 4 | 4
|
87191 | 2 | 1 | 1
|
||||||
4964 | 4 | 4 | 4
|
78600 | 2 | 1 | 1
|
||||||
14848 | 3 | 3 | 3
|
1927 | 2 | 1 | 1
|
||||||
14496 | 3 | 3 | 3
|
199943 | 1 | 1 | 1
|
||||||
13473 | 3 | 3 | 3
|
199929 | 1 | 1 | 1
|
||||||
13122 | 3 | 3 | 3
|
199810 | 1 | 1 | 1
|
||||||
12929 | 3 | 3 | 3
|
199792 | 1 | 1 | 1
|
||||||
12645 | 3 | 3 | 3
|
199716 | 1 | 1 | 1
|
||||||
12417 | 3 | 3 | 3
|
199699 | 1 | 1 | 1
|
||||||
(10 rows)
|
(10 rows)
|
||||||
|
|
||||||
-- Check that we can revert config and disable count(distinct) approximations
|
-- Check that we can revert config and disable count(distinct) approximations
|
||||||
|
|
|
@ -143,12 +143,12 @@ SELECT l_returnflag, count(DISTINCT l_shipdate) as count_distinct, count(*) as t
|
||||||
ERROR: cannot compute count (distinct) approximation
|
ERROR: cannot compute count (distinct) approximation
|
||||||
HINT: You need to have the hll extension loaded.
|
HINT: You need to have the hll extension loaded.
|
||||||
SELECT
|
SELECT
|
||||||
l_orderkey,
|
l_partkey,
|
||||||
count(l_partkey) FILTER (WHERE l_shipmode = 'AIR'),
|
count(l_partkey) FILTER (WHERE l_shipmode = 'AIR'),
|
||||||
count(DISTINCT l_partkey) FILTER (WHERE l_shipmode = 'AIR'),
|
count(DISTINCT l_partkey) FILTER (WHERE l_shipmode = 'AIR'),
|
||||||
count(DISTINCT CASE WHEN l_shipmode = 'AIR' THEN l_partkey ELSE NULL END)
|
count(DISTINCT CASE WHEN l_shipmode = 'AIR' THEN l_partkey ELSE NULL END)
|
||||||
FROM lineitem
|
FROM lineitem
|
||||||
GROUP BY l_orderkey
|
GROUP BY l_partkey
|
||||||
ORDER BY 2 DESC, 1 DESC
|
ORDER BY 2 DESC, 1 DESC
|
||||||
LIMIT 10;
|
LIMIT 10;
|
||||||
ERROR: cannot compute count (distinct) approximation
|
ERROR: cannot compute count (distinct) approximation
|
||||||
|
|
|
@ -3,11 +3,18 @@
|
||||||
--
|
--
|
||||||
SET citus.next_shard_id TO 520000;
|
SET citus.next_shard_id TO 520000;
|
||||||
SET citus.coordinator_aggregation_strategy TO 'disabled';
|
SET citus.coordinator_aggregation_strategy TO 'disabled';
|
||||||
|
SELECT run_command_on_master_and_workers($r$
|
||||||
CREATE OR REPLACE FUNCTION array_sort (ANYARRAY)
|
CREATE OR REPLACE FUNCTION array_sort (ANYARRAY)
|
||||||
RETURNS ANYARRAY LANGUAGE SQL
|
RETURNS ANYARRAY LANGUAGE SQL
|
||||||
AS $$
|
AS $$
|
||||||
SELECT ARRAY(SELECT unnest($1) ORDER BY 1)
|
SELECT ARRAY(SELECT unnest($1) ORDER BY 1)
|
||||||
$$;
|
$$;
|
||||||
|
$r$);
|
||||||
|
run_command_on_master_and_workers
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
|
||||||
|
(1 row)
|
||||||
|
|
||||||
-- Check multi_cat_agg() aggregate which is used to implement array_agg()
|
-- Check multi_cat_agg() aggregate which is used to implement array_agg()
|
||||||
SELECT array_cat_agg(i) FROM (VALUES (ARRAY[1,2]), (NULL), (ARRAY[3,4])) AS t(i);
|
SELECT array_cat_agg(i) FROM (VALUES (ARRAY[1,2]), (NULL), (ARRAY[3,4])) AS t(i);
|
||||||
array_cat_agg
|
array_cat_agg
|
||||||
|
@ -132,17 +139,18 @@ SELECT l_quantity, array_sort(array_agg(l_orderkey * 2 + 1)) FROM lineitem WHERE
|
||||||
(4 rows)
|
(4 rows)
|
||||||
|
|
||||||
-- Check that we can execute array_agg() with an expression containing NULL values
|
-- Check that we can execute array_agg() with an expression containing NULL values
|
||||||
SELECT array_agg(case when l_quantity > 20 then l_quantity else NULL end)
|
SELECT array_sort(array_agg(case when l_quantity > 20 then l_quantity else NULL end))
|
||||||
FROM lineitem WHERE l_orderkey < 10;
|
FROM lineitem WHERE l_orderkey < 10;
|
||||||
array_agg
|
array_sort
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
{NULL,36.00,NULL,28.00,24.00,32.00,38.00,45.00,49.00,27.00,NULL,28.00,26.00,30.00,NULL,26.00,50.00,37.00,NULL,NULL,46.00,28.00,38.00,35.00,NULL}
|
{24.00,26.00,26.00,27.00,28.00,28.00,28.00,30.00,32.00,35.00,36.00,37.00,38.00,38.00,45.00,46.00,49.00,50.00,NULL,NULL,NULL,NULL,NULL,NULL,NULL}
|
||||||
(1 row)
|
(1 row)
|
||||||
|
|
||||||
-- Check that we return NULL in case there are no input rows to array_agg()
|
-- Check that we return NULL in case there are no input rows to array_agg()
|
||||||
SELECT array_agg(l_orderkey) FROM lineitem WHERE l_quantity < 0;
|
SELECT array_sort(array_agg(l_orderkey))
|
||||||
array_agg
|
FROM lineitem WHERE l_orderkey < 0;
|
||||||
|
array_sort
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
|
{}
|
||||||
(1 row)
|
(1 row)
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
-- Create new table definitions for use in testing in distributed planning and
|
-- Create new table definitions for use in testing in distributed planning and
|
||||||
-- execution functionality. Also create indexes to boost performance. Since we
|
-- execution functionality. Also create indexes to boost performance. Since we
|
||||||
-- need to cover both reference join and partitioned join, we have created
|
-- need to cover both reference join and partitioned join, we have created
|
||||||
-- reference and append distributed version of orders, customer and part tables.
|
-- reference and hash-distributed version of orders, customer and part tables.
|
||||||
SET citus.next_shard_id TO 360000;
|
SET citus.next_shard_id TO 360000;
|
||||||
-- this function is dropped in Citus10, added here for tests
|
-- this function is dropped in Citus10, added here for tests
|
||||||
CREATE OR REPLACE FUNCTION pg_catalog.master_create_distributed_table(table_name regclass,
|
CREATE OR REPLACE FUNCTION pg_catalog.master_create_distributed_table(table_name regclass,
|
||||||
|
@ -41,10 +41,7 @@ CREATE TABLE lineitem (
|
||||||
l_shipmode char(10) not null,
|
l_shipmode char(10) not null,
|
||||||
l_comment varchar(44) not null,
|
l_comment varchar(44) not null,
|
||||||
PRIMARY KEY(l_orderkey, l_linenumber) );
|
PRIMARY KEY(l_orderkey, l_linenumber) );
|
||||||
SELECT create_distributed_table('lineitem', 'l_orderkey', 'append');
|
SELECT create_distributed_table('lineitem', 'l_orderkey', 'hash', shard_count := 2);
|
||||||
WARNING: table "lineitem" has a UNIQUE or EXCLUDE constraint
|
|
||||||
DETAIL: UNIQUE constraints, EXCLUDE constraints, and PRIMARY KEYs on append-partitioned tables cannot be enforced.
|
|
||||||
HINT: Consider using hash partitioning.
|
|
||||||
create_distributed_table
|
create_distributed_table
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -62,10 +59,7 @@ CREATE TABLE orders (
|
||||||
o_shippriority integer not null,
|
o_shippriority integer not null,
|
||||||
o_comment varchar(79) not null,
|
o_comment varchar(79) not null,
|
||||||
PRIMARY KEY(o_orderkey) );
|
PRIMARY KEY(o_orderkey) );
|
||||||
SELECT create_distributed_table('orders', 'o_orderkey', 'append');
|
SELECT create_distributed_table('orders', 'o_orderkey', 'hash', colocate_with := 'lineitem');
|
||||||
WARNING: table "orders" has a UNIQUE or EXCLUDE constraint
|
|
||||||
DETAIL: UNIQUE constraints, EXCLUDE constraints, and PRIMARY KEYs on append-partitioned tables cannot be enforced.
|
|
||||||
HINT: Consider using hash partitioning.
|
|
||||||
create_distributed_table
|
create_distributed_table
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -189,14 +183,14 @@ CREATE TABLE supplier_single_shard
|
||||||
s_acctbal decimal(15,2) not null,
|
s_acctbal decimal(15,2) not null,
|
||||||
s_comment varchar(101) not null
|
s_comment varchar(101) not null
|
||||||
);
|
);
|
||||||
SELECT create_distributed_table('supplier_single_shard', 's_suppkey', 'append');
|
SELECT create_distributed_table('supplier_single_shard', 's_suppkey', 'hash', shard_count := 1);
|
||||||
create_distributed_table
|
create_distributed_table
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
|
|
||||||
(1 row)
|
(1 row)
|
||||||
|
|
||||||
CREATE TABLE mx_table_test (col1 int, col2 text);
|
CREATE TABLE mx_table_test (col1 int, col2 text);
|
||||||
SET citus.next_shard_id TO 360009;
|
SET citus.next_shard_id TO 360013;
|
||||||
-- Test initial data loading
|
-- Test initial data loading
|
||||||
CREATE TABLE data_load_test (col1 int, col2 text, col3 serial);
|
CREATE TABLE data_load_test (col1 int, col2 text, col3 serial);
|
||||||
INSERT INTO data_load_test VALUES (132, 'hello');
|
INSERT INTO data_load_test VALUES (132, 'hello');
|
||||||
|
|
|
@ -47,7 +47,7 @@ Sort
|
||||||
Node: host=localhost port=xxxxx dbname=regression
|
Node: host=localhost port=xxxxx dbname=regression
|
||||||
-> HashAggregate
|
-> HashAggregate
|
||||||
Group Key: l_quantity
|
Group Key: l_quantity
|
||||||
-> Seq Scan on lineitem_290000 lineitem
|
-> Seq Scan on lineitem_360000 lineitem
|
||||||
-- Test disable hash aggregate
|
-- Test disable hash aggregate
|
||||||
SET enable_hashagg TO off;
|
SET enable_hashagg TO off;
|
||||||
EXPLAIN (COSTS FALSE, FORMAT TEXT)
|
EXPLAIN (COSTS FALSE, FORMAT TEXT)
|
||||||
|
@ -66,7 +66,7 @@ Sort
|
||||||
Node: host=localhost port=xxxxx dbname=regression
|
Node: host=localhost port=xxxxx dbname=regression
|
||||||
-> HashAggregate
|
-> HashAggregate
|
||||||
Group Key: l_quantity
|
Group Key: l_quantity
|
||||||
-> Seq Scan on lineitem_290000 lineitem
|
-> Seq Scan on lineitem_360000 lineitem
|
||||||
SET enable_hashagg TO on;
|
SET enable_hashagg TO on;
|
||||||
-- Test JSON format
|
-- Test JSON format
|
||||||
EXPLAIN (COSTS FALSE, FORMAT JSON)
|
EXPLAIN (COSTS FALSE, FORMAT JSON)
|
||||||
|
@ -110,7 +110,7 @@ EXPLAIN (COSTS FALSE, FORMAT JSON)
|
||||||
{
|
{
|
||||||
"Node Type": "Seq Scan",
|
"Node Type": "Seq Scan",
|
||||||
"Parallel Aware": false,
|
"Parallel Aware": false,
|
||||||
"Relation Name": "lineitem_290000",
|
"Relation Name": "lineitem_360000",
|
||||||
"Alias": "lineitem"
|
"Alias": "lineitem"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
@ -184,7 +184,7 @@ EXPLAIN (COSTS FALSE, FORMAT XML)
|
||||||
<Plan>
|
<Plan>
|
||||||
<Node-Type>Seq Scan</Node-Type>
|
<Node-Type>Seq Scan</Node-Type>
|
||||||
<Parallel-Aware>false</Parallel-Aware>
|
<Parallel-Aware>false</Parallel-Aware>
|
||||||
<Relation-Name>lineitem_290000</Relation-Name>
|
<Relation-Name>lineitem_360000</Relation-Name>
|
||||||
<Alias>lineitem</Alias>
|
<Alias>lineitem</Alias>
|
||||||
</Plan>
|
</Plan>
|
||||||
</Plans>
|
</Plans>
|
||||||
|
@ -246,7 +246,7 @@ EXPLAIN (COSTS FALSE, FORMAT YAML)
|
||||||
Plans:
|
Plans:
|
||||||
- Node Type: "Seq Scan"
|
- Node Type: "Seq Scan"
|
||||||
Parallel Aware: false
|
Parallel Aware: false
|
||||||
Relation Name: "lineitem_290000"
|
Relation Name: "lineitem_360000"
|
||||||
Alias: "lineitem"
|
Alias: "lineitem"
|
||||||
|
|
||||||
-- Test Text format
|
-- Test Text format
|
||||||
|
@ -264,7 +264,7 @@ Sort
|
||||||
Node: host=localhost port=xxxxx dbname=regression
|
Node: host=localhost port=xxxxx dbname=regression
|
||||||
-> HashAggregate
|
-> HashAggregate
|
||||||
Group Key: l_quantity
|
Group Key: l_quantity
|
||||||
-> Seq Scan on lineitem_290000 lineitem
|
-> Seq Scan on lineitem_360000 lineitem
|
||||||
-- Test analyze (with TIMING FALSE and SUMMARY FALSE for consistent output)
|
-- Test analyze (with TIMING FALSE and SUMMARY FALSE for consistent output)
|
||||||
EXPLAIN (COSTS FALSE, ANALYZE TRUE, TIMING FALSE, SUMMARY FALSE)
|
EXPLAIN (COSTS FALSE, ANALYZE TRUE, TIMING FALSE, SUMMARY FALSE)
|
||||||
SELECT l_quantity, count(*) count_quantity FROM lineitem
|
SELECT l_quantity, count(*) count_quantity FROM lineitem
|
||||||
|
@ -283,7 +283,7 @@ Sort (actual rows=50 loops=1)
|
||||||
Node: host=localhost port=xxxxx dbname=regression
|
Node: host=localhost port=xxxxx dbname=regression
|
||||||
-> HashAggregate (actual rows=50 loops=1)
|
-> HashAggregate (actual rows=50 loops=1)
|
||||||
Group Key: l_quantity
|
Group Key: l_quantity
|
||||||
-> Seq Scan on lineitem_290000 lineitem (actual rows=6000 loops=1)
|
-> Seq Scan on lineitem_360000 lineitem (actual rows=5894 loops=1)
|
||||||
-- EXPLAIN ANALYZE doesn't show worker tasks for repartition joins yet
|
-- EXPLAIN ANALYZE doesn't show worker tasks for repartition joins yet
|
||||||
SET citus.shard_count TO 3;
|
SET citus.shard_count TO 3;
|
||||||
CREATE TABLE t1(a int, b int);
|
CREATE TABLE t1(a int, b int);
|
||||||
|
@ -350,13 +350,13 @@ Sort (actual rows=50 loops=1)
|
||||||
Tuple data received from nodes: 1800 bytes
|
Tuple data received from nodes: 1800 bytes
|
||||||
Tasks Shown: One of 2
|
Tasks Shown: One of 2
|
||||||
-> Task
|
-> Task
|
||||||
Query: SELECT l_quantity, count(*) AS count_quantity FROM public.lineitem_290000 lineitem WHERE true GROUP BY l_quantity
|
Query: SELECT l_quantity, count(*) AS count_quantity FROM public.lineitem_360000 lineitem WHERE true GROUP BY l_quantity
|
||||||
Tuple data received from node: 900 bytes
|
Tuple data received from node: 900 bytes
|
||||||
Node: host=localhost port=xxxxx dbname=regression
|
Node: host=localhost port=xxxxx dbname=regression
|
||||||
-> HashAggregate (actual rows=50 loops=1)
|
-> HashAggregate (actual rows=50 loops=1)
|
||||||
Output: l_quantity, count(*)
|
Output: l_quantity, count(*)
|
||||||
Group Key: lineitem.l_quantity
|
Group Key: lineitem.l_quantity
|
||||||
-> Seq Scan on public.lineitem_290000 lineitem (actual rows=6000 loops=1)
|
-> Seq Scan on public.lineitem_360000 lineitem (actual rows=5894 loops=1)
|
||||||
Output: l_orderkey, l_partkey, l_suppkey, l_linenumber, l_quantity, l_extendedprice, l_discount, l_tax, l_returnflag, l_linestatus, l_shipdate, l_commitdate, l_receiptdate, l_shipinstruct, l_shipmode, l_comment
|
Output: l_orderkey, l_partkey, l_suppkey, l_linenumber, l_quantity, l_extendedprice, l_discount, l_tax, l_returnflag, l_linestatus, l_shipdate, l_commitdate, l_receiptdate, l_shipinstruct, l_shipmode, l_comment
|
||||||
-- Test query text output, with ANALYZE OFF
|
-- Test query text output, with ANALYZE OFF
|
||||||
EXPLAIN (COSTS FALSE, ANALYZE FALSE, TIMING FALSE, SUMMARY FALSE, VERBOSE TRUE)
|
EXPLAIN (COSTS FALSE, ANALYZE FALSE, TIMING FALSE, SUMMARY FALSE, VERBOSE TRUE)
|
||||||
|
@ -373,12 +373,12 @@ Sort
|
||||||
Task Count: 2
|
Task Count: 2
|
||||||
Tasks Shown: One of 2
|
Tasks Shown: One of 2
|
||||||
-> Task
|
-> Task
|
||||||
Query: SELECT l_quantity, count(*) AS count_quantity FROM public.lineitem_290000 lineitem WHERE true GROUP BY l_quantity
|
Query: SELECT l_quantity, count(*) AS count_quantity FROM public.lineitem_360000 lineitem WHERE true GROUP BY l_quantity
|
||||||
Node: host=localhost port=xxxxx dbname=regression
|
Node: host=localhost port=xxxxx dbname=regression
|
||||||
-> HashAggregate
|
-> HashAggregate
|
||||||
Output: l_quantity, count(*)
|
Output: l_quantity, count(*)
|
||||||
Group Key: lineitem.l_quantity
|
Group Key: lineitem.l_quantity
|
||||||
-> Seq Scan on public.lineitem_290000 lineitem
|
-> Seq Scan on public.lineitem_360000 lineitem
|
||||||
Output: l_orderkey, l_partkey, l_suppkey, l_linenumber, l_quantity, l_extendedprice, l_discount, l_tax, l_returnflag, l_linestatus, l_shipdate, l_commitdate, l_receiptdate, l_shipinstruct, l_shipmode, l_comment
|
Output: l_orderkey, l_partkey, l_suppkey, l_linenumber, l_quantity, l_extendedprice, l_discount, l_tax, l_returnflag, l_linestatus, l_shipdate, l_commitdate, l_receiptdate, l_shipinstruct, l_shipmode, l_comment
|
||||||
-- Test verbose
|
-- Test verbose
|
||||||
EXPLAIN (COSTS FALSE, VERBOSE TRUE)
|
EXPLAIN (COSTS FALSE, VERBOSE TRUE)
|
||||||
|
@ -390,11 +390,11 @@ Aggregate
|
||||||
Task Count: 2
|
Task Count: 2
|
||||||
Tasks Shown: One of 2
|
Tasks Shown: One of 2
|
||||||
-> Task
|
-> Task
|
||||||
Query: SELECT sum(l_quantity), sum(l_quantity), count(l_quantity) FROM public.lineitem_290000 lineitem WHERE true
|
Query: SELECT sum(l_quantity), sum(l_quantity), count(l_quantity) FROM public.lineitem_360000 lineitem WHERE true
|
||||||
Node: host=localhost port=xxxxx dbname=regression
|
Node: host=localhost port=xxxxx dbname=regression
|
||||||
-> Aggregate
|
-> Aggregate
|
||||||
Output: sum(l_quantity), sum(l_quantity), count(l_quantity)
|
Output: sum(l_quantity), sum(l_quantity), count(l_quantity)
|
||||||
-> Seq Scan on public.lineitem_290000 lineitem
|
-> Seq Scan on public.lineitem_360000 lineitem
|
||||||
Output: l_orderkey, l_partkey, l_suppkey, l_linenumber, l_quantity, l_extendedprice, l_discount, l_tax, l_returnflag, l_linestatus, l_shipdate, l_commitdate, l_receiptdate, l_shipinstruct, l_shipmode, l_comment
|
Output: l_orderkey, l_partkey, l_suppkey, l_linenumber, l_quantity, l_extendedprice, l_discount, l_tax, l_returnflag, l_linestatus, l_shipdate, l_commitdate, l_receiptdate, l_shipinstruct, l_shipmode, l_comment
|
||||||
-- Test join
|
-- Test join
|
||||||
EXPLAIN (COSTS FALSE)
|
EXPLAIN (COSTS FALSE)
|
||||||
|
@ -414,19 +414,19 @@ Limit
|
||||||
Sort Key: lineitem.l_quantity
|
Sort Key: lineitem.l_quantity
|
||||||
-> Hash Join
|
-> Hash Join
|
||||||
Hash Cond: (lineitem.l_orderkey = orders.o_orderkey)
|
Hash Cond: (lineitem.l_orderkey = orders.o_orderkey)
|
||||||
-> Seq Scan on lineitem_290000 lineitem
|
-> Seq Scan on lineitem_360000 lineitem
|
||||||
Filter: (l_quantity < 5.0)
|
Filter: (l_quantity < 5.0)
|
||||||
-> Hash
|
-> Hash
|
||||||
-> Seq Scan on orders_290002 orders
|
-> Seq Scan on orders_360002 orders
|
||||||
-- Test insert
|
-- Test insert
|
||||||
EXPLAIN (COSTS FALSE)
|
EXPLAIN (COSTS FALSE)
|
||||||
INSERT INTO lineitem VALUES (1,0), (2, 0), (3, 0), (4, 0);
|
INSERT INTO lineitem VALUES (1,0), (2, 0), (3, 0), (4, 0);
|
||||||
Custom Scan (Citus Adaptive)
|
Custom Scan (Citus Adaptive)
|
||||||
Task Count: 1
|
Task Count: 2
|
||||||
Tasks Shown: All
|
Tasks Shown: One of 2
|
||||||
-> Task
|
-> Task
|
||||||
Node: host=localhost port=xxxxx dbname=regression
|
Node: host=localhost port=xxxxx dbname=regression
|
||||||
-> Insert on lineitem_290000 citus_table_alias
|
-> Insert on lineitem_360000 citus_table_alias
|
||||||
-> Values Scan on "*VALUES*"
|
-> Values Scan on "*VALUES*"
|
||||||
-- Test update
|
-- Test update
|
||||||
EXPLAIN (COSTS FALSE)
|
EXPLAIN (COSTS FALSE)
|
||||||
|
@ -438,8 +438,8 @@ Custom Scan (Citus Adaptive)
|
||||||
Tasks Shown: All
|
Tasks Shown: All
|
||||||
-> Task
|
-> Task
|
||||||
Node: host=localhost port=xxxxx dbname=regression
|
Node: host=localhost port=xxxxx dbname=regression
|
||||||
-> Update on lineitem_290000 lineitem
|
-> Update on lineitem_360000 lineitem
|
||||||
-> Index Scan using lineitem_pkey_290000 on lineitem_290000 lineitem
|
-> Index Scan using lineitem_pkey_360000 on lineitem_360000 lineitem
|
||||||
Index Cond: (l_orderkey = 1)
|
Index Cond: (l_orderkey = 1)
|
||||||
Filter: (l_partkey = 0)
|
Filter: (l_partkey = 0)
|
||||||
-- Test analyze (with TIMING FALSE and SUMMARY FALSE for consistent output)
|
-- Test analyze (with TIMING FALSE and SUMMARY FALSE for consistent output)
|
||||||
|
@ -453,8 +453,8 @@ Custom Scan (Citus Adaptive) (actual rows=0 loops=1)
|
||||||
Tasks Shown: All
|
Tasks Shown: All
|
||||||
-> Task
|
-> Task
|
||||||
Node: host=localhost port=xxxxx dbname=regression
|
Node: host=localhost port=xxxxx dbname=regression
|
||||||
-> Update on lineitem_290000 lineitem (actual rows=0 loops=1)
|
-> Update on lineitem_360000 lineitem (actual rows=0 loops=1)
|
||||||
-> Index Scan using lineitem_pkey_290000 on lineitem_290000 lineitem (actual rows=0 loops=1)
|
-> Index Scan using lineitem_pkey_360000 on lineitem_360000 lineitem (actual rows=0 loops=1)
|
||||||
Index Cond: (l_orderkey = 1)
|
Index Cond: (l_orderkey = 1)
|
||||||
Filter: (l_partkey = 0)
|
Filter: (l_partkey = 0)
|
||||||
Rows Removed by Filter: 6
|
Rows Removed by Filter: 6
|
||||||
|
@ -468,8 +468,8 @@ Custom Scan (Citus Adaptive)
|
||||||
Tasks Shown: All
|
Tasks Shown: All
|
||||||
-> Task
|
-> Task
|
||||||
Node: host=localhost port=xxxxx dbname=regression
|
Node: host=localhost port=xxxxx dbname=regression
|
||||||
-> Delete on lineitem_290000 lineitem
|
-> Delete on lineitem_360000 lineitem
|
||||||
-> Index Scan using lineitem_pkey_290000 on lineitem_290000 lineitem
|
-> Index Scan using lineitem_pkey_360000 on lineitem_360000 lineitem
|
||||||
Index Cond: (l_orderkey = 1)
|
Index Cond: (l_orderkey = 1)
|
||||||
Filter: (l_partkey = 0)
|
Filter: (l_partkey = 0)
|
||||||
-- Test zero-shard update
|
-- Test zero-shard update
|
||||||
|
@ -495,7 +495,7 @@ Custom Scan (Citus Adaptive)
|
||||||
Tasks Shown: All
|
Tasks Shown: All
|
||||||
-> Task
|
-> Task
|
||||||
Node: host=localhost port=xxxxx dbname=regression
|
Node: host=localhost port=xxxxx dbname=regression
|
||||||
-> Index Scan using lineitem_pkey_290000 on lineitem_290000 lineitem
|
-> Index Scan using lineitem_pkey_360000 on lineitem_360000 lineitem
|
||||||
Index Cond: (l_orderkey = 5)
|
Index Cond: (l_orderkey = 5)
|
||||||
SELECT true AS valid FROM explain_xml($$
|
SELECT true AS valid FROM explain_xml($$
|
||||||
SELECT l_quantity FROM lineitem WHERE l_orderkey = 5$$);
|
SELECT l_quantity FROM lineitem WHERE l_orderkey = 5$$);
|
||||||
|
@ -512,7 +512,7 @@ Custom Scan (Citus Adaptive)
|
||||||
Tasks Shown: One of 2
|
Tasks Shown: One of 2
|
||||||
-> Task
|
-> Task
|
||||||
Node: host=localhost port=xxxxx dbname=regression
|
Node: host=localhost port=xxxxx dbname=regression
|
||||||
-> Seq Scan on lineitem_290000 lineitem
|
-> Seq Scan on lineitem_360000 lineitem
|
||||||
-- Test having
|
-- Test having
|
||||||
EXPLAIN (COSTS FALSE, VERBOSE TRUE)
|
EXPLAIN (COSTS FALSE, VERBOSE TRUE)
|
||||||
SELECT sum(l_quantity) / avg(l_quantity) FROM lineitem
|
SELECT sum(l_quantity) / avg(l_quantity) FROM lineitem
|
||||||
|
@ -525,11 +525,11 @@ Aggregate
|
||||||
Task Count: 2
|
Task Count: 2
|
||||||
Tasks Shown: One of 2
|
Tasks Shown: One of 2
|
||||||
-> Task
|
-> Task
|
||||||
Query: SELECT sum(l_quantity), sum(l_quantity), count(l_quantity), sum(l_quantity) AS worker_column_4 FROM public.lineitem_290000 lineitem WHERE true
|
Query: SELECT sum(l_quantity), sum(l_quantity), count(l_quantity), sum(l_quantity) AS worker_column_4 FROM public.lineitem_360000 lineitem WHERE true
|
||||||
Node: host=localhost port=xxxxx dbname=regression
|
Node: host=localhost port=xxxxx dbname=regression
|
||||||
-> Aggregate
|
-> Aggregate
|
||||||
Output: sum(l_quantity), sum(l_quantity), count(l_quantity), sum(l_quantity)
|
Output: sum(l_quantity), sum(l_quantity), count(l_quantity), sum(l_quantity)
|
||||||
-> Seq Scan on public.lineitem_290000 lineitem
|
-> Seq Scan on public.lineitem_360000 lineitem
|
||||||
Output: l_orderkey, l_partkey, l_suppkey, l_linenumber, l_quantity, l_extendedprice, l_discount, l_tax, l_returnflag, l_linestatus, l_shipdate, l_commitdate, l_receiptdate, l_shipinstruct, l_shipmode, l_comment
|
Output: l_orderkey, l_partkey, l_suppkey, l_linenumber, l_quantity, l_extendedprice, l_discount, l_tax, l_returnflag, l_linestatus, l_shipdate, l_commitdate, l_receiptdate, l_shipinstruct, l_shipmode, l_comment
|
||||||
-- Test having without aggregate
|
-- Test having without aggregate
|
||||||
EXPLAIN (COSTS FALSE, VERBOSE TRUE)
|
EXPLAIN (COSTS FALSE, VERBOSE TRUE)
|
||||||
|
@ -545,12 +545,12 @@ HashAggregate
|
||||||
Task Count: 2
|
Task Count: 2
|
||||||
Tasks Shown: One of 2
|
Tasks Shown: One of 2
|
||||||
-> Task
|
-> Task
|
||||||
Query: SELECT l_quantity, l_quantity AS worker_column_2 FROM public.lineitem_290000 lineitem WHERE true GROUP BY l_quantity
|
Query: SELECT l_quantity, l_quantity AS worker_column_2 FROM public.lineitem_360000 lineitem WHERE true GROUP BY l_quantity
|
||||||
Node: host=localhost port=xxxxx dbname=regression
|
Node: host=localhost port=xxxxx dbname=regression
|
||||||
-> HashAggregate
|
-> HashAggregate
|
||||||
Output: l_quantity, l_quantity
|
Output: l_quantity, l_quantity
|
||||||
Group Key: lineitem.l_quantity
|
Group Key: lineitem.l_quantity
|
||||||
-> Seq Scan on public.lineitem_290000 lineitem
|
-> Seq Scan on public.lineitem_360000 lineitem
|
||||||
Output: l_orderkey, l_partkey, l_suppkey, l_linenumber, l_quantity, l_extendedprice, l_discount, l_tax, l_returnflag, l_linestatus, l_shipdate, l_commitdate, l_receiptdate, l_shipinstruct, l_shipmode, l_comment
|
Output: l_orderkey, l_partkey, l_suppkey, l_linenumber, l_quantity, l_extendedprice, l_discount, l_tax, l_returnflag, l_linestatus, l_shipdate, l_commitdate, l_receiptdate, l_shipinstruct, l_shipmode, l_comment
|
||||||
-- Subquery pushdown tests with explain
|
-- Subquery pushdown tests with explain
|
||||||
EXPLAIN (COSTS OFF)
|
EXPLAIN (COSTS OFF)
|
||||||
|
@ -907,13 +907,18 @@ EXPLAIN (COSTS FALSE)
|
||||||
SELECT avg(l_linenumber) FROM lineitem WHERE l_orderkey > 9030;
|
SELECT avg(l_linenumber) FROM lineitem WHERE l_orderkey > 9030;
|
||||||
Aggregate
|
Aggregate
|
||||||
-> Custom Scan (Citus Adaptive)
|
-> Custom Scan (Citus Adaptive)
|
||||||
Task Count: 1
|
Task Count: 2
|
||||||
Tasks Shown: All
|
Tasks Shown: All
|
||||||
-> Task
|
-> Task
|
||||||
Node: host=localhost port=xxxxx dbname=regression
|
Node: host=localhost port=xxxxx dbname=regression
|
||||||
-> Aggregate
|
-> Aggregate
|
||||||
-> Seq Scan on lineitem_290001 lineitem
|
-> Index Only Scan using lineitem_pkey_360000 on lineitem_360000 lineitem
|
||||||
Filter: (l_orderkey > 9030)
|
Index Cond: (l_orderkey > 9030)
|
||||||
|
-> Task
|
||||||
|
Node: host=localhost port=xxxxx dbname=regression
|
||||||
|
-> Aggregate
|
||||||
|
-> Index Only Scan using lineitem_pkey_360001 on lineitem_360001 lineitem
|
||||||
|
Index Cond: (l_orderkey > 9030)
|
||||||
SELECT true AS valid FROM explain_xml($$
|
SELECT true AS valid FROM explain_xml($$
|
||||||
SELECT avg(l_linenumber) FROM lineitem WHERE l_orderkey > 9030$$);
|
SELECT avg(l_linenumber) FROM lineitem WHERE l_orderkey > 9030$$);
|
||||||
t
|
t
|
||||||
|
@ -1000,13 +1005,13 @@ Sort (actual rows=50 loops=1)
|
||||||
Node: host=localhost port=xxxxx dbname=regression
|
Node: host=localhost port=xxxxx dbname=regression
|
||||||
-> HashAggregate (actual rows=50 loops=1)
|
-> HashAggregate (actual rows=50 loops=1)
|
||||||
Group Key: l_quantity
|
Group Key: l_quantity
|
||||||
-> Seq Scan on lineitem_290000 lineitem (actual rows=6000 loops=1)
|
-> Seq Scan on lineitem_360000 lineitem (actual rows=5894 loops=1)
|
||||||
-> Task
|
-> Task
|
||||||
Tuple data received from node: 900 bytes
|
Tuple data received from node: 900 bytes
|
||||||
Node: host=localhost port=xxxxx dbname=regression
|
Node: host=localhost port=xxxxx dbname=regression
|
||||||
-> HashAggregate (actual rows=50 loops=1)
|
-> HashAggregate (actual rows=50 loops=1)
|
||||||
Group Key: l_quantity
|
Group Key: l_quantity
|
||||||
-> Seq Scan on lineitem_290001 lineitem (actual rows=6000 loops=1)
|
-> Seq Scan on lineitem_360001 lineitem (actual rows=6106 loops=1)
|
||||||
SET citus.explain_all_tasks TO off;
|
SET citus.explain_all_tasks TO off;
|
||||||
-- Test update with subquery
|
-- Test update with subquery
|
||||||
EXPLAIN (COSTS FALSE)
|
EXPLAIN (COSTS FALSE)
|
||||||
|
@ -1046,13 +1051,13 @@ EXPLAIN (COSTS FALSE)
|
||||||
SELECT avg(l_linenumber) FROM lineitem WHERE l_orderkey > 9030;
|
SELECT avg(l_linenumber) FROM lineitem WHERE l_orderkey > 9030;
|
||||||
Aggregate
|
Aggregate
|
||||||
-> Custom Scan (Citus Adaptive)
|
-> Custom Scan (Citus Adaptive)
|
||||||
Task Count: 1
|
Task Count: 2
|
||||||
Tasks Shown: All
|
Tasks Shown: One of 2
|
||||||
-> Task
|
-> Task
|
||||||
Node: host=localhost port=xxxxx dbname=regression
|
Node: host=localhost port=xxxxx dbname=regression
|
||||||
-> Aggregate
|
-> Aggregate
|
||||||
-> Seq Scan on lineitem_290001 lineitem
|
-> Index Only Scan using lineitem_pkey_360000 on lineitem_360000 lineitem
|
||||||
Filter: (l_orderkey > 9030)
|
Index Cond: (l_orderkey > 9030)
|
||||||
-- Test re-partition join
|
-- Test re-partition join
|
||||||
EXPLAIN (COSTS FALSE)
|
EXPLAIN (COSTS FALSE)
|
||||||
SELECT count(*)
|
SELECT count(*)
|
||||||
|
@ -1062,14 +1067,17 @@ EXPLAIN (COSTS FALSE)
|
||||||
AND l_suppkey = s_suppkey;
|
AND l_suppkey = s_suppkey;
|
||||||
Aggregate
|
Aggregate
|
||||||
-> Custom Scan (Citus Adaptive)
|
-> Custom Scan (Citus Adaptive)
|
||||||
Task Count: 1
|
Task Count: 4
|
||||||
Tasks Shown: None, not supported for re-partition queries
|
Tasks Shown: None, not supported for re-partition queries
|
||||||
-> MapMergeJob
|
-> MapMergeJob
|
||||||
Map Task Count: 1
|
Map Task Count: 1
|
||||||
Merge Task Count: 1
|
Merge Task Count: 4
|
||||||
-> MapMergeJob
|
-> MapMergeJob
|
||||||
Map Task Count: 2
|
Map Task Count: 2
|
||||||
Merge Task Count: 1
|
Merge Task Count: 1
|
||||||
|
-> MapMergeJob
|
||||||
|
Map Task Count: 1
|
||||||
|
Merge Task Count: 4
|
||||||
EXPLAIN (COSTS FALSE, FORMAT JSON)
|
EXPLAIN (COSTS FALSE, FORMAT JSON)
|
||||||
SELECT count(*)
|
SELECT count(*)
|
||||||
FROM lineitem, orders, customer_append, supplier_single_shard
|
FROM lineitem, orders, customer_append, supplier_single_shard
|
||||||
|
@ -1090,18 +1098,22 @@ EXPLAIN (COSTS FALSE, FORMAT JSON)
|
||||||
"Parallel Aware": false,
|
"Parallel Aware": false,
|
||||||
"Distributed Query": {
|
"Distributed Query": {
|
||||||
"Job": {
|
"Job": {
|
||||||
"Task Count": 1,
|
"Task Count": 4,
|
||||||
"Tasks Shown": "None, not supported for re-partition queries",
|
"Tasks Shown": "None, not supported for re-partition queries",
|
||||||
"Dependent Jobs": [
|
"Dependent Jobs": [
|
||||||
{
|
{
|
||||||
"Map Task Count": 1,
|
"Map Task Count": 1,
|
||||||
"Merge Task Count": 1,
|
"Merge Task Count": 4,
|
||||||
"Dependent Jobs": [
|
"Dependent Jobs": [
|
||||||
{
|
{
|
||||||
"Map Task Count": 2,
|
"Map Task Count": 2,
|
||||||
"Merge Task Count": 1
|
"Merge Task Count": 1
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Map Task Count": 1,
|
||||||
|
"Merge Task Count": 4
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
@ -1138,12 +1150,12 @@ EXPLAIN (COSTS FALSE, FORMAT XML)
|
||||||
<Parallel-Aware>false</Parallel-Aware>
|
<Parallel-Aware>false</Parallel-Aware>
|
||||||
<Distributed-Query>
|
<Distributed-Query>
|
||||||
<Job>
|
<Job>
|
||||||
<Task-Count>1</Task-Count>
|
<Task-Count>4</Task-Count>
|
||||||
<Tasks-Shown>None, not supported for re-partition queries</Tasks-Shown>
|
<Tasks-Shown>None, not supported for re-partition queries</Tasks-Shown>
|
||||||
<Dependent-Jobs>
|
<Dependent-Jobs>
|
||||||
<MapMergeJob>
|
<MapMergeJob>
|
||||||
<Map-Task-Count>1</Map-Task-Count>
|
<Map-Task-Count>1</Map-Task-Count>
|
||||||
<Merge-Task-Count>1</Merge-Task-Count>
|
<Merge-Task-Count>4</Merge-Task-Count>
|
||||||
<Dependent-Jobs>
|
<Dependent-Jobs>
|
||||||
<MapMergeJob>
|
<MapMergeJob>
|
||||||
<Map-Task-Count>2</Map-Task-Count>
|
<Map-Task-Count>2</Map-Task-Count>
|
||||||
|
@ -1151,6 +1163,10 @@ EXPLAIN (COSTS FALSE, FORMAT XML)
|
||||||
</MapMergeJob>
|
</MapMergeJob>
|
||||||
</Dependent-Jobs>
|
</Dependent-Jobs>
|
||||||
</MapMergeJob>
|
</MapMergeJob>
|
||||||
|
<MapMergeJob>
|
||||||
|
<Map-Task-Count>1</Map-Task-Count>
|
||||||
|
<Merge-Task-Count>4</Merge-Task-Count>
|
||||||
|
</MapMergeJob>
|
||||||
</Dependent-Jobs>
|
</Dependent-Jobs>
|
||||||
</Job>
|
</Job>
|
||||||
</Distributed-Query>
|
</Distributed-Query>
|
||||||
|
@ -1196,11 +1212,13 @@ EXPLAIN (COSTS FALSE, FORMAT YAML)
|
||||||
Parallel Aware: false
|
Parallel Aware: false
|
||||||
Distributed Query:
|
Distributed Query:
|
||||||
Job:
|
Job:
|
||||||
Task Count: 1
|
Task Count: 4
|
||||||
Tasks Shown: "None, not supported for re-partition queries"
|
Tasks Shown: "None, not supported for re-partition queries"
|
||||||
Dependent Jobs:
|
Dependent Jobs:
|
||||||
- Map Task Count: 2
|
- Map Task Count: 2
|
||||||
Merge Task Count: 1
|
Merge Task Count: 4
|
||||||
|
- Map Task Count: 1
|
||||||
|
Merge Task Count: 4
|
||||||
-- ensure local plans display correctly
|
-- ensure local plans display correctly
|
||||||
CREATE TABLE lineitem_clone (LIKE lineitem);
|
CREATE TABLE lineitem_clone (LIKE lineitem);
|
||||||
EXPLAIN (COSTS FALSE) SELECT avg(l_linenumber) FROM lineitem_clone;
|
EXPLAIN (COSTS FALSE) SELECT avg(l_linenumber) FROM lineitem_clone;
|
||||||
|
@ -1215,51 +1233,51 @@ Aggregate
|
||||||
-> Task
|
-> Task
|
||||||
Node: host=localhost port=xxxxx dbname=regression
|
Node: host=localhost port=xxxxx dbname=regression
|
||||||
-> Aggregate
|
-> Aggregate
|
||||||
-> Seq Scan on lineitem_290000 lineitem
|
-> Seq Scan on lineitem_360000 lineitem
|
||||||
-- ensure EXPLAIN EXECUTE doesn't crash
|
-- ensure EXPLAIN EXECUTE doesn't crash
|
||||||
PREPARE task_tracker_query AS
|
PREPARE task_tracker_query AS
|
||||||
SELECT avg(l_linenumber) FROM lineitem WHERE l_orderkey > 9030;
|
SELECT avg(l_linenumber) FROM lineitem WHERE l_orderkey > 9030;
|
||||||
EXPLAIN (COSTS FALSE) EXECUTE task_tracker_query;
|
EXPLAIN (COSTS FALSE) EXECUTE task_tracker_query;
|
||||||
Aggregate
|
Aggregate
|
||||||
-> Custom Scan (Citus Adaptive)
|
-> Custom Scan (Citus Adaptive)
|
||||||
Task Count: 1
|
Task Count: 2
|
||||||
Tasks Shown: All
|
Tasks Shown: One of 2
|
||||||
-> Task
|
-> Task
|
||||||
Node: host=localhost port=xxxxx dbname=regression
|
Node: host=localhost port=xxxxx dbname=regression
|
||||||
-> Aggregate
|
-> Aggregate
|
||||||
-> Seq Scan on lineitem_290001 lineitem
|
-> Index Only Scan using lineitem_pkey_360000 on lineitem_360000 lineitem
|
||||||
Filter: (l_orderkey > 9030)
|
Index Cond: (l_orderkey > 9030)
|
||||||
PREPARE router_executor_query AS SELECT l_quantity FROM lineitem WHERE l_orderkey = 5;
|
PREPARE router_executor_query AS SELECT l_quantity FROM lineitem WHERE l_orderkey = 5;
|
||||||
EXPLAIN EXECUTE router_executor_query;
|
EXPLAIN EXECUTE router_executor_query;
|
||||||
Custom Scan (Citus Adaptive) (cost=0.00..0.00 rows=100000 width=18)
|
Custom Scan (Citus Adaptive) (cost=0.00..0.00 rows=0 width=0)
|
||||||
Task Count: 1
|
Task Count: 1
|
||||||
Tasks Shown: All
|
Tasks Shown: All
|
||||||
-> Task
|
-> Task
|
||||||
Node: host=localhost port=xxxxx dbname=regression
|
Node: host=localhost port=xxxxx dbname=regression
|
||||||
-> Index Scan using lineitem_pkey_290000 on lineitem_290000 lineitem (cost=0.28..13.60 rows=4 width=5)
|
-> Index Scan using lineitem_pkey_360000 on lineitem_360000 lineitem (cost=0.28..13.60 rows=4 width=5)
|
||||||
Index Cond: (l_orderkey = 5)
|
Index Cond: (l_orderkey = 5)
|
||||||
PREPARE real_time_executor_query AS
|
PREPARE real_time_executor_query AS
|
||||||
SELECT avg(l_linenumber) FROM lineitem WHERE l_orderkey > 9030;
|
SELECT avg(l_linenumber) FROM lineitem WHERE l_orderkey > 9030;
|
||||||
EXPLAIN (COSTS FALSE) EXECUTE real_time_executor_query;
|
EXPLAIN (COSTS FALSE) EXECUTE real_time_executor_query;
|
||||||
Aggregate
|
Aggregate
|
||||||
-> Custom Scan (Citus Adaptive)
|
-> Custom Scan (Citus Adaptive)
|
||||||
Task Count: 1
|
Task Count: 2
|
||||||
Tasks Shown: All
|
Tasks Shown: One of 2
|
||||||
-> Task
|
-> Task
|
||||||
Node: host=localhost port=xxxxx dbname=regression
|
Node: host=localhost port=xxxxx dbname=regression
|
||||||
-> Aggregate
|
-> Aggregate
|
||||||
-> Seq Scan on lineitem_290001 lineitem
|
-> Index Only Scan using lineitem_pkey_360000 on lineitem_360000 lineitem
|
||||||
Filter: (l_orderkey > 9030)
|
Index Cond: (l_orderkey > 9030)
|
||||||
-- EXPLAIN EXECUTE of parametrized prepared statements is broken, but
|
-- EXPLAIN EXECUTE of parametrized prepared statements is broken, but
|
||||||
-- at least make sure to fail without crashing
|
-- at least make sure to fail without crashing
|
||||||
PREPARE router_executor_query_param(int) AS SELECT l_quantity FROM lineitem WHERE l_orderkey = $1;
|
PREPARE router_executor_query_param(int) AS SELECT l_quantity FROM lineitem WHERE l_orderkey = $1;
|
||||||
EXPLAIN EXECUTE router_executor_query_param(5);
|
EXPLAIN EXECUTE router_executor_query_param(5);
|
||||||
Custom Scan (Citus Adaptive) (cost=0.00..0.00 rows=100000 width=18)
|
Custom Scan (Citus Adaptive) (cost=0.00..0.00 rows=0 width=0)
|
||||||
Task Count: 1
|
Task Count: 1
|
||||||
Tasks Shown: All
|
Tasks Shown: All
|
||||||
-> Task
|
-> Task
|
||||||
Node: host=localhost port=xxxxx dbname=regression
|
Node: host=localhost port=xxxxx dbname=regression
|
||||||
-> Index Scan using lineitem_pkey_290000 on lineitem_290000 lineitem (cost=0.28..13.60 rows=4 width=5)
|
-> Index Scan using lineitem_pkey_360000 on lineitem_360000 lineitem (cost=0.28..13.60 rows=4 width=5)
|
||||||
Index Cond: (l_orderkey = 5)
|
Index Cond: (l_orderkey = 5)
|
||||||
EXPLAIN (ANALYZE ON, COSTS OFF, TIMING OFF, SUMMARY OFF) EXECUTE router_executor_query_param(5);
|
EXPLAIN (ANALYZE ON, COSTS OFF, TIMING OFF, SUMMARY OFF) EXECUTE router_executor_query_param(5);
|
||||||
Custom Scan (Citus Adaptive) (actual rows=3 loops=1)
|
Custom Scan (Citus Adaptive) (actual rows=3 loops=1)
|
||||||
|
@ -1269,7 +1287,7 @@ Custom Scan (Citus Adaptive) (actual rows=3 loops=1)
|
||||||
-> Task
|
-> Task
|
||||||
Tuple data received from node: 30 bytes
|
Tuple data received from node: 30 bytes
|
||||||
Node: host=localhost port=xxxxx dbname=regression
|
Node: host=localhost port=xxxxx dbname=regression
|
||||||
-> Index Scan using lineitem_pkey_290000 on lineitem_290000 lineitem (actual rows=3 loops=1)
|
-> Index Scan using lineitem_pkey_360000 on lineitem_360000 lineitem (actual rows=3 loops=1)
|
||||||
Index Cond: (l_orderkey = 5)
|
Index Cond: (l_orderkey = 5)
|
||||||
\set VERBOSITY TERSE
|
\set VERBOSITY TERSE
|
||||||
PREPARE multi_shard_query_param(int) AS UPDATE lineitem SET l_quantity = $1;
|
PREPARE multi_shard_query_param(int) AS UPDATE lineitem SET l_quantity = $1;
|
||||||
|
@ -1280,8 +1298,8 @@ Custom Scan (Citus Adaptive)
|
||||||
Tasks Shown: One of 2
|
Tasks Shown: One of 2
|
||||||
-> Task
|
-> Task
|
||||||
Node: host=localhost port=xxxxx dbname=regression
|
Node: host=localhost port=xxxxx dbname=regression
|
||||||
-> Update on lineitem_290000 lineitem
|
-> Update on lineitem_360000 lineitem
|
||||||
-> Seq Scan on lineitem_290000 lineitem
|
-> Seq Scan on lineitem_360000 lineitem
|
||||||
ROLLBACK;
|
ROLLBACK;
|
||||||
BEGIN;
|
BEGIN;
|
||||||
EXPLAIN (ANALYZE ON, COSTS OFF, TIMING OFF, SUMMARY OFF) EXECUTE multi_shard_query_param(5);
|
EXPLAIN (ANALYZE ON, COSTS OFF, TIMING OFF, SUMMARY OFF) EXECUTE multi_shard_query_param(5);
|
||||||
|
@ -1290,8 +1308,8 @@ Custom Scan (Citus Adaptive) (actual rows=0 loops=1)
|
||||||
Tasks Shown: One of 2
|
Tasks Shown: One of 2
|
||||||
-> Task
|
-> Task
|
||||||
Node: host=localhost port=xxxxx dbname=regression
|
Node: host=localhost port=xxxxx dbname=regression
|
||||||
-> Update on lineitem_290000 lineitem (actual rows=0 loops=1)
|
-> Update on lineitem_360000 lineitem (actual rows=0 loops=1)
|
||||||
-> Seq Scan on lineitem_290000 lineitem (actual rows=6000 loops=1)
|
-> Seq Scan on lineitem_360000 lineitem (actual rows=5894 loops=1)
|
||||||
ROLLBACK;
|
ROLLBACK;
|
||||||
\set VERBOSITY DEFAULT
|
\set VERBOSITY DEFAULT
|
||||||
-- test explain in a transaction with alter table to test we use right connections
|
-- test explain in a transaction with alter table to test we use right connections
|
||||||
|
|
|
@ -368,13 +368,15 @@ DEBUG: assigned task to node localhost:xxxxx
|
||||||
12000
|
12000
|
||||||
(1 row)
|
(1 row)
|
||||||
|
|
||||||
-- Check whether we support range queries with append distributed table
|
-- Check whether we support range queries
|
||||||
SELECT count(*) FROM lineitem
|
SELECT count(*) FROM lineitem
|
||||||
WHERE l_orderkey >= 1 AND l_orderkey <= 3;
|
WHERE l_orderkey >= 1 AND l_orderkey <= 3;
|
||||||
DEBUG: Router planner does not support append-partitioned tables.
|
DEBUG: no sharding pruning constraints on lineitem found
|
||||||
DEBUG: constraint (lteq) value: '3'::bigint
|
DEBUG: shard count after pruning for lineitem: 2
|
||||||
DEBUG: constraint (gteq) value: '1'::bigint
|
DEBUG: Router planner cannot handle multi-shard select queries
|
||||||
DEBUG: shard count after pruning for lineitem: 1
|
DEBUG: no sharding pruning constraints on lineitem found
|
||||||
|
DEBUG: shard count after pruning for lineitem: 2
|
||||||
|
DEBUG: assigned task to node localhost:xxxxx
|
||||||
DEBUG: assigned task to node localhost:xxxxx
|
DEBUG: assigned task to node localhost:xxxxx
|
||||||
count
|
count
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
|
@ -383,24 +385,31 @@ DEBUG: assigned task to node localhost:xxxxx
|
||||||
|
|
||||||
SELECT count(*) FROM lineitem
|
SELECT count(*) FROM lineitem
|
||||||
WHERE (l_orderkey >= 1 AND l_orderkey <= 3) AND (l_quantity > 11 AND l_quantity < 22);
|
WHERE (l_orderkey >= 1 AND l_orderkey <= 3) AND (l_quantity > 11 AND l_quantity < 22);
|
||||||
DEBUG: Router planner does not support append-partitioned tables.
|
DEBUG: no sharding pruning constraints on lineitem found
|
||||||
DEBUG: constraint (lteq) value: '3'::bigint
|
DEBUG: shard count after pruning for lineitem: 2
|
||||||
DEBUG: constraint (gteq) value: '1'::bigint
|
DEBUG: Router planner cannot handle multi-shard select queries
|
||||||
DEBUG: shard count after pruning for lineitem: 1
|
DEBUG: no sharding pruning constraints on lineitem found
|
||||||
|
DEBUG: shard count after pruning for lineitem: 2
|
||||||
|
DEBUG: assigned task to node localhost:xxxxx
|
||||||
DEBUG: assigned task to node localhost:xxxxx
|
DEBUG: assigned task to node localhost:xxxxx
|
||||||
count
|
count
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
1
|
1
|
||||||
(1 row)
|
(1 row)
|
||||||
|
|
||||||
-- Check whether we support IN/ANY in subquery with append and range distributed table
|
-- Check whether we support IN/ANY in subquery
|
||||||
SELECT count(*) FROM lineitem
|
SELECT count(*) FROM lineitem
|
||||||
WHERE l_orderkey = ANY ('{1,2,3}');
|
WHERE l_orderkey = ANY ('{1,2,3}');
|
||||||
DEBUG: Router planner does not support append-partitioned tables.
|
|
||||||
DEBUG: constraint value: '1'::bigint
|
DEBUG: constraint value: '1'::bigint
|
||||||
DEBUG: constraint value: '2'::bigint
|
DEBUG: constraint value: '2'::bigint
|
||||||
DEBUG: constraint value: '3'::bigint
|
DEBUG: constraint value: '3'::bigint
|
||||||
DEBUG: shard count after pruning for lineitem: 1
|
DEBUG: shard count after pruning for lineitem: 2
|
||||||
|
DEBUG: Router planner cannot handle multi-shard select queries
|
||||||
|
DEBUG: constraint value: '1'::bigint
|
||||||
|
DEBUG: constraint value: '2'::bigint
|
||||||
|
DEBUG: constraint value: '3'::bigint
|
||||||
|
DEBUG: shard count after pruning for lineitem: 2
|
||||||
|
DEBUG: assigned task to node localhost:xxxxx
|
||||||
DEBUG: assigned task to node localhost:xxxxx
|
DEBUG: assigned task to node localhost:xxxxx
|
||||||
count
|
count
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
|
@ -409,11 +418,16 @@ DEBUG: assigned task to node localhost:xxxxx
|
||||||
|
|
||||||
SELECT count(*) FROM lineitem
|
SELECT count(*) FROM lineitem
|
||||||
WHERE l_orderkey IN (1,2,3);
|
WHERE l_orderkey IN (1,2,3);
|
||||||
DEBUG: Router planner does not support append-partitioned tables.
|
|
||||||
DEBUG: constraint value: '1'::bigint
|
DEBUG: constraint value: '1'::bigint
|
||||||
DEBUG: constraint value: '2'::bigint
|
DEBUG: constraint value: '2'::bigint
|
||||||
DEBUG: constraint value: '3'::bigint
|
DEBUG: constraint value: '3'::bigint
|
||||||
DEBUG: shard count after pruning for lineitem: 1
|
DEBUG: shard count after pruning for lineitem: 2
|
||||||
|
DEBUG: Router planner cannot handle multi-shard select queries
|
||||||
|
DEBUG: constraint value: '1'::bigint
|
||||||
|
DEBUG: constraint value: '2'::bigint
|
||||||
|
DEBUG: constraint value: '3'::bigint
|
||||||
|
DEBUG: shard count after pruning for lineitem: 2
|
||||||
|
DEBUG: assigned task to node localhost:xxxxx
|
||||||
DEBUG: assigned task to node localhost:xxxxx
|
DEBUG: assigned task to node localhost:xxxxx
|
||||||
count
|
count
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
|
@ -422,7 +436,9 @@ DEBUG: assigned task to node localhost:xxxxx
|
||||||
|
|
||||||
SELECT count(*) FROM lineitem
|
SELECT count(*) FROM lineitem
|
||||||
WHERE l_orderkey = ANY(NULL) OR TRUE;
|
WHERE l_orderkey = ANY(NULL) OR TRUE;
|
||||||
DEBUG: Router planner does not support append-partitioned tables.
|
DEBUG: no sharding pruning constraints on lineitem found
|
||||||
|
DEBUG: shard count after pruning for lineitem: 2
|
||||||
|
DEBUG: Router planner cannot handle multi-shard select queries
|
||||||
DEBUG: no sharding pruning constraints on lineitem found
|
DEBUG: no sharding pruning constraints on lineitem found
|
||||||
DEBUG: shard count after pruning for lineitem: 2
|
DEBUG: shard count after pruning for lineitem: 2
|
||||||
DEBUG: assigned task to node localhost:xxxxx
|
DEBUG: assigned task to node localhost:xxxxx
|
||||||
|
|
|
@ -51,19 +51,20 @@ EXPLAIN (COSTS FALSE)
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
Limit
|
Limit
|
||||||
-> Sort
|
-> Sort
|
||||||
Sort Key: (sum(remote_scan.revenue)) DESC, remote_scan.l_orderkey
|
Sort Key: remote_scan.revenue DESC, remote_scan.l_orderkey
|
||||||
-> HashAggregate
|
|
||||||
Group Key: remote_scan.l_orderkey
|
|
||||||
Filter: (sum(remote_scan.worker_column_3) > '24'::numeric)
|
|
||||||
-> Custom Scan (Citus Adaptive)
|
-> Custom Scan (Citus Adaptive)
|
||||||
Task Count: 2
|
Task Count: 2
|
||||||
Tasks Shown: One of 2
|
Tasks Shown: One of 2
|
||||||
-> Task
|
-> Task
|
||||||
Node: host=localhost port=xxxxx dbname=regression
|
Node: host=localhost port=xxxxx dbname=regression
|
||||||
|
-> Limit
|
||||||
|
-> Sort
|
||||||
|
Sort Key: (sum((l_extendedprice * l_discount))) DESC, l_orderkey
|
||||||
-> HashAggregate
|
-> HashAggregate
|
||||||
Group Key: l_orderkey
|
Group Key: l_orderkey
|
||||||
-> Seq Scan on lineitem_290000 lineitem
|
Filter: (sum(l_quantity) > '24'::numeric)
|
||||||
(14 rows)
|
-> Seq Scan on lineitem_360000 lineitem
|
||||||
|
(15 rows)
|
||||||
|
|
||||||
-- and don't push down when not grouped by partition column
|
-- and don't push down when not grouped by partition column
|
||||||
EXPLAIN (COSTS FALSE)
|
EXPLAIN (COSTS FALSE)
|
||||||
|
|
|
@ -182,8 +182,6 @@ SELECT count(*) FROM pg_indexes WHERE tablename LIKE 'index_test_append%';
|
||||||
\c - - - :master_port
|
\c - - - :master_port
|
||||||
SET search_path TO multi_index_statements, public;
|
SET search_path TO multi_index_statements, public;
|
||||||
-- Verify that we error out on unsupported statement types
|
-- Verify that we error out on unsupported statement types
|
||||||
CREATE UNIQUE INDEX try_index ON public.lineitem (l_orderkey);
|
|
||||||
ERROR: creating unique indexes on append-partitioned tables is currently unsupported
|
|
||||||
CREATE INDEX try_index ON lineitem (l_orderkey) TABLESPACE newtablespace;
|
CREATE INDEX try_index ON lineitem (l_orderkey) TABLESPACE newtablespace;
|
||||||
ERROR: specifying tablespaces with CREATE INDEX statements is currently unsupported
|
ERROR: specifying tablespaces with CREATE INDEX statements is currently unsupported
|
||||||
CREATE UNIQUE INDEX try_unique_range_index ON index_test_range(b);
|
CREATE UNIQUE INDEX try_unique_range_index ON index_test_range(b);
|
||||||
|
@ -306,8 +304,8 @@ SELECT * FROM pg_indexes WHERE tablename LIKE 'index_test_%' ORDER BY indexname;
|
||||||
SELECT indrelid::regclass, indexrelid::regclass FROM pg_index WHERE indrelid = (SELECT relname FROM pg_class WHERE relname LIKE 'lineitem%' ORDER BY relname LIMIT 1)::regclass AND NOT indisprimary AND indexrelid::regclass::text NOT LIKE 'lineitem_time_index%' ORDER BY 1,2;
|
SELECT indrelid::regclass, indexrelid::regclass FROM pg_index WHERE indrelid = (SELECT relname FROM pg_class WHERE relname LIKE 'lineitem%' ORDER BY relname LIMIT 1)::regclass AND NOT indisprimary AND indexrelid::regclass::text NOT LIKE 'lineitem_time_index%' ORDER BY 1,2;
|
||||||
indrelid | indexrelid
|
indrelid | indexrelid
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
lineitem_290000 | lineitem_l_orderkey_idx_290000
|
lineitem_360000 | lineitem_l_orderkey_idx_360000
|
||||||
lineitem_290000 | lineitem_l_shipdate_idx_290000
|
lineitem_360000 | lineitem_l_shipdate_idx_360000
|
||||||
(2 rows)
|
(2 rows)
|
||||||
|
|
||||||
SELECT * FROM pg_indexes WHERE tablename LIKE 'index_test_%' ORDER BY indexname;
|
SELECT * FROM pg_indexes WHERE tablename LIKE 'index_test_%' ORDER BY indexname;
|
||||||
|
|
|
@ -73,10 +73,10 @@ SET client_min_messages TO DEBUG2;
|
||||||
EXPLAIN (COSTS OFF)
|
EXPLAIN (COSTS OFF)
|
||||||
SELECT l1.l_quantity FROM lineitem l1, lineitem l2
|
SELECT l1.l_quantity FROM lineitem l1, lineitem l2
|
||||||
WHERE l1.l_orderkey = l2.l_orderkey AND l1.l_quantity > 5;
|
WHERE l1.l_orderkey = l2.l_orderkey AND l1.l_quantity > 5;
|
||||||
DEBUG: Router planner does not support append-partitioned tables.
|
DEBUG: Router planner cannot handle multi-shard select queries
|
||||||
LOG: join order: [ "lineitem" ][ local partition join "lineitem" ]
|
LOG: join order: [ "lineitem" ][ local partition join "lineitem" ]
|
||||||
DEBUG: join prunable for intervals [1,5986] and [8997,14947]
|
DEBUG: join prunable for intervals [-2147483648,-1] and [0,2147483647]
|
||||||
DEBUG: join prunable for intervals [8997,14947] and [1,5986]
|
DEBUG: join prunable for intervals [0,2147483647] and [-2147483648,-1]
|
||||||
QUERY PLAN
|
QUERY PLAN
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
Custom Scan (Citus Adaptive)
|
Custom Scan (Citus Adaptive)
|
||||||
|
@ -106,7 +106,7 @@ ERROR: complex joins are only supported when all distributed tables are joined
|
||||||
EXPLAIN (COSTS OFF)
|
EXPLAIN (COSTS OFF)
|
||||||
SELECT count(*) FROM orders, lineitem_hash
|
SELECT count(*) FROM orders, lineitem_hash
|
||||||
WHERE o_orderkey = l_orderkey;
|
WHERE o_orderkey = l_orderkey;
|
||||||
LOG: join order: [ "orders" ][ single range partition join "lineitem_hash" ]
|
LOG: join order: [ "orders" ][ dual partition join "lineitem_hash" ]
|
||||||
QUERY PLAN
|
QUERY PLAN
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
Aggregate
|
Aggregate
|
||||||
|
|
|
@ -52,12 +52,10 @@ LOG: join order: [ "orders" ][ reference join "customer" ][ local partition joi
|
||||||
QUERY PLAN
|
QUERY PLAN
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
Sort
|
Sort
|
||||||
Sort Key: (sum(remote_scan.revenue)) DESC, remote_scan.o_orderdate
|
Sort Key: remote_scan.revenue DESC, remote_scan.o_orderdate
|
||||||
-> HashAggregate
|
|
||||||
Group Key: remote_scan.l_orderkey, remote_scan.o_orderdate, remote_scan.o_shippriority
|
|
||||||
-> Custom Scan (Citus Adaptive)
|
-> Custom Scan (Citus Adaptive)
|
||||||
explain statements for distributed queries are not enabled
|
explain statements for distributed queries are not enabled
|
||||||
(6 rows)
|
(4 rows)
|
||||||
|
|
||||||
-- Query #10 from the TPC-H decision support benchmark
|
-- Query #10 from the TPC-H decision support benchmark
|
||||||
EXPLAIN (COSTS OFF)
|
EXPLAIN (COSTS OFF)
|
||||||
|
|
|
@ -8,9 +8,9 @@ SET citus.explain_distributed_queries TO off;
|
||||||
SET client_min_messages TO DEBUG2;
|
SET client_min_messages TO DEBUG2;
|
||||||
SELECT sum(l_linenumber), avg(l_linenumber) FROM lineitem, orders
|
SELECT sum(l_linenumber), avg(l_linenumber) FROM lineitem, orders
|
||||||
WHERE l_orderkey = o_orderkey;
|
WHERE l_orderkey = o_orderkey;
|
||||||
DEBUG: Router planner does not support append-partitioned tables.
|
DEBUG: Router planner cannot handle multi-shard select queries
|
||||||
DEBUG: join prunable for intervals [1,5986] and [8997,14947]
|
DEBUG: join prunable for intervals [-2147483648,-1] and [0,2147483647]
|
||||||
DEBUG: join prunable for intervals [8997,14947] and [1,5986]
|
DEBUG: join prunable for intervals [0,2147483647] and [-2147483648,-1]
|
||||||
sum | avg
|
sum | avg
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
36089 | 3.0074166666666667
|
36089 | 3.0074166666666667
|
||||||
|
@ -18,8 +18,9 @@ DEBUG: join prunable for intervals [8997,14947] and [1,5986]
|
||||||
|
|
||||||
SELECT sum(l_linenumber), avg(l_linenumber) FROM lineitem, orders
|
SELECT sum(l_linenumber), avg(l_linenumber) FROM lineitem, orders
|
||||||
WHERE l_orderkey = o_orderkey AND l_orderkey > 9030;
|
WHERE l_orderkey = o_orderkey AND l_orderkey > 9030;
|
||||||
DEBUG: Router planner does not support append-partitioned tables.
|
DEBUG: Router planner cannot handle multi-shard select queries
|
||||||
DEBUG: join prunable for intervals [8997,14947] and [1,5986]
|
DEBUG: join prunable for intervals [-2147483648,-1] and [0,2147483647]
|
||||||
|
DEBUG: join prunable for intervals [0,2147483647] and [-2147483648,-1]
|
||||||
sum | avg
|
sum | avg
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
17999 | 3.0189533713518953
|
17999 | 3.0189533713518953
|
||||||
|
@ -29,7 +30,9 @@ DEBUG: join prunable for intervals [8997,14947] and [1,5986]
|
||||||
-- works as expected in this case.
|
-- works as expected in this case.
|
||||||
SELECT sum(l_linenumber), avg(l_linenumber) FROM lineitem, orders
|
SELECT sum(l_linenumber), avg(l_linenumber) FROM lineitem, orders
|
||||||
WHERE l_orderkey = o_orderkey AND l_orderkey > 20000;
|
WHERE l_orderkey = o_orderkey AND l_orderkey > 20000;
|
||||||
DEBUG: Router planner does not support append-partitioned tables.
|
DEBUG: Router planner cannot handle multi-shard select queries
|
||||||
|
DEBUG: join prunable for intervals [-2147483648,-1] and [0,2147483647]
|
||||||
|
DEBUG: join prunable for intervals [0,2147483647] and [-2147483648,-1]
|
||||||
sum | avg
|
sum | avg
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
|
|
|
|
||||||
|
@ -44,36 +47,28 @@ where logicalrelid='lineitem'::regclass or
|
||||||
order by shardid;
|
order by shardid;
|
||||||
logicalrelid | shardid | shardstorage | shardminvalue | shardmaxvalue
|
logicalrelid | shardid | shardstorage | shardminvalue | shardmaxvalue
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
lineitem | 290000 | t | 1 | 5986
|
lineitem | 360000 | t | -2147483648 | -1
|
||||||
lineitem | 290001 | t | 8997 | 14947
|
lineitem | 360001 | t | 0 | 2147483647
|
||||||
orders | 290002 | t | 1 | 5986
|
orders | 360002 | t | -2147483648 | -1
|
||||||
orders | 290003 | t | 8997 | 14947
|
orders | 360003 | t | 0 | 2147483647
|
||||||
(4 rows)
|
(4 rows)
|
||||||
|
|
||||||
set citus.explain_distributed_queries to on;
|
|
||||||
-- explain the query before actually executing it
|
|
||||||
EXPLAIN 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.
|
|
||||||
DEBUG: join prunable for intervals [8997,14947] and [1,5986]
|
|
||||||
QUERY PLAN
|
|
||||||
---------------------------------------------------------------------
|
|
||||||
Aggregate (cost=750.01..750.02 rows=1 width=40)
|
|
||||||
-> Custom Scan (Citus Adaptive) (cost=0.00..0.00 rows=100000 width=24)
|
|
||||||
Task Count: 0
|
|
||||||
Tasks Shown: All
|
|
||||||
(4 rows)
|
|
||||||
|
|
||||||
set citus.explain_distributed_queries to off;
|
|
||||||
set client_min_messages to debug3;
|
set client_min_messages to debug3;
|
||||||
SELECT sum(l_linenumber), avg(l_linenumber) FROM lineitem, orders
|
SELECT sum(l_linenumber), avg(l_linenumber) FROM lineitem, orders
|
||||||
WHERE l_orderkey = o_orderkey AND l_orderkey > 6000 AND o_orderkey < 6000;
|
WHERE l_orderkey = o_orderkey AND l_orderkey > 6000 AND o_orderkey < 6000;
|
||||||
DEBUG: Router planner does not support append-partitioned tables.
|
DEBUG: no sharding pruning constraints on lineitem found
|
||||||
DEBUG: constraint (gt) value: '6000'::bigint
|
DEBUG: shard count after pruning for lineitem: 2
|
||||||
DEBUG: shard count after pruning for lineitem: 1
|
DEBUG: no sharding pruning constraints on orders found
|
||||||
DEBUG: constraint (lt) value: '6000'::bigint
|
DEBUG: shard count after pruning for orders: 2
|
||||||
DEBUG: shard count after pruning for orders: 1
|
DEBUG: Router planner cannot handle multi-shard select queries
|
||||||
DEBUG: join prunable for intervals [8997,14947] and [1,5986]
|
DEBUG: no sharding pruning constraints on lineitem found
|
||||||
|
DEBUG: shard count after pruning for lineitem: 2
|
||||||
|
DEBUG: no sharding pruning constraints on orders found
|
||||||
|
DEBUG: shard count after pruning for orders: 2
|
||||||
|
DEBUG: join prunable for intervals [-2147483648,-1] and [0,2147483647]
|
||||||
|
DEBUG: join prunable for intervals [0,2147483647] and [-2147483648,-1]
|
||||||
|
DEBUG: assigned task to node localhost:xxxxx
|
||||||
|
DEBUG: assigned task to node localhost:xxxxx
|
||||||
sum | avg
|
sum | avg
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
|
|
|
|
||||||
|
@ -83,7 +78,7 @@ set client_min_messages to debug2;
|
||||||
-- Make sure that we can handle filters without a column
|
-- Make sure that we can handle filters without a column
|
||||||
SELECT sum(l_linenumber), avg(l_linenumber) FROM lineitem, orders
|
SELECT sum(l_linenumber), avg(l_linenumber) FROM lineitem, orders
|
||||||
WHERE l_orderkey = o_orderkey AND false;
|
WHERE l_orderkey = o_orderkey AND false;
|
||||||
DEBUG: Router planner does not support append-partitioned tables.
|
DEBUG: Creating router plan
|
||||||
sum | avg
|
sum | avg
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
|
|
|
|
||||||
|
@ -92,7 +87,7 @@ DEBUG: Router planner does not support append-partitioned tables.
|
||||||
SELECT sum(l_linenumber), avg(l_linenumber)
|
SELECT sum(l_linenumber), avg(l_linenumber)
|
||||||
FROM lineitem INNER JOIN orders ON (l_orderkey = o_orderkey)
|
FROM lineitem INNER JOIN orders ON (l_orderkey = o_orderkey)
|
||||||
WHERE false;
|
WHERE false;
|
||||||
DEBUG: Router planner does not support append-partitioned tables.
|
DEBUG: Creating router plan
|
||||||
sum | avg
|
sum | avg
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
|
|
|
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
--
|
--
|
||||||
SET citus.next_shard_id TO 520000;
|
SET citus.next_shard_id TO 520000;
|
||||||
SET citus.coordinator_aggregation_strategy TO 'disabled';
|
SET citus.coordinator_aggregation_strategy TO 'disabled';
|
||||||
|
SELECT run_command_on_master_and_workers($r$
|
||||||
CREATE OR REPLACE FUNCTION array_sort (json)
|
CREATE OR REPLACE FUNCTION array_sort (json)
|
||||||
RETURNS json LANGUAGE SQL
|
RETURNS json LANGUAGE SQL
|
||||||
AS $$
|
AS $$
|
||||||
|
@ -10,6 +11,12 @@ SELECT json_agg(value) FROM (
|
||||||
SELECT value FROM json_array_elements($1) ORDER BY value::jsonb
|
SELECT value FROM json_array_elements($1) ORDER BY value::jsonb
|
||||||
) t
|
) t
|
||||||
$$;
|
$$;
|
||||||
|
$r$);
|
||||||
|
run_command_on_master_and_workers
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
|
||||||
|
(1 row)
|
||||||
|
|
||||||
-- Check multi_cat_agg() aggregate which is used to implement json_agg()
|
-- Check multi_cat_agg() aggregate which is used to implement json_agg()
|
||||||
SELECT json_cat_agg(i) FROM
|
SELECT json_cat_agg(i) FROM
|
||||||
(VALUES ('[1,{"a":2}]'::json), ('[null]'::json), (NULL), ('["3",5,4]'::json)) AS t(i);
|
(VALUES ('[1,{"a":2}]'::json), ('[null]'::json), (NULL), ('["3",5,4]'::json)) AS t(i);
|
||||||
|
@ -135,46 +142,40 @@ SELECT l_quantity, array_sort(json_agg(l_orderkey * 2 + 1)) FROM lineitem WHERE
|
||||||
(4 rows)
|
(4 rows)
|
||||||
|
|
||||||
-- Check that we can execute json_agg() with an expression containing NULL values
|
-- Check that we can execute json_agg() with an expression containing NULL values
|
||||||
SELECT json_agg(case when l_quantity > 20 then l_quantity else NULL end)
|
SELECT array_sort(json_agg(case when l_quantity > 20 then l_quantity else NULL end))
|
||||||
FROM lineitem WHERE l_orderkey < 5;
|
FROM lineitem WHERE l_orderkey < 5;
|
||||||
json_agg
|
array_sort
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
[null, 36.00, null, 28.00, 24.00, 32.00, 38.00, 45.00, 49.00, 27.00, null, 28.00, 26.00, 30.00]
|
[null, null, null, 24.00, 26.00, 27.00, 28.00, 28.00, 30.00, 32.00, 36.00, 38.00, 45.00, 49.00]
|
||||||
(1 row)
|
(1 row)
|
||||||
|
|
||||||
-- Check that we can execute json_agg() with an expression containing different types
|
-- Check that we can execute json_agg() with an expression containing different types
|
||||||
SELECT json_agg(case when l_quantity > 20 then to_json(l_quantity) else '"f"'::json end)
|
SELECT array_sort(json_agg(case when l_quantity > 20 then to_json(l_quantity) else '"f"'::json end))
|
||||||
FROM lineitem WHERE l_orderkey < 5;
|
FROM lineitem WHERE l_orderkey < 5;
|
||||||
json_agg
|
array_sort
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
["f", 36.00, "f", 28.00, 24.00, 32.00, 38.00, 45.00, 49.00, 27.00, "f", 28.00, 26.00, 30.00]
|
["f", "f", "f", 24.00, 26.00, 27.00, 28.00, 28.00, 30.00, 32.00, 36.00, 38.00, 45.00, 49.00]
|
||||||
(1 row)
|
(1 row)
|
||||||
|
|
||||||
-- Check that we can execute json_agg() with an expression containing json arrays
|
-- Check that we can execute json_agg() with an expression containing json arrays
|
||||||
SELECT json_agg(json_build_array(l_quantity, l_shipdate))
|
SELECT array_sort(json_agg(json_build_array(l_quantity, l_shipdate)))
|
||||||
FROM lineitem WHERE l_orderkey < 3;
|
FROM lineitem WHERE l_orderkey < 3;
|
||||||
json_agg
|
array_sort
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
[[17.00, "1996-03-13"], [36.00, "1996-04-12"], [8.00, "1996-01-29"], [28.00, "1996-04-21"], [24.00, "1996-03-30"], [32.00, "1996-01-30"], [38.00, "1997-01-28"]]
|
[[8.00, "1996-01-29"], [17.00, "1996-03-13"], [24.00, "1996-03-30"], [28.00, "1996-04-21"], [32.00, "1996-01-30"], [36.00, "1996-04-12"], [38.00, "1997-01-28"]]
|
||||||
(1 row)
|
(1 row)
|
||||||
|
|
||||||
-- Check that we can execute json_agg() with an expression containing arrays
|
-- Check that we can execute json_agg() with an expression containing arrays
|
||||||
SELECT json_agg(ARRAY[l_quantity, l_orderkey])
|
SELECT array_sort(json_agg(ARRAY[l_quantity, l_orderkey]))
|
||||||
FROM lineitem WHERE l_orderkey < 3;
|
FROM lineitem WHERE l_orderkey < 3;
|
||||||
json_agg
|
array_sort
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
[[17.00,1], +
|
[[8.00,1], [17.00,1], [24.00,1], [28.00,1], [32.00,1], [36.00,1], [38.00,2]]
|
||||||
[36.00,1], +
|
|
||||||
[8.00,1], +
|
|
||||||
[28.00,1], +
|
|
||||||
[24.00,1], +
|
|
||||||
[32.00,1], +
|
|
||||||
[38.00,2]]
|
|
||||||
(1 row)
|
(1 row)
|
||||||
|
|
||||||
-- Check that we return NULL in case there are no input rows to json_agg()
|
-- Check that we return NULL in case there are no input rows to json_agg()
|
||||||
SELECT json_agg(l_orderkey) FROM lineitem WHERE l_quantity < 0;
|
SELECT array_sort(json_agg(l_orderkey)) FROM lineitem WHERE l_quantity < 0;
|
||||||
json_agg
|
array_sort
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
|
|
||||||
(1 row)
|
(1 row)
|
||||||
|
|
|
@ -8,6 +8,7 @@ RETURNS bigint LANGUAGE SQL
|
||||||
AS $$
|
AS $$
|
||||||
SELECT count(*) FROM (SELECT * FROM json_object_keys($1)) t
|
SELECT count(*) FROM (SELECT * FROM json_object_keys($1)) t
|
||||||
$$;
|
$$;
|
||||||
|
SELECT run_command_on_master_and_workers($r$
|
||||||
CREATE OR REPLACE FUNCTION keys_sort (json)
|
CREATE OR REPLACE FUNCTION keys_sort (json)
|
||||||
RETURNS json LANGUAGE SQL
|
RETURNS json LANGUAGE SQL
|
||||||
AS $$
|
AS $$
|
||||||
|
@ -15,6 +16,12 @@ SELECT json_object_agg(key, value) FROM (
|
||||||
SELECT * FROM json_each($1) ORDER BY key
|
SELECT * FROM json_each($1) ORDER BY key
|
||||||
) t
|
) t
|
||||||
$$;
|
$$;
|
||||||
|
$r$);
|
||||||
|
run_command_on_master_and_workers
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
|
||||||
|
(1 row)
|
||||||
|
|
||||||
-- Check multi_cat_agg() aggregate which is used to implement json_object_agg()
|
-- Check multi_cat_agg() aggregate which is used to implement json_object_agg()
|
||||||
SELECT json_cat_agg(i) FROM
|
SELECT json_cat_agg(i) FROM
|
||||||
(VALUES ('{"c":[], "b":2}'::json), (NULL), ('{"d":null, "a":{"b":3}, "b":2}'::json)) AS t(i);
|
(VALUES ('{"c":[], "b":2}'::json), (NULL), ('{"d":null, "a":{"b":3}, "b":2}'::json)) AS t(i);
|
||||||
|
@ -182,8 +189,8 @@ SELECT keys_sort(json_object_agg(l_orderkey::text || l_linenumber::text, ARRAY[l
|
||||||
(1 row)
|
(1 row)
|
||||||
|
|
||||||
-- Check that we return NULL in case there are no input rows to json_object_agg()
|
-- Check that we return NULL in case there are no input rows to json_object_agg()
|
||||||
SELECT json_object_agg(l_shipdate, l_orderkey) FROM lineitem WHERE l_quantity < 0;
|
SELECT keys_sort(json_object_agg(l_shipdate, l_orderkey)) FROM lineitem WHERE l_quantity < 0;
|
||||||
json_object_agg
|
keys_sort
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
|
|
||||||
(1 row)
|
(1 row)
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
--
|
--
|
||||||
SET citus.next_shard_id TO 520000;
|
SET citus.next_shard_id TO 520000;
|
||||||
SET citus.coordinator_aggregation_strategy TO 'disabled';
|
SET citus.coordinator_aggregation_strategy TO 'disabled';
|
||||||
|
SELECT run_command_on_master_and_workers($r$
|
||||||
CREATE OR REPLACE FUNCTION array_sort (jsonb)
|
CREATE OR REPLACE FUNCTION array_sort (jsonb)
|
||||||
RETURNS jsonb LANGUAGE SQL
|
RETURNS jsonb LANGUAGE SQL
|
||||||
AS $$
|
AS $$
|
||||||
|
@ -10,6 +11,12 @@ SELECT jsonb_agg(value) FROM (
|
||||||
SELECT * FROM jsonb_array_elements($1) ORDER BY 1
|
SELECT * FROM jsonb_array_elements($1) ORDER BY 1
|
||||||
) t
|
) t
|
||||||
$$;
|
$$;
|
||||||
|
$r$);
|
||||||
|
run_command_on_master_and_workers
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
|
||||||
|
(1 row)
|
||||||
|
|
||||||
-- Check multi_cat_agg() aggregate which is used to implement jsonb_agg()
|
-- Check multi_cat_agg() aggregate which is used to implement jsonb_agg()
|
||||||
SELECT jsonb_cat_agg(i) FROM
|
SELECT jsonb_cat_agg(i) FROM
|
||||||
(VALUES ('[1,{"a":2}]'::jsonb), ('[null]'::jsonb), (NULL), ('["3",5,4]'::jsonb)) AS t(i);
|
(VALUES ('[1,{"a":2}]'::jsonb), ('[null]'::jsonb), (NULL), ('["3",5,4]'::jsonb)) AS t(i);
|
||||||
|
@ -135,40 +142,41 @@ SELECT l_quantity, array_sort(jsonb_agg(l_orderkey * 2 + 1)) FROM lineitem WHERE
|
||||||
(4 rows)
|
(4 rows)
|
||||||
|
|
||||||
-- Check that we can execute jsonb_agg() with an expression containing NULL values
|
-- Check that we can execute jsonb_agg() with an expression containing NULL values
|
||||||
SELECT jsonb_agg(case when l_quantity > 20 then l_quantity else NULL end)
|
SELECT array_sort(jsonb_agg(case when l_quantity > 20 then l_quantity else NULL end))
|
||||||
FROM lineitem WHERE l_orderkey < 5;
|
FROM lineitem WHERE l_orderkey < 5;
|
||||||
jsonb_agg
|
array_sort
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
[null, 36.00, null, 28.00, 24.00, 32.00, 38.00, 45.00, 49.00, 27.00, null, 28.00, 26.00, 30.00]
|
[null, null, null, 24.00, 26.00, 27.00, 28.00, 28.00, 30.00, 32.00, 36.00, 38.00, 45.00, 49.00]
|
||||||
(1 row)
|
(1 row)
|
||||||
|
|
||||||
-- Check that we can execute jsonb_agg() with an expression containing different types
|
-- Check that we can execute jsonb_agg() with an expression containing different types
|
||||||
SELECT jsonb_agg(case when l_quantity > 20 then to_jsonb(l_quantity) else '"f"'::jsonb end)
|
SELECT array_sort(jsonb_agg(case when l_quantity > 20 then to_jsonb(l_quantity) else '"f"'::jsonb end))
|
||||||
FROM lineitem WHERE l_orderkey < 5;
|
FROM lineitem WHERE l_orderkey < 5;
|
||||||
jsonb_agg
|
array_sort
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
["f", 36.00, "f", 28.00, 24.00, 32.00, 38.00, 45.00, 49.00, 27.00, "f", 28.00, 26.00, 30.00]
|
["f", "f", "f", 24.00, 26.00, 27.00, 28.00, 28.00, 30.00, 32.00, 36.00, 38.00, 45.00, 49.00]
|
||||||
(1 row)
|
(1 row)
|
||||||
|
|
||||||
-- Check that we can execute jsonb_agg() with an expression containing jsonb arrays
|
-- Check that we can execute jsonb_agg() with an expression containing jsonb arrays
|
||||||
SELECT jsonb_agg(jsonb_build_array(l_quantity, l_shipdate))
|
SELECT array_sort(jsonb_agg(jsonb_build_array(l_quantity, l_shipdate)))
|
||||||
FROM lineitem WHERE l_orderkey < 3;
|
FROM lineitem WHERE l_orderkey < 3;
|
||||||
jsonb_agg
|
array_sort
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
[[17.00, "1996-03-13"], [36.00, "1996-04-12"], [8.00, "1996-01-29"], [28.00, "1996-04-21"], [24.00, "1996-03-30"], [32.00, "1996-01-30"], [38.00, "1997-01-28"]]
|
[[8.00, "1996-01-29"], [17.00, "1996-03-13"], [24.00, "1996-03-30"], [28.00, "1996-04-21"], [32.00, "1996-01-30"], [36.00, "1996-04-12"], [38.00, "1997-01-28"]]
|
||||||
(1 row)
|
(1 row)
|
||||||
|
|
||||||
-- Check that we can execute jsonb_agg() with an expression containing arrays
|
-- Check that we can execute jsonb_agg() with an expression containing arrays
|
||||||
SELECT jsonb_agg(ARRAY[l_quantity, l_orderkey])
|
SELECT array_sort(jsonb_agg(ARRAY[l_quantity, l_orderkey]))
|
||||||
FROM lineitem WHERE l_orderkey < 3;
|
FROM lineitem WHERE l_orderkey < 3;
|
||||||
jsonb_agg
|
array_sort
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
[[17.00, 1], [36.00, 1], [8.00, 1], [28.00, 1], [24.00, 1], [32.00, 1], [38.00, 2]]
|
[[8.00, 1], [17.00, 1], [24.00, 1], [28.00, 1], [32.00, 1], [36.00, 1], [38.00, 2]]
|
||||||
(1 row)
|
(1 row)
|
||||||
|
|
||||||
-- Check that we return NULL in case there are no input rows to jsonb_agg()
|
-- Check that we return NULL in case there are no input rows to jsonb_agg()
|
||||||
SELECT jsonb_agg(l_orderkey) FROM lineitem WHERE l_quantity < 0;
|
SELECT array_sort(jsonb_agg(l_orderkey))
|
||||||
jsonb_agg
|
FROM lineitem WHERE l_quantity < 0;
|
||||||
|
array_sort
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
|
|
||||||
(1 row)
|
(1 row)
|
||||||
|
|
|
@ -3,11 +3,32 @@
|
||||||
--
|
--
|
||||||
SET citus.next_shard_id TO 520000;
|
SET citus.next_shard_id TO 520000;
|
||||||
SET citus.coordinator_aggregation_strategy TO 'disabled';
|
SET citus.coordinator_aggregation_strategy TO 'disabled';
|
||||||
|
SELECT run_command_on_master_and_workers($r$
|
||||||
CREATE OR REPLACE FUNCTION count_keys (jsonb)
|
CREATE OR REPLACE FUNCTION count_keys (jsonb)
|
||||||
RETURNS bigint LANGUAGE SQL
|
RETURNS bigint LANGUAGE SQL
|
||||||
AS $$
|
AS $$
|
||||||
SELECT count(*) FROM (SELECT * FROM jsonb_object_keys($1)) t
|
SELECT count(*) FROM (SELECT * FROM jsonb_object_keys($1)) t
|
||||||
$$;
|
$$;
|
||||||
|
$r$);
|
||||||
|
run_command_on_master_and_workers
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
SELECT run_command_on_master_and_workers($r$
|
||||||
|
CREATE OR REPLACE FUNCTION keys_sort (jsonb)
|
||||||
|
RETURNS jsonb LANGUAGE SQL
|
||||||
|
AS $$
|
||||||
|
SELECT jsonb_object_agg(key, value) FROM (
|
||||||
|
SELECT * FROM jsonb_each($1) ORDER BY key
|
||||||
|
) t
|
||||||
|
$$;
|
||||||
|
$r$);
|
||||||
|
run_command_on_master_and_workers
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
|
||||||
|
(1 row)
|
||||||
|
|
||||||
-- Check multi_cat_agg() aggregate which is used to implement jsonb_object_agg()
|
-- Check multi_cat_agg() aggregate which is used to implement jsonb_object_agg()
|
||||||
SELECT jsonb_cat_agg(i) FROM
|
SELECT jsonb_cat_agg(i) FROM
|
||||||
(VALUES ('{"c":[], "b":2}'::jsonb), (NULL), ('{"d":null, "a":{"b":3}, "b":2}'::jsonb)) AS t(i);
|
(VALUES ('{"c":[], "b":2}'::jsonb), (NULL), ('{"d":null, "a":{"b":3}, "b":2}'::jsonb)) AS t(i);
|
||||||
|
@ -141,42 +162,42 @@ SELECT l_quantity, jsonb_object_agg(l_orderkey::text || l_linenumber::text, l_or
|
||||||
(4 rows)
|
(4 rows)
|
||||||
|
|
||||||
-- Check that we can execute jsonb_object_agg() with an expression containing NULL values
|
-- Check that we can execute jsonb_object_agg() with an expression containing NULL values
|
||||||
SELECT jsonb_object_agg(l_orderkey::text || l_linenumber::text,
|
SELECT keys_sort(jsonb_object_agg(l_orderkey::text || l_linenumber::text,
|
||||||
case when l_quantity > 20 then l_quantity else NULL end)
|
case when l_quantity > 20 then l_quantity else NULL end))
|
||||||
FROM lineitem WHERE l_orderkey < 5;
|
FROM lineitem WHERE l_orderkey < 5;
|
||||||
jsonb_object_agg
|
keys_sort
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
{"11": null, "12": 36.00, "13": null, "14": 28.00, "15": 24.00, "16": 32.00, "21": 38.00, "31": 45.00, "32": 49.00, "33": 27.00, "34": null, "35": 28.00, "36": 26.00, "41": 30.00}
|
{"11": null, "12": 36.00, "13": null, "14": 28.00, "15": 24.00, "16": 32.00, "21": 38.00, "31": 45.00, "32": 49.00, "33": 27.00, "34": null, "35": 28.00, "36": 26.00, "41": 30.00}
|
||||||
(1 row)
|
(1 row)
|
||||||
|
|
||||||
-- Check that we can execute jsonb_object_agg() with an expression containing different types
|
-- Check that we can execute jsonb_object_agg() with an expression containing different types
|
||||||
SELECT jsonb_object_agg(l_orderkey::text || l_linenumber::text,
|
SELECT keys_sort(jsonb_object_agg(l_orderkey::text || l_linenumber::text,
|
||||||
case when l_quantity > 20 then to_jsonb(l_quantity) else '"f"'::jsonb end)
|
case when l_quantity > 20 then to_jsonb(l_quantity) else '"f"'::jsonb end))
|
||||||
FROM lineitem WHERE l_orderkey < 5;
|
FROM lineitem WHERE l_orderkey < 5;
|
||||||
jsonb_object_agg
|
keys_sort
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
{"11": "f", "12": 36.00, "13": "f", "14": 28.00, "15": 24.00, "16": 32.00, "21": 38.00, "31": 45.00, "32": 49.00, "33": 27.00, "34": "f", "35": 28.00, "36": 26.00, "41": 30.00}
|
{"11": "f", "12": 36.00, "13": "f", "14": 28.00, "15": 24.00, "16": 32.00, "21": 38.00, "31": 45.00, "32": 49.00, "33": 27.00, "34": "f", "35": 28.00, "36": 26.00, "41": 30.00}
|
||||||
(1 row)
|
(1 row)
|
||||||
|
|
||||||
-- Check that we can execute jsonb_object_agg() with an expression containing jsonb arrays
|
-- Check that we can execute jsonb_object_agg() with an expression containing jsonb arrays
|
||||||
SELECT jsonb_object_agg(l_orderkey::text || l_linenumber::text, jsonb_build_array(l_quantity, l_shipdate))
|
SELECT keys_sort(jsonb_object_agg(l_orderkey::text || l_linenumber::text, jsonb_build_array(l_quantity, l_shipdate)))
|
||||||
FROM lineitem WHERE l_orderkey < 3;
|
FROM lineitem WHERE l_orderkey < 3;
|
||||||
jsonb_object_agg
|
keys_sort
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
{"11": [17.00, "1996-03-13"], "12": [36.00, "1996-04-12"], "13": [8.00, "1996-01-29"], "14": [28.00, "1996-04-21"], "15": [24.00, "1996-03-30"], "16": [32.00, "1996-01-30"], "21": [38.00, "1997-01-28"]}
|
{"11": [17.00, "1996-03-13"], "12": [36.00, "1996-04-12"], "13": [8.00, "1996-01-29"], "14": [28.00, "1996-04-21"], "15": [24.00, "1996-03-30"], "16": [32.00, "1996-01-30"], "21": [38.00, "1997-01-28"]}
|
||||||
(1 row)
|
(1 row)
|
||||||
|
|
||||||
-- Check that we can execute jsonb_object_agg() with an expression containing arrays
|
-- Check that we can execute jsonb_object_agg() with an expression containing arrays
|
||||||
SELECT jsonb_object_agg(l_orderkey::text || l_linenumber::text, ARRAY[l_quantity, l_orderkey])
|
SELECT keys_sort(jsonb_object_agg(l_orderkey::text || l_linenumber::text, ARRAY[l_quantity, l_orderkey]))
|
||||||
FROM lineitem WHERE l_orderkey < 3;
|
FROM lineitem WHERE l_orderkey < 3;
|
||||||
jsonb_object_agg
|
keys_sort
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
{"11": [17.00, 1], "12": [36.00, 1], "13": [8.00, 1], "14": [28.00, 1], "15": [24.00, 1], "16": [32.00, 1], "21": [38.00, 2]}
|
{"11": [17.00, 1], "12": [36.00, 1], "13": [8.00, 1], "14": [28.00, 1], "15": [24.00, 1], "16": [32.00, 1], "21": [38.00, 2]}
|
||||||
(1 row)
|
(1 row)
|
||||||
|
|
||||||
-- Check that we return NULL in case there are no input rows to jsonb_object_agg()
|
-- Check that we return NULL in case there are no input rows to jsonb_object_agg()
|
||||||
SELECT jsonb_object_agg(l_shipdate, l_orderkey) FROM lineitem WHERE l_quantity < 0;
|
SELECT keys_sort(jsonb_object_agg(l_shipdate, l_orderkey)) FROM lineitem WHERE l_quantity < 0;
|
||||||
jsonb_object_agg
|
keys_sort
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
|
|
||||||
(1 row)
|
(1 row)
|
||||||
|
|
|
@ -0,0 +1,63 @@
|
||||||
|
--
|
||||||
|
-- MULTI_LARGE_SHARDID
|
||||||
|
--
|
||||||
|
-- Load data into distributed tables, and run TPC-H query #1 and #6. This test
|
||||||
|
-- differs from previous tests in that it modifies the *internal* shardId
|
||||||
|
-- generator, forcing the distributed database to use 64-bit shard identifiers.
|
||||||
|
ALTER SEQUENCE pg_catalog.pg_dist_shardid_seq RESTART 100200300400500;
|
||||||
|
CREATE TABLE lineitem_large_shard_id AS SELECT * FROM lineitem;
|
||||||
|
SELECT create_distributed_table('lineitem_large_shard_id', 'l_orderkey');
|
||||||
|
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($$public.lineitem_large_shard_id$$)
|
||||||
|
create_distributed_table
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
-- Query #1 from the TPC-H decision support benchmark.
|
||||||
|
SELECT
|
||||||
|
l_returnflag,
|
||||||
|
l_linestatus,
|
||||||
|
sum(l_quantity) as sum_qty,
|
||||||
|
sum(l_extendedprice) as sum_base_price,
|
||||||
|
sum(l_extendedprice * (1 - l_discount)) as sum_disc_price,
|
||||||
|
sum(l_extendedprice * (1 - l_discount) * (1 + l_tax)) as sum_charge,
|
||||||
|
avg(l_quantity) as avg_qty,
|
||||||
|
avg(l_extendedprice) as avg_price,
|
||||||
|
avg(l_discount) as avg_disc,
|
||||||
|
count(*) as count_order
|
||||||
|
FROM
|
||||||
|
lineitem_large_shard_id
|
||||||
|
WHERE
|
||||||
|
l_shipdate <= date '1998-12-01' - interval '90 days'
|
||||||
|
GROUP BY
|
||||||
|
l_returnflag,
|
||||||
|
l_linestatus
|
||||||
|
ORDER BY
|
||||||
|
l_returnflag,
|
||||||
|
l_linestatus;
|
||||||
|
l_returnflag | l_linestatus | sum_qty | sum_base_price | sum_disc_price | sum_charge | avg_qty | avg_price | avg_disc | count_order
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
A | F | 75465.00 | 113619873.63 | 107841287.0728 | 112171153.245923 | 25.6334918478260870 | 38593.707075407609 | 0.05055027173913043478 | 2944
|
||||||
|
N | F | 2022.00 | 3102551.45 | 2952540.7118 | 3072642.770652 | 26.6052631578947368 | 40823.045394736842 | 0.05263157894736842105 | 76
|
||||||
|
N | O | 149778.00 | 224706948.16 | 213634857.6854 | 222134071.929801 | 25.4594594594594595 | 38195.979629440762 | 0.04939486656467788543 | 5883
|
||||||
|
R | F | 73156.00 | 108937979.73 | 103516623.6698 | 107743533.784328 | 25.2175112030334367 | 37551.871675284385 | 0.04983798690106859704 | 2901
|
||||||
|
(4 rows)
|
||||||
|
|
||||||
|
-- Query #6 from the TPC-H decision support benchmark.
|
||||||
|
SELECT
|
||||||
|
sum(l_extendedprice * l_discount) as revenue
|
||||||
|
FROM
|
||||||
|
lineitem_large_shard_id
|
||||||
|
WHERE
|
||||||
|
l_shipdate >= date '1994-01-01'
|
||||||
|
and l_shipdate < date '1994-01-01' + interval '1 year'
|
||||||
|
and l_discount between 0.06 - 0.01 and 0.06 + 0.01
|
||||||
|
and l_quantity < 24;
|
||||||
|
revenue
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
243277.7858
|
||||||
|
(1 row)
|
||||||
|
|
|
@ -257,6 +257,7 @@ SELECT l_orderkey, max(l_shipdate)
|
||||||
FROM lineitem
|
FROM lineitem
|
||||||
GROUP BY l_orderkey
|
GROUP BY l_orderkey
|
||||||
ORDER BY 2 DESC, 1 LIMIT 5;
|
ORDER BY 2 DESC, 1 LIMIT 5;
|
||||||
|
DEBUG: push down of limit count: 5
|
||||||
l_orderkey | max
|
l_orderkey | max
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
4678 | 11-27-1998
|
4678 | 11-27-1998
|
||||||
|
|
|
@ -39,7 +39,7 @@ DEBUG: push down of limit count: 600
|
||||||
153937 | 2761321906
|
153937 | 2761321906
|
||||||
199283 | 2726988572
|
199283 | 2726988572
|
||||||
185925 | 2672114100
|
185925 | 2672114100
|
||||||
196629 | 2622637602
|
157064 | 2614644408
|
||||||
149926 | 2606013732
|
149926 | 2606013732
|
||||||
(10 rows)
|
(10 rows)
|
||||||
|
|
||||||
|
@ -82,9 +82,9 @@ DEBUG: push down of limit count: 150
|
||||||
685 | Customer#000000685 | 37
|
685 | Customer#000000685 | 37
|
||||||
472 | Customer#000000472 | 36
|
472 | Customer#000000472 | 36
|
||||||
643 | Customer#000000643 | 34
|
643 | Customer#000000643 | 34
|
||||||
226 | Customer#000000226 | 33
|
|
||||||
496 | Customer#000000496 | 32
|
|
||||||
304 | Customer#000000304 | 31
|
304 | Customer#000000304 | 31
|
||||||
|
556 | Customer#000000556 | 31
|
||||||
|
613 | Customer#000000613 | 31
|
||||||
(10 rows)
|
(10 rows)
|
||||||
|
|
||||||
-- We now test scenarios where applying the limit optimization wouldn't produce
|
-- We now test scenarios where applying the limit optimization wouldn't produce
|
||||||
|
|
|
@ -13,13 +13,13 @@ SET citus.enable_repartition_joins to ON;
|
||||||
SELECT shardminvalue, shardmaxvalue from pg_dist_shard WHERE shardid = 290000;
|
SELECT shardminvalue, shardmaxvalue from pg_dist_shard WHERE shardid = 290000;
|
||||||
shardminvalue | shardmaxvalue
|
shardminvalue | shardmaxvalue
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
1 | 5986
|
1 | 1000
|
||||||
(1 row)
|
(1 row)
|
||||||
|
|
||||||
SELECT shardminvalue, shardmaxvalue from pg_dist_shard WHERE shardid = 290001;
|
SELECT shardminvalue, shardmaxvalue from pg_dist_shard WHERE shardid = 290001;
|
||||||
shardminvalue | shardmaxvalue
|
shardminvalue | shardmaxvalue
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
8997 | 14947
|
1 | 1000
|
||||||
(1 row)
|
(1 row)
|
||||||
|
|
||||||
-- Check that partition and join pruning works when min/max values exist
|
-- Check that partition and join pruning works when min/max values exist
|
||||||
|
@ -28,23 +28,21 @@ SELECT coordinator_plan($Q$
|
||||||
EXPLAIN (COSTS FALSE)
|
EXPLAIN (COSTS FALSE)
|
||||||
SELECT l_orderkey, l_linenumber, l_shipdate FROM lineitem WHERE l_orderkey = 9030 or l_orderkey = 1;
|
SELECT l_orderkey, l_linenumber, l_shipdate FROM lineitem WHERE l_orderkey = 9030 or l_orderkey = 1;
|
||||||
$Q$);
|
$Q$);
|
||||||
DEBUG: Router planner does not support append-partitioned tables.
|
DEBUG: Creating router plan
|
||||||
CONTEXT: PL/pgSQL function coordinator_plan(text) line XX at FOR over EXECUTE statement
|
|
||||||
LOG: join order: [ "lineitem" ]
|
|
||||||
CONTEXT: PL/pgSQL function coordinator_plan(text) line XX at FOR over EXECUTE statement
|
CONTEXT: PL/pgSQL function coordinator_plan(text) line XX at FOR over EXECUTE statement
|
||||||
coordinator_plan
|
coordinator_plan
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
Custom Scan (Citus Adaptive)
|
Custom Scan (Citus Adaptive)
|
||||||
Task Count: 2
|
Task Count: 1
|
||||||
(2 rows)
|
(2 rows)
|
||||||
|
|
||||||
EXPLAIN (COSTS FALSE)
|
EXPLAIN (COSTS FALSE)
|
||||||
SELECT sum(l_linenumber), avg(l_linenumber) FROM lineitem, orders
|
SELECT sum(l_linenumber), avg(l_linenumber) FROM lineitem, orders
|
||||||
WHERE l_orderkey = o_orderkey;
|
WHERE l_orderkey = o_orderkey;
|
||||||
DEBUG: Router planner does not support append-partitioned tables.
|
DEBUG: Router planner cannot handle multi-shard select queries
|
||||||
LOG: join order: [ "lineitem" ][ local partition join "orders" ]
|
LOG: join order: [ "lineitem" ][ local partition join "orders" ]
|
||||||
DEBUG: join prunable for intervals [1,5986] and [8997,14947]
|
DEBUG: join prunable for intervals [-2147483648,-1] and [0,2147483647]
|
||||||
DEBUG: join prunable for intervals [8997,14947] and [1,5986]
|
DEBUG: join prunable for intervals [0,2147483647] and [-2147483648,-1]
|
||||||
QUERY PLAN
|
QUERY PLAN
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
Aggregate
|
Aggregate
|
||||||
|
@ -56,17 +54,17 @@ DEBUG: join prunable for intervals [8997,14947] and [1,5986]
|
||||||
-> Aggregate
|
-> Aggregate
|
||||||
-> Hash Join
|
-> Hash Join
|
||||||
Hash Cond: (lineitem.l_orderkey = orders.o_orderkey)
|
Hash Cond: (lineitem.l_orderkey = orders.o_orderkey)
|
||||||
-> Seq Scan on lineitem_290000 lineitem
|
-> Seq Scan on lineitem_360000 lineitem
|
||||||
-> Hash
|
-> Hash
|
||||||
-> Seq Scan on orders_290002 orders
|
-> Seq Scan on orders_360002 orders
|
||||||
-> Task
|
-> Task
|
||||||
Node: host=localhost port=xxxxx dbname=regression
|
Node: host=localhost port=xxxxx dbname=regression
|
||||||
-> Aggregate
|
-> Aggregate
|
||||||
-> Hash Join
|
-> Hash Join
|
||||||
Hash Cond: (lineitem.l_orderkey = orders.o_orderkey)
|
Hash Cond: (lineitem.l_orderkey = orders.o_orderkey)
|
||||||
-> Seq Scan on lineitem_290001 lineitem
|
-> Seq Scan on lineitem_360001 lineitem
|
||||||
-> Hash
|
-> Hash
|
||||||
-> Seq Scan on orders_290003 orders
|
-> Seq Scan on orders_360003 orders
|
||||||
(20 rows)
|
(20 rows)
|
||||||
|
|
||||||
-- Now set the minimum value for a shard to null. Then check that we don't apply
|
-- Now set the minimum value for a shard to null. Then check that we don't apply
|
||||||
|
@ -77,20 +75,22 @@ SELECT coordinator_plan($Q$
|
||||||
EXPLAIN (COSTS FALSE)
|
EXPLAIN (COSTS FALSE)
|
||||||
SELECT l_orderkey, l_linenumber, l_shipdate FROM lineitem WHERE l_orderkey = 9030;
|
SELECT l_orderkey, l_linenumber, l_shipdate FROM lineitem WHERE l_orderkey = 9030;
|
||||||
$Q$);
|
$Q$);
|
||||||
DEBUG: Router planner does not support append-partitioned tables.
|
DEBUG: Distributed planning for a fast-path router query
|
||||||
CONTEXT: PL/pgSQL function coordinator_plan(text) line XX at FOR over EXECUTE statement
|
CONTEXT: PL/pgSQL function coordinator_plan(text) line XX at FOR over EXECUTE statement
|
||||||
LOG: join order: [ "lineitem" ]
|
DEBUG: Creating router plan
|
||||||
|
CONTEXT: PL/pgSQL function coordinator_plan(text) line XX at FOR over EXECUTE statement
|
||||||
|
DEBUG: query has a single distribution column value: 9030
|
||||||
CONTEXT: PL/pgSQL function coordinator_plan(text) line XX at FOR over EXECUTE statement
|
CONTEXT: PL/pgSQL function coordinator_plan(text) line XX at FOR over EXECUTE statement
|
||||||
coordinator_plan
|
coordinator_plan
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
Custom Scan (Citus Adaptive)
|
Custom Scan (Citus Adaptive)
|
||||||
Task Count: 2
|
Task Count: 1
|
||||||
(2 rows)
|
(2 rows)
|
||||||
|
|
||||||
EXPLAIN (COSTS FALSE)
|
EXPLAIN (COSTS FALSE)
|
||||||
SELECT sum(l_linenumber), avg(l_linenumber) FROM lineitem, orders
|
SELECT sum(l_linenumber), avg(l_linenumber) FROM lineitem, orders
|
||||||
WHERE l_partkey = o_custkey;
|
WHERE l_partkey = o_custkey;
|
||||||
DEBUG: Router planner does not support append-partitioned tables.
|
DEBUG: Router planner cannot handle multi-shard select queries
|
||||||
LOG: join order: [ "lineitem" ][ dual partition join "orders" ]
|
LOG: join order: [ "lineitem" ][ dual partition join "orders" ]
|
||||||
DEBUG: join prunable for task partitionId 0 and 1
|
DEBUG: join prunable for task partitionId 0 and 1
|
||||||
DEBUG: join prunable for task partitionId 0 and 2
|
DEBUG: join prunable for task partitionId 0 and 2
|
||||||
|
@ -142,20 +142,22 @@ SELECT coordinator_plan($Q$
|
||||||
EXPLAIN (COSTS FALSE)
|
EXPLAIN (COSTS FALSE)
|
||||||
SELECT l_orderkey, l_linenumber, l_shipdate FROM lineitem WHERE l_orderkey = 9030;
|
SELECT l_orderkey, l_linenumber, l_shipdate FROM lineitem WHERE l_orderkey = 9030;
|
||||||
$Q$);
|
$Q$);
|
||||||
DEBUG: Router planner does not support append-partitioned tables.
|
DEBUG: Distributed planning for a fast-path router query
|
||||||
CONTEXT: PL/pgSQL function coordinator_plan(text) line XX at FOR over EXECUTE statement
|
CONTEXT: PL/pgSQL function coordinator_plan(text) line XX at FOR over EXECUTE statement
|
||||||
LOG: join order: [ "lineitem" ]
|
DEBUG: Creating router plan
|
||||||
|
CONTEXT: PL/pgSQL function coordinator_plan(text) line XX at FOR over EXECUTE statement
|
||||||
|
DEBUG: query has a single distribution column value: 9030
|
||||||
CONTEXT: PL/pgSQL function coordinator_plan(text) line XX at FOR over EXECUTE statement
|
CONTEXT: PL/pgSQL function coordinator_plan(text) line XX at FOR over EXECUTE statement
|
||||||
coordinator_plan
|
coordinator_plan
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
Custom Scan (Citus Adaptive)
|
Custom Scan (Citus Adaptive)
|
||||||
Task Count: 2
|
Task Count: 1
|
||||||
(2 rows)
|
(2 rows)
|
||||||
|
|
||||||
EXPLAIN (COSTS FALSE)
|
EXPLAIN (COSTS FALSE)
|
||||||
SELECT sum(l_linenumber), avg(l_linenumber) FROM lineitem, orders
|
SELECT sum(l_linenumber), avg(l_linenumber) FROM lineitem, orders
|
||||||
WHERE l_partkey = o_custkey;
|
WHERE l_partkey = o_custkey;
|
||||||
DEBUG: Router planner does not support append-partitioned tables.
|
DEBUG: Router planner cannot handle multi-shard select queries
|
||||||
LOG: join order: [ "lineitem" ][ dual partition join "orders" ]
|
LOG: join order: [ "lineitem" ][ dual partition join "orders" ]
|
||||||
DEBUG: join prunable for task partitionId 0 and 1
|
DEBUG: join prunable for task partitionId 0 and 1
|
||||||
DEBUG: join prunable for task partitionId 0 and 2
|
DEBUG: join prunable for task partitionId 0 and 2
|
||||||
|
@ -207,9 +209,11 @@ SELECT coordinator_plan($Q$
|
||||||
EXPLAIN (COSTS FALSE)
|
EXPLAIN (COSTS FALSE)
|
||||||
SELECT l_orderkey, l_linenumber, l_shipdate FROM lineitem WHERE l_orderkey = 9030;
|
SELECT l_orderkey, l_linenumber, l_shipdate FROM lineitem WHERE l_orderkey = 9030;
|
||||||
$Q$);
|
$Q$);
|
||||||
DEBUG: Router planner does not support append-partitioned tables.
|
DEBUG: Distributed planning for a fast-path router query
|
||||||
CONTEXT: PL/pgSQL function coordinator_plan(text) line XX at FOR over EXECUTE statement
|
CONTEXT: PL/pgSQL function coordinator_plan(text) line XX at FOR over EXECUTE statement
|
||||||
LOG: join order: [ "lineitem" ]
|
DEBUG: Creating router plan
|
||||||
|
CONTEXT: PL/pgSQL function coordinator_plan(text) line XX at FOR over EXECUTE statement
|
||||||
|
DEBUG: query has a single distribution column value: 9030
|
||||||
CONTEXT: PL/pgSQL function coordinator_plan(text) line XX at FOR over EXECUTE statement
|
CONTEXT: PL/pgSQL function coordinator_plan(text) line XX at FOR over EXECUTE statement
|
||||||
coordinator_plan
|
coordinator_plan
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
|
@ -220,7 +224,7 @@ CONTEXT: PL/pgSQL function coordinator_plan(text) line XX at FOR over EXECUTE s
|
||||||
EXPLAIN (COSTS FALSE)
|
EXPLAIN (COSTS FALSE)
|
||||||
SELECT sum(l_linenumber), avg(l_linenumber) FROM lineitem, orders
|
SELECT sum(l_linenumber), avg(l_linenumber) FROM lineitem, orders
|
||||||
WHERE l_partkey = o_custkey;
|
WHERE l_partkey = o_custkey;
|
||||||
DEBUG: Router planner does not support append-partitioned tables.
|
DEBUG: Router planner cannot handle multi-shard select queries
|
||||||
LOG: join order: [ "lineitem" ][ dual partition join "orders" ]
|
LOG: join order: [ "lineitem" ][ dual partition join "orders" ]
|
||||||
DEBUG: join prunable for task partitionId 0 and 1
|
DEBUG: join prunable for task partitionId 0 and 1
|
||||||
DEBUG: join prunable for task partitionId 0 and 2
|
DEBUG: join prunable for task partitionId 0 and 2
|
||||||
|
|
|
@ -64,8 +64,8 @@ GROUP BY
|
||||||
ORDER BY
|
ORDER BY
|
||||||
l_partkey, o_orderkey;
|
l_partkey, o_orderkey;
|
||||||
DEBUG: Router planner does not support append-partitioned tables.
|
DEBUG: Router planner does not support append-partitioned tables.
|
||||||
DEBUG: join prunable for intervals [1,5986] and [8997,14947]
|
DEBUG: join prunable for intervals [-2147483648,-1] and [0,2147483647]
|
||||||
DEBUG: join prunable for intervals [8997,14947] and [1,5986]
|
DEBUG: join prunable for intervals [0,2147483647] and [-2147483648,-1]
|
||||||
DEBUG: join prunable for intervals [1,1000] and [6001,7000]
|
DEBUG: join prunable for intervals [1,1000] and [6001,7000]
|
||||||
DEBUG: join prunable for intervals [6001,7000] and [1,1000]
|
DEBUG: join prunable for intervals [6001,7000] and [1,1000]
|
||||||
DEBUG: pruning merge fetch taskId 1
|
DEBUG: pruning merge fetch taskId 1
|
||||||
|
@ -128,7 +128,7 @@ GROUP BY
|
||||||
l_partkey, o_orderkey
|
l_partkey, o_orderkey
|
||||||
ORDER BY
|
ORDER BY
|
||||||
l_partkey, o_orderkey;
|
l_partkey, o_orderkey;
|
||||||
DEBUG: Router planner does not support append-partitioned tables.
|
DEBUG: Router planner cannot handle multi-shard select queries
|
||||||
DEBUG: join prunable for task partitionId 0 and 1
|
DEBUG: join prunable for task partitionId 0 and 1
|
||||||
DEBUG: join prunable for task partitionId 0 and 2
|
DEBUG: join prunable for task partitionId 0 and 2
|
||||||
DEBUG: join prunable for task partitionId 0 and 3
|
DEBUG: join prunable for task partitionId 0 and 3
|
||||||
|
@ -172,7 +172,7 @@ GROUP BY
|
||||||
o_orderkey
|
o_orderkey
|
||||||
ORDER BY
|
ORDER BY
|
||||||
o_orderkey;
|
o_orderkey;
|
||||||
DEBUG: Router planner does not support append-partitioned tables.
|
DEBUG: Router planner cannot handle multi-shard select queries
|
||||||
DEBUG: join prunable for task partitionId 0 and 1
|
DEBUG: join prunable for task partitionId 0 and 1
|
||||||
DEBUG: join prunable for task partitionId 0 and 2
|
DEBUG: join prunable for task partitionId 0 and 2
|
||||||
DEBUG: join prunable for task partitionId 0 and 3
|
DEBUG: join prunable for task partitionId 0 and 3
|
||||||
|
@ -218,7 +218,7 @@ GROUP BY
|
||||||
o_orderkey, o_shippriority
|
o_orderkey, o_shippriority
|
||||||
ORDER BY
|
ORDER BY
|
||||||
o_orderkey;
|
o_orderkey;
|
||||||
DEBUG: Router planner does not support append-partitioned tables.
|
DEBUG: Router planner cannot handle multi-shard select queries
|
||||||
DEBUG: join prunable for task partitionId 0 and 1
|
DEBUG: join prunable for task partitionId 0 and 1
|
||||||
DEBUG: join prunable for task partitionId 0 and 2
|
DEBUG: join prunable for task partitionId 0 and 2
|
||||||
DEBUG: join prunable for task partitionId 0 and 3
|
DEBUG: join prunable for task partitionId 0 and 3
|
||||||
|
@ -262,7 +262,7 @@ GROUP BY
|
||||||
o_orderkey, o_shippriority
|
o_orderkey, o_shippriority
|
||||||
ORDER BY
|
ORDER BY
|
||||||
o_orderkey;
|
o_orderkey;
|
||||||
DEBUG: Router planner does not support append-partitioned tables.
|
DEBUG: Router planner cannot handle multi-shard select queries
|
||||||
DEBUG: join prunable for task partitionId 0 and 1
|
DEBUG: join prunable for task partitionId 0 and 1
|
||||||
DEBUG: join prunable for task partitionId 0 and 2
|
DEBUG: join prunable for task partitionId 0 and 2
|
||||||
DEBUG: join prunable for task partitionId 0 and 3
|
DEBUG: join prunable for task partitionId 0 and 3
|
||||||
|
|
|
@ -72,15 +72,27 @@ WHERE
|
||||||
o_custkey = c_custkey AND
|
o_custkey = c_custkey AND
|
||||||
o_orderkey < 0;
|
o_orderkey < 0;
|
||||||
DEBUG: Router planner does not support append-partitioned tables.
|
DEBUG: Router planner does not support append-partitioned tables.
|
||||||
|
DEBUG: join prunable for intervals [1,1000] and [1001,2000]
|
||||||
|
DEBUG: join prunable for intervals [1,1000] and [6001,7000]
|
||||||
|
DEBUG: join prunable for intervals [1001,2000] and [1,1000]
|
||||||
|
DEBUG: join prunable for intervals [1001,2000] and [6001,7000]
|
||||||
|
DEBUG: join prunable for intervals [6001,7000] and [1,1000]
|
||||||
|
DEBUG: join prunable for intervals [6001,7000] and [1001,2000]
|
||||||
|
DEBUG: pruning merge fetch taskId 1
|
||||||
|
DETAIL: Creating dependency on merge taskId 3
|
||||||
|
DEBUG: pruning merge fetch taskId 3
|
||||||
|
DETAIL: Creating dependency on merge taskId 6
|
||||||
|
DEBUG: pruning merge fetch taskId 5
|
||||||
|
DETAIL: Creating dependency on merge taskId 9
|
||||||
QUERY PLAN
|
QUERY PLAN
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
Aggregate
|
Aggregate
|
||||||
-> Custom Scan (Citus Adaptive)
|
-> Custom Scan (Citus Adaptive)
|
||||||
Task Count: 0
|
Task Count: 3
|
||||||
Tasks Shown: None, not supported for re-partition queries
|
Tasks Shown: None, not supported for re-partition queries
|
||||||
-> MapMergeJob
|
-> MapMergeJob
|
||||||
Map Task Count: 0
|
Map Task Count: 2
|
||||||
Merge Task Count: 0
|
Merge Task Count: 3
|
||||||
(7 rows)
|
(7 rows)
|
||||||
|
|
||||||
SELECT
|
SELECT
|
||||||
|
@ -89,8 +101,20 @@ FROM
|
||||||
orders, customer_append
|
orders, customer_append
|
||||||
WHERE
|
WHERE
|
||||||
o_custkey = c_custkey AND
|
o_custkey = c_custkey AND
|
||||||
o_orderkey < 0;
|
o_orderkey < 0 AND o_orderkey > 0;
|
||||||
DEBUG: Router planner does not support append-partitioned tables.
|
DEBUG: Router planner does not support append-partitioned tables.
|
||||||
|
DEBUG: join prunable for intervals [1,1000] and [1001,2000]
|
||||||
|
DEBUG: join prunable for intervals [1,1000] and [6001,7000]
|
||||||
|
DEBUG: join prunable for intervals [1001,2000] and [1,1000]
|
||||||
|
DEBUG: join prunable for intervals [1001,2000] and [6001,7000]
|
||||||
|
DEBUG: join prunable for intervals [6001,7000] and [1,1000]
|
||||||
|
DEBUG: join prunable for intervals [6001,7000] and [1001,2000]
|
||||||
|
DEBUG: pruning merge fetch taskId 1
|
||||||
|
DETAIL: Creating dependency on merge taskId 3
|
||||||
|
DEBUG: pruning merge fetch taskId 3
|
||||||
|
DETAIL: Creating dependency on merge taskId 6
|
||||||
|
DEBUG: pruning merge fetch taskId 5
|
||||||
|
DETAIL: Creating dependency on merge taskId 9
|
||||||
count
|
count
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
0
|
0
|
||||||
|
@ -233,17 +257,45 @@ FROM
|
||||||
lineitem, customer_append
|
lineitem, customer_append
|
||||||
WHERE
|
WHERE
|
||||||
l_partkey = c_nationkey AND
|
l_partkey = c_nationkey AND
|
||||||
l_orderkey < 0;
|
l_orderkey < 0 AND l_orderkey > 0;
|
||||||
DEBUG: Router planner does not support append-partitioned tables.
|
DEBUG: Router planner does not support append-partitioned tables.
|
||||||
|
DEBUG: join prunable for task partitionId 0 and 1
|
||||||
|
DEBUG: join prunable for task partitionId 0 and 2
|
||||||
|
DEBUG: join prunable for task partitionId 0 and 3
|
||||||
|
DEBUG: join prunable for task partitionId 1 and 0
|
||||||
|
DEBUG: join prunable for task partitionId 1 and 2
|
||||||
|
DEBUG: join prunable for task partitionId 1 and 3
|
||||||
|
DEBUG: join prunable for task partitionId 2 and 0
|
||||||
|
DEBUG: join prunable for task partitionId 2 and 1
|
||||||
|
DEBUG: join prunable for task partitionId 2 and 3
|
||||||
|
DEBUG: join prunable for task partitionId 3 and 0
|
||||||
|
DEBUG: join prunable for task partitionId 3 and 1
|
||||||
|
DEBUG: join prunable for task partitionId 3 and 2
|
||||||
|
DEBUG: pruning merge fetch taskId 1
|
||||||
|
DETAIL: Creating dependency on merge taskId 3
|
||||||
|
DEBUG: pruning merge fetch taskId 2
|
||||||
|
DETAIL: Creating dependency on merge taskId 4
|
||||||
|
DEBUG: pruning merge fetch taskId 4
|
||||||
|
DETAIL: Creating dependency on merge taskId 6
|
||||||
|
DEBUG: pruning merge fetch taskId 5
|
||||||
|
DETAIL: Creating dependency on merge taskId 8
|
||||||
|
DEBUG: pruning merge fetch taskId 7
|
||||||
|
DETAIL: Creating dependency on merge taskId 9
|
||||||
|
DEBUG: pruning merge fetch taskId 8
|
||||||
|
DETAIL: Creating dependency on merge taskId 12
|
||||||
|
DEBUG: pruning merge fetch taskId 10
|
||||||
|
DETAIL: Creating dependency on merge taskId 12
|
||||||
|
DEBUG: pruning merge fetch taskId 11
|
||||||
|
DETAIL: Creating dependency on merge taskId 16
|
||||||
QUERY PLAN
|
QUERY PLAN
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
Aggregate
|
Aggregate
|
||||||
-> Custom Scan (Citus Adaptive)
|
-> Custom Scan (Citus Adaptive)
|
||||||
Task Count: 0
|
Task Count: 4
|
||||||
Tasks Shown: None, not supported for re-partition queries
|
Tasks Shown: None, not supported for re-partition queries
|
||||||
-> MapMergeJob
|
-> MapMergeJob
|
||||||
Map Task Count: 0
|
Map Task Count: 2
|
||||||
Merge Task Count: 0
|
Merge Task Count: 4
|
||||||
-> MapMergeJob
|
-> MapMergeJob
|
||||||
Map Task Count: 3
|
Map Task Count: 3
|
||||||
Merge Task Count: 4
|
Merge Task Count: 4
|
||||||
|
@ -255,8 +307,36 @@ FROM
|
||||||
lineitem, customer_append
|
lineitem, customer_append
|
||||||
WHERE
|
WHERE
|
||||||
l_partkey = c_nationkey AND
|
l_partkey = c_nationkey AND
|
||||||
l_orderkey < 0;
|
l_orderkey < 0 AND l_orderkey > 0;
|
||||||
DEBUG: Router planner does not support append-partitioned tables.
|
DEBUG: Router planner does not support append-partitioned tables.
|
||||||
|
DEBUG: join prunable for task partitionId 0 and 1
|
||||||
|
DEBUG: join prunable for task partitionId 0 and 2
|
||||||
|
DEBUG: join prunable for task partitionId 0 and 3
|
||||||
|
DEBUG: join prunable for task partitionId 1 and 0
|
||||||
|
DEBUG: join prunable for task partitionId 1 and 2
|
||||||
|
DEBUG: join prunable for task partitionId 1 and 3
|
||||||
|
DEBUG: join prunable for task partitionId 2 and 0
|
||||||
|
DEBUG: join prunable for task partitionId 2 and 1
|
||||||
|
DEBUG: join prunable for task partitionId 2 and 3
|
||||||
|
DEBUG: join prunable for task partitionId 3 and 0
|
||||||
|
DEBUG: join prunable for task partitionId 3 and 1
|
||||||
|
DEBUG: join prunable for task partitionId 3 and 2
|
||||||
|
DEBUG: pruning merge fetch taskId 1
|
||||||
|
DETAIL: Creating dependency on merge taskId 3
|
||||||
|
DEBUG: pruning merge fetch taskId 2
|
||||||
|
DETAIL: Creating dependency on merge taskId 4
|
||||||
|
DEBUG: pruning merge fetch taskId 4
|
||||||
|
DETAIL: Creating dependency on merge taskId 6
|
||||||
|
DEBUG: pruning merge fetch taskId 5
|
||||||
|
DETAIL: Creating dependency on merge taskId 8
|
||||||
|
DEBUG: pruning merge fetch taskId 7
|
||||||
|
DETAIL: Creating dependency on merge taskId 9
|
||||||
|
DEBUG: pruning merge fetch taskId 8
|
||||||
|
DETAIL: Creating dependency on merge taskId 12
|
||||||
|
DEBUG: pruning merge fetch taskId 10
|
||||||
|
DETAIL: Creating dependency on merge taskId 12
|
||||||
|
DEBUG: pruning merge fetch taskId 11
|
||||||
|
DETAIL: Creating dependency on merge taskId 16
|
||||||
count
|
count
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
0
|
0
|
||||||
|
|
|
@ -56,19 +56,25 @@ WHERE
|
||||||
o_custkey = c_custkey AND
|
o_custkey = c_custkey AND
|
||||||
o_orderkey = l_orderkey;
|
o_orderkey = l_orderkey;
|
||||||
DEBUG: Router planner does not support append-partitioned tables.
|
DEBUG: Router planner does not support append-partitioned tables.
|
||||||
DEBUG: no sharding pruning constraints on customer_append found
|
|
||||||
DEBUG: shard count after pruning for customer_append: 3
|
|
||||||
DEBUG: assigned task to node localhost:xxxxx
|
|
||||||
DEBUG: assigned task to node localhost:xxxxx
|
|
||||||
DEBUG: assigned task to node localhost:xxxxx
|
|
||||||
DEBUG: no sharding pruning constraints on lineitem found
|
DEBUG: no sharding pruning constraints on lineitem found
|
||||||
DEBUG: shard count after pruning for lineitem: 2
|
DEBUG: shard count after pruning for lineitem: 2
|
||||||
DEBUG: join prunable for intervals [1,5986] and [8997,14947]
|
DEBUG: assigned task to node localhost:xxxxx
|
||||||
DEBUG: join prunable for intervals [8997,14947] and [1,5986]
|
DEBUG: assigned task to node localhost:xxxxx
|
||||||
|
DEBUG: no sharding pruning constraints on customer_append found
|
||||||
|
DEBUG: shard count after pruning for customer_append: 3
|
||||||
|
DEBUG: join prunable for intervals [1,1000] and [1001,2000]
|
||||||
|
DEBUG: join prunable for intervals [1,1000] and [6001,7000]
|
||||||
|
DEBUG: join prunable for intervals [1001,2000] and [1,1000]
|
||||||
|
DEBUG: join prunable for intervals [1001,2000] and [6001,7000]
|
||||||
|
DEBUG: join prunable for intervals [6001,7000] and [1,1000]
|
||||||
|
DEBUG: join prunable for intervals [6001,7000] and [1001,2000]
|
||||||
DEBUG: pruning merge fetch taskId 1
|
DEBUG: pruning merge fetch taskId 1
|
||||||
DETAIL: Creating dependency on merge taskId 4
|
DETAIL: Creating dependency on merge taskId 3
|
||||||
DEBUG: pruning merge fetch taskId 3
|
DEBUG: pruning merge fetch taskId 3
|
||||||
DETAIL: Creating dependency on merge taskId 8
|
DETAIL: Creating dependency on merge taskId 6
|
||||||
|
DEBUG: pruning merge fetch taskId 5
|
||||||
|
DETAIL: Creating dependency on merge taskId 9
|
||||||
|
DEBUG: assigned task to node localhost:xxxxx
|
||||||
DEBUG: assigned task to node localhost:xxxxx
|
DEBUG: assigned task to node localhost:xxxxx
|
||||||
DEBUG: assigned task to node localhost:xxxxx
|
DEBUG: assigned task to node localhost:xxxxx
|
||||||
count
|
count
|
||||||
|
|
|
@ -1,55 +0,0 @@
|
||||||
--
|
|
||||||
-- MULTI_LARGE_SHARDID
|
|
||||||
--
|
|
||||||
-- Load data into distributed tables, and run TPC-H query #1 and #6. This test
|
|
||||||
-- differs from previous tests in that it modifies the *internal* shardId
|
|
||||||
-- generator, forcing the distributed database to use 64-bit shard identifiers.
|
|
||||||
ALTER SEQUENCE pg_catalog.pg_dist_shardid_seq RESTART 100200300400500;
|
|
||||||
-- Load additional data to start using large shard identifiers.
|
|
||||||
\copy lineitem FROM '@abs_srcdir@/data/lineitem.1.data' with delimiter '|'
|
|
||||||
\copy lineitem FROM '@abs_srcdir@/data/lineitem.2.data' with delimiter '|'
|
|
||||||
-- Query #1 from the TPC-H decision support benchmark.
|
|
||||||
SELECT
|
|
||||||
l_returnflag,
|
|
||||||
l_linestatus,
|
|
||||||
sum(l_quantity) as sum_qty,
|
|
||||||
sum(l_extendedprice) as sum_base_price,
|
|
||||||
sum(l_extendedprice * (1 - l_discount)) as sum_disc_price,
|
|
||||||
sum(l_extendedprice * (1 - l_discount) * (1 + l_tax)) as sum_charge,
|
|
||||||
avg(l_quantity) as avg_qty,
|
|
||||||
avg(l_extendedprice) as avg_price,
|
|
||||||
avg(l_discount) as avg_disc,
|
|
||||||
count(*) as count_order
|
|
||||||
FROM
|
|
||||||
lineitem
|
|
||||||
WHERE
|
|
||||||
l_shipdate <= date '1998-12-01' - interval '90 days'
|
|
||||||
GROUP BY
|
|
||||||
l_returnflag,
|
|
||||||
l_linestatus
|
|
||||||
ORDER BY
|
|
||||||
l_returnflag,
|
|
||||||
l_linestatus;
|
|
||||||
l_returnflag | l_linestatus | sum_qty | sum_base_price | sum_disc_price | sum_charge | avg_qty | avg_price | avg_disc | count_order
|
|
||||||
--------------+--------------+-----------+----------------+----------------+------------------+---------------------+--------------------+------------------------+-------------
|
|
||||||
A | F | 150930.00 | 227239747.26 | 215682574.1456 | 224342306.491846 | 25.6334918478260870 | 38593.707075407609 | 0.05055027173913043478 | 5888
|
|
||||||
N | F | 4044.00 | 6205102.90 | 5905081.4236 | 6145285.541304 | 26.6052631578947368 | 40823.045394736842 | 0.05263157894736842105 | 152
|
|
||||||
N | O | 299556.00 | 449413896.32 | 427269715.3708 | 444268143.859602 | 25.4594594594594595 | 38195.979629440762 | 0.04939486656467788543 | 11766
|
|
||||||
R | F | 146312.00 | 217875959.46 | 207033247.3396 | 215487067.568656 | 25.2175112030334367 | 37551.871675284385 | 0.04983798690106859704 | 5802
|
|
||||||
(4 rows)
|
|
||||||
|
|
||||||
-- Query #6 from the TPC-H decision support benchmark.
|
|
||||||
SELECT
|
|
||||||
sum(l_extendedprice * l_discount) as revenue
|
|
||||||
FROM
|
|
||||||
lineitem
|
|
||||||
WHERE
|
|
||||||
l_shipdate >= date '1994-01-01'
|
|
||||||
and l_shipdate < date '1994-01-01' + interval '1 year'
|
|
||||||
and l_discount between 0.06 - 0.01 and 0.06 + 0.01
|
|
||||||
and l_quantity < 24;
|
|
||||||
revenue
|
|
||||||
-------------
|
|
||||||
486555.5716
|
|
||||||
(1 row)
|
|
||||||
|
|
|
@ -443,10 +443,15 @@ push(@pgOptions, "wal_receiver_status_interval=1");
|
||||||
# src/backend/replication/logical/launcher.c.
|
# src/backend/replication/logical/launcher.c.
|
||||||
push(@pgOptions, "wal_retrieve_retry_interval=1000");
|
push(@pgOptions, "wal_retrieve_retry_interval=1000");
|
||||||
|
|
||||||
# disable compute_query_id so that we don't get Query Identifiers
|
|
||||||
# in explain outputs
|
|
||||||
if ($majorversion >= "14") {
|
if ($majorversion >= "14") {
|
||||||
|
# disable compute_query_id so that we don't get Query Identifiers
|
||||||
|
# in explain outputs
|
||||||
push(@pgOptions, "compute_query_id=off");
|
push(@pgOptions, "compute_query_id=off");
|
||||||
|
|
||||||
|
# reduce test flappiness and different PG14 plans
|
||||||
|
if (!$vanillatest) {
|
||||||
|
push(@pgOptions, "enable_incremental_sort=off");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
# Citus options set for the tests
|
# Citus options set for the tests
|
||||||
|
|
|
@ -11,7 +11,6 @@
|
||||||
/multi_complex_count_distinct.sql
|
/multi_complex_count_distinct.sql
|
||||||
/multi_copy.sql
|
/multi_copy.sql
|
||||||
/multi_create_schema.sql
|
/multi_create_schema.sql
|
||||||
/multi_large_shardid.sql
|
|
||||||
/multi_load_data.sql
|
/multi_load_data.sql
|
||||||
/multi_load_data_superuser.sql
|
/multi_load_data_superuser.sql
|
||||||
/multi_load_large_records.sql
|
/multi_load_large_records.sql
|
||||||
|
|
|
@ -121,12 +121,12 @@ SELECT l_returnflag, count(DISTINCT l_shipdate) as count_distinct, count(*) as t
|
||||||
LIMIT 10;
|
LIMIT 10;
|
||||||
|
|
||||||
SELECT
|
SELECT
|
||||||
l_orderkey,
|
l_partkey,
|
||||||
count(l_partkey) FILTER (WHERE l_shipmode = 'AIR'),
|
count(l_partkey) FILTER (WHERE l_shipmode = 'AIR'),
|
||||||
count(DISTINCT l_partkey) FILTER (WHERE l_shipmode = 'AIR'),
|
count(DISTINCT l_partkey) FILTER (WHERE l_shipmode = 'AIR'),
|
||||||
count(DISTINCT CASE WHEN l_shipmode = 'AIR' THEN l_partkey ELSE NULL END)
|
count(DISTINCT CASE WHEN l_shipmode = 'AIR' THEN l_partkey ELSE NULL END)
|
||||||
FROM lineitem
|
FROM lineitem
|
||||||
GROUP BY l_orderkey
|
GROUP BY l_partkey
|
||||||
ORDER BY 2 DESC, 1 DESC
|
ORDER BY 2 DESC, 1 DESC
|
||||||
LIMIT 10;
|
LIMIT 10;
|
||||||
|
|
||||||
|
|
|
@ -6,11 +6,13 @@
|
||||||
SET citus.next_shard_id TO 520000;
|
SET citus.next_shard_id TO 520000;
|
||||||
SET citus.coordinator_aggregation_strategy TO 'disabled';
|
SET citus.coordinator_aggregation_strategy TO 'disabled';
|
||||||
|
|
||||||
|
SELECT run_command_on_master_and_workers($r$
|
||||||
CREATE OR REPLACE FUNCTION array_sort (ANYARRAY)
|
CREATE OR REPLACE FUNCTION array_sort (ANYARRAY)
|
||||||
RETURNS ANYARRAY LANGUAGE SQL
|
RETURNS ANYARRAY LANGUAGE SQL
|
||||||
AS $$
|
AS $$
|
||||||
SELECT ARRAY(SELECT unnest($1) ORDER BY 1)
|
SELECT ARRAY(SELECT unnest($1) ORDER BY 1)
|
||||||
$$;
|
$$;
|
||||||
|
$r$);
|
||||||
|
|
||||||
-- Check multi_cat_agg() aggregate which is used to implement array_agg()
|
-- Check multi_cat_agg() aggregate which is used to implement array_agg()
|
||||||
|
|
||||||
|
@ -61,9 +63,10 @@ SELECT l_quantity, array_sort(array_agg(l_orderkey * 2 + 1)) FROM lineitem WHERE
|
||||||
|
|
||||||
-- Check that we can execute array_agg() with an expression containing NULL values
|
-- Check that we can execute array_agg() with an expression containing NULL values
|
||||||
|
|
||||||
SELECT array_agg(case when l_quantity > 20 then l_quantity else NULL end)
|
SELECT array_sort(array_agg(case when l_quantity > 20 then l_quantity else NULL end))
|
||||||
FROM lineitem WHERE l_orderkey < 10;
|
FROM lineitem WHERE l_orderkey < 10;
|
||||||
|
|
||||||
-- Check that we return NULL in case there are no input rows to array_agg()
|
-- Check that we return NULL in case there are no input rows to array_agg()
|
||||||
|
|
||||||
SELECT array_agg(l_orderkey) FROM lineitem WHERE l_quantity < 0;
|
SELECT array_sort(array_agg(l_orderkey))
|
||||||
|
FROM lineitem WHERE l_orderkey < 0;
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
-- Create new table definitions for use in testing in distributed planning and
|
-- Create new table definitions for use in testing in distributed planning and
|
||||||
-- execution functionality. Also create indexes to boost performance. Since we
|
-- execution functionality. Also create indexes to boost performance. Since we
|
||||||
-- need to cover both reference join and partitioned join, we have created
|
-- need to cover both reference join and partitioned join, we have created
|
||||||
-- reference and append distributed version of orders, customer and part tables.
|
-- reference and hash-distributed version of orders, customer and part tables.
|
||||||
|
|
||||||
SET citus.next_shard_id TO 360000;
|
SET citus.next_shard_id TO 360000;
|
||||||
|
|
||||||
|
@ -46,7 +46,7 @@ CREATE TABLE lineitem (
|
||||||
l_shipmode char(10) not null,
|
l_shipmode char(10) not null,
|
||||||
l_comment varchar(44) not null,
|
l_comment varchar(44) not null,
|
||||||
PRIMARY KEY(l_orderkey, l_linenumber) );
|
PRIMARY KEY(l_orderkey, l_linenumber) );
|
||||||
SELECT create_distributed_table('lineitem', 'l_orderkey', 'append');
|
SELECT create_distributed_table('lineitem', 'l_orderkey', 'hash', shard_count := 2);
|
||||||
|
|
||||||
CREATE INDEX lineitem_time_index ON lineitem (l_shipdate);
|
CREATE INDEX lineitem_time_index ON lineitem (l_shipdate);
|
||||||
|
|
||||||
|
@ -61,7 +61,7 @@ CREATE TABLE orders (
|
||||||
o_shippriority integer not null,
|
o_shippriority integer not null,
|
||||||
o_comment varchar(79) not null,
|
o_comment varchar(79) not null,
|
||||||
PRIMARY KEY(o_orderkey) );
|
PRIMARY KEY(o_orderkey) );
|
||||||
SELECT create_distributed_table('orders', 'o_orderkey', 'append');
|
SELECT create_distributed_table('orders', 'o_orderkey', 'hash', colocate_with := 'lineitem');
|
||||||
|
|
||||||
CREATE TABLE orders_reference (
|
CREATE TABLE orders_reference (
|
||||||
o_orderkey bigint not null,
|
o_orderkey bigint not null,
|
||||||
|
@ -155,11 +155,11 @@ CREATE TABLE supplier_single_shard
|
||||||
s_acctbal decimal(15,2) not null,
|
s_acctbal decimal(15,2) not null,
|
||||||
s_comment varchar(101) not null
|
s_comment varchar(101) not null
|
||||||
);
|
);
|
||||||
SELECT create_distributed_table('supplier_single_shard', 's_suppkey', 'append');
|
SELECT create_distributed_table('supplier_single_shard', 's_suppkey', 'hash', shard_count := 1);
|
||||||
|
|
||||||
CREATE TABLE mx_table_test (col1 int, col2 text);
|
CREATE TABLE mx_table_test (col1 int, col2 text);
|
||||||
|
|
||||||
SET citus.next_shard_id TO 360009;
|
SET citus.next_shard_id TO 360013;
|
||||||
|
|
||||||
-- Test initial data loading
|
-- Test initial data loading
|
||||||
CREATE TABLE data_load_test (col1 int, col2 text, col3 serial);
|
CREATE TABLE data_load_test (col1 int, col2 text, col3 serial);
|
||||||
|
|
|
@ -126,14 +126,14 @@ SELECT count(*) FROM lineitem_hash_part
|
||||||
SELECT count(*) FROM lineitem_hash_part WHERE l_orderkey IN (SELECT l_orderkey FROM lineitem_hash_part);
|
SELECT count(*) FROM lineitem_hash_part WHERE l_orderkey IN (SELECT l_orderkey FROM lineitem_hash_part);
|
||||||
SELECT count(*) FROM lineitem_hash_part WHERE l_orderkey = ANY (SELECT l_orderkey FROM lineitem_hash_part);
|
SELECT count(*) FROM lineitem_hash_part WHERE l_orderkey = ANY (SELECT l_orderkey FROM lineitem_hash_part);
|
||||||
|
|
||||||
-- Check whether we support range queries with append distributed table
|
-- Check whether we support range queries
|
||||||
SELECT count(*) FROM lineitem
|
SELECT count(*) FROM lineitem
|
||||||
WHERE l_orderkey >= 1 AND l_orderkey <= 3;
|
WHERE l_orderkey >= 1 AND l_orderkey <= 3;
|
||||||
|
|
||||||
SELECT count(*) FROM lineitem
|
SELECT count(*) FROM lineitem
|
||||||
WHERE (l_orderkey >= 1 AND l_orderkey <= 3) AND (l_quantity > 11 AND l_quantity < 22);
|
WHERE (l_orderkey >= 1 AND l_orderkey <= 3) AND (l_quantity > 11 AND l_quantity < 22);
|
||||||
|
|
||||||
-- Check whether we support IN/ANY in subquery with append and range distributed table
|
-- Check whether we support IN/ANY in subquery
|
||||||
SELECT count(*) FROM lineitem
|
SELECT count(*) FROM lineitem
|
||||||
WHERE l_orderkey = ANY ('{1,2,3}');
|
WHERE l_orderkey = ANY ('{1,2,3}');
|
||||||
|
|
||||||
|
|
|
@ -116,7 +116,6 @@ SET search_path TO multi_index_statements, public;
|
||||||
|
|
||||||
-- Verify that we error out on unsupported statement types
|
-- Verify that we error out on unsupported statement types
|
||||||
|
|
||||||
CREATE UNIQUE INDEX try_index ON public.lineitem (l_orderkey);
|
|
||||||
CREATE INDEX try_index ON lineitem (l_orderkey) TABLESPACE newtablespace;
|
CREATE INDEX try_index ON lineitem (l_orderkey) TABLESPACE newtablespace;
|
||||||
|
|
||||||
CREATE UNIQUE INDEX try_unique_range_index ON index_test_range(b);
|
CREATE UNIQUE INDEX try_unique_range_index ON index_test_range(b);
|
||||||
|
|
|
@ -32,12 +32,6 @@ where logicalrelid='lineitem'::regclass or
|
||||||
logicalrelid='orders'::regclass
|
logicalrelid='orders'::regclass
|
||||||
order by shardid;
|
order by shardid;
|
||||||
|
|
||||||
set citus.explain_distributed_queries to on;
|
|
||||||
-- explain the query before actually executing it
|
|
||||||
EXPLAIN SELECT sum(l_linenumber), avg(l_linenumber) FROM lineitem, orders
|
|
||||||
WHERE l_orderkey = o_orderkey AND l_orderkey > 6000 AND o_orderkey < 6000;
|
|
||||||
set citus.explain_distributed_queries to off;
|
|
||||||
|
|
||||||
set client_min_messages to debug3;
|
set client_min_messages to debug3;
|
||||||
SELECT sum(l_linenumber), avg(l_linenumber) FROM lineitem, orders
|
SELECT sum(l_linenumber), avg(l_linenumber) FROM lineitem, orders
|
||||||
WHERE l_orderkey = o_orderkey AND l_orderkey > 6000 AND o_orderkey < 6000;
|
WHERE l_orderkey = o_orderkey AND l_orderkey > 6000 AND o_orderkey < 6000;
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
SET citus.next_shard_id TO 520000;
|
SET citus.next_shard_id TO 520000;
|
||||||
SET citus.coordinator_aggregation_strategy TO 'disabled';
|
SET citus.coordinator_aggregation_strategy TO 'disabled';
|
||||||
|
|
||||||
|
SELECT run_command_on_master_and_workers($r$
|
||||||
CREATE OR REPLACE FUNCTION array_sort (json)
|
CREATE OR REPLACE FUNCTION array_sort (json)
|
||||||
RETURNS json LANGUAGE SQL
|
RETURNS json LANGUAGE SQL
|
||||||
AS $$
|
AS $$
|
||||||
|
@ -13,6 +14,7 @@ SELECT json_agg(value) FROM (
|
||||||
SELECT value FROM json_array_elements($1) ORDER BY value::jsonb
|
SELECT value FROM json_array_elements($1) ORDER BY value::jsonb
|
||||||
) t
|
) t
|
||||||
$$;
|
$$;
|
||||||
|
$r$);
|
||||||
|
|
||||||
-- Check multi_cat_agg() aggregate which is used to implement json_agg()
|
-- Check multi_cat_agg() aggregate which is used to implement json_agg()
|
||||||
|
|
||||||
|
@ -64,24 +66,24 @@ SELECT l_quantity, array_sort(json_agg(l_orderkey * 2 + 1)) FROM lineitem WHERE
|
||||||
|
|
||||||
-- Check that we can execute json_agg() with an expression containing NULL values
|
-- Check that we can execute json_agg() with an expression containing NULL values
|
||||||
|
|
||||||
SELECT json_agg(case when l_quantity > 20 then l_quantity else NULL end)
|
SELECT array_sort(json_agg(case when l_quantity > 20 then l_quantity else NULL end))
|
||||||
FROM lineitem WHERE l_orderkey < 5;
|
FROM lineitem WHERE l_orderkey < 5;
|
||||||
|
|
||||||
-- Check that we can execute json_agg() with an expression containing different types
|
-- Check that we can execute json_agg() with an expression containing different types
|
||||||
|
|
||||||
SELECT json_agg(case when l_quantity > 20 then to_json(l_quantity) else '"f"'::json end)
|
SELECT array_sort(json_agg(case when l_quantity > 20 then to_json(l_quantity) else '"f"'::json end))
|
||||||
FROM lineitem WHERE l_orderkey < 5;
|
FROM lineitem WHERE l_orderkey < 5;
|
||||||
|
|
||||||
-- Check that we can execute json_agg() with an expression containing json arrays
|
-- Check that we can execute json_agg() with an expression containing json arrays
|
||||||
|
|
||||||
SELECT json_agg(json_build_array(l_quantity, l_shipdate))
|
SELECT array_sort(json_agg(json_build_array(l_quantity, l_shipdate)))
|
||||||
FROM lineitem WHERE l_orderkey < 3;
|
FROM lineitem WHERE l_orderkey < 3;
|
||||||
|
|
||||||
-- Check that we can execute json_agg() with an expression containing arrays
|
-- Check that we can execute json_agg() with an expression containing arrays
|
||||||
|
|
||||||
SELECT json_agg(ARRAY[l_quantity, l_orderkey])
|
SELECT array_sort(json_agg(ARRAY[l_quantity, l_orderkey]))
|
||||||
FROM lineitem WHERE l_orderkey < 3;
|
FROM lineitem WHERE l_orderkey < 3;
|
||||||
|
|
||||||
-- Check that we return NULL in case there are no input rows to json_agg()
|
-- Check that we return NULL in case there are no input rows to json_agg()
|
||||||
|
|
||||||
SELECT json_agg(l_orderkey) FROM lineitem WHERE l_quantity < 0;
|
SELECT array_sort(json_agg(l_orderkey)) FROM lineitem WHERE l_quantity < 0;
|
||||||
|
|
|
@ -12,6 +12,7 @@ AS $$
|
||||||
SELECT count(*) FROM (SELECT * FROM json_object_keys($1)) t
|
SELECT count(*) FROM (SELECT * FROM json_object_keys($1)) t
|
||||||
$$;
|
$$;
|
||||||
|
|
||||||
|
SELECT run_command_on_master_and_workers($r$
|
||||||
CREATE OR REPLACE FUNCTION keys_sort (json)
|
CREATE OR REPLACE FUNCTION keys_sort (json)
|
||||||
RETURNS json LANGUAGE SQL
|
RETURNS json LANGUAGE SQL
|
||||||
AS $$
|
AS $$
|
||||||
|
@ -19,6 +20,7 @@ SELECT json_object_agg(key, value) FROM (
|
||||||
SELECT * FROM json_each($1) ORDER BY key
|
SELECT * FROM json_each($1) ORDER BY key
|
||||||
) t
|
) t
|
||||||
$$;
|
$$;
|
||||||
|
$r$);
|
||||||
|
|
||||||
-- Check multi_cat_agg() aggregate which is used to implement json_object_agg()
|
-- Check multi_cat_agg() aggregate which is used to implement json_object_agg()
|
||||||
|
|
||||||
|
@ -100,4 +102,4 @@ SELECT keys_sort(json_object_agg(l_orderkey::text || l_linenumber::text, ARRAY[l
|
||||||
|
|
||||||
-- Check that we return NULL in case there are no input rows to json_object_agg()
|
-- Check that we return NULL in case there are no input rows to json_object_agg()
|
||||||
|
|
||||||
SELECT json_object_agg(l_shipdate, l_orderkey) FROM lineitem WHERE l_quantity < 0;
|
SELECT keys_sort(json_object_agg(l_shipdate, l_orderkey)) FROM lineitem WHERE l_quantity < 0;
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
SET citus.next_shard_id TO 520000;
|
SET citus.next_shard_id TO 520000;
|
||||||
SET citus.coordinator_aggregation_strategy TO 'disabled';
|
SET citus.coordinator_aggregation_strategy TO 'disabled';
|
||||||
|
|
||||||
|
SELECT run_command_on_master_and_workers($r$
|
||||||
CREATE OR REPLACE FUNCTION array_sort (jsonb)
|
CREATE OR REPLACE FUNCTION array_sort (jsonb)
|
||||||
RETURNS jsonb LANGUAGE SQL
|
RETURNS jsonb LANGUAGE SQL
|
||||||
AS $$
|
AS $$
|
||||||
|
@ -13,6 +14,7 @@ SELECT jsonb_agg(value) FROM (
|
||||||
SELECT * FROM jsonb_array_elements($1) ORDER BY 1
|
SELECT * FROM jsonb_array_elements($1) ORDER BY 1
|
||||||
) t
|
) t
|
||||||
$$;
|
$$;
|
||||||
|
$r$);
|
||||||
|
|
||||||
-- Check multi_cat_agg() aggregate which is used to implement jsonb_agg()
|
-- Check multi_cat_agg() aggregate which is used to implement jsonb_agg()
|
||||||
|
|
||||||
|
@ -64,24 +66,25 @@ SELECT l_quantity, array_sort(jsonb_agg(l_orderkey * 2 + 1)) FROM lineitem WHERE
|
||||||
|
|
||||||
-- Check that we can execute jsonb_agg() with an expression containing NULL values
|
-- Check that we can execute jsonb_agg() with an expression containing NULL values
|
||||||
|
|
||||||
SELECT jsonb_agg(case when l_quantity > 20 then l_quantity else NULL end)
|
SELECT array_sort(jsonb_agg(case when l_quantity > 20 then l_quantity else NULL end))
|
||||||
FROM lineitem WHERE l_orderkey < 5;
|
FROM lineitem WHERE l_orderkey < 5;
|
||||||
|
|
||||||
-- Check that we can execute jsonb_agg() with an expression containing different types
|
-- Check that we can execute jsonb_agg() with an expression containing different types
|
||||||
|
|
||||||
SELECT jsonb_agg(case when l_quantity > 20 then to_jsonb(l_quantity) else '"f"'::jsonb end)
|
SELECT array_sort(jsonb_agg(case when l_quantity > 20 then to_jsonb(l_quantity) else '"f"'::jsonb end))
|
||||||
FROM lineitem WHERE l_orderkey < 5;
|
FROM lineitem WHERE l_orderkey < 5;
|
||||||
|
|
||||||
-- Check that we can execute jsonb_agg() with an expression containing jsonb arrays
|
-- Check that we can execute jsonb_agg() with an expression containing jsonb arrays
|
||||||
|
|
||||||
SELECT jsonb_agg(jsonb_build_array(l_quantity, l_shipdate))
|
SELECT array_sort(jsonb_agg(jsonb_build_array(l_quantity, l_shipdate)))
|
||||||
FROM lineitem WHERE l_orderkey < 3;
|
FROM lineitem WHERE l_orderkey < 3;
|
||||||
|
|
||||||
-- Check that we can execute jsonb_agg() with an expression containing arrays
|
-- Check that we can execute jsonb_agg() with an expression containing arrays
|
||||||
|
|
||||||
SELECT jsonb_agg(ARRAY[l_quantity, l_orderkey])
|
SELECT array_sort(jsonb_agg(ARRAY[l_quantity, l_orderkey]))
|
||||||
FROM lineitem WHERE l_orderkey < 3;
|
FROM lineitem WHERE l_orderkey < 3;
|
||||||
|
|
||||||
-- Check that we return NULL in case there are no input rows to jsonb_agg()
|
-- Check that we return NULL in case there are no input rows to jsonb_agg()
|
||||||
|
|
||||||
SELECT jsonb_agg(l_orderkey) FROM lineitem WHERE l_quantity < 0;
|
SELECT array_sort(jsonb_agg(l_orderkey))
|
||||||
|
FROM lineitem WHERE l_quantity < 0;
|
||||||
|
|
|
@ -6,11 +6,23 @@
|
||||||
SET citus.next_shard_id TO 520000;
|
SET citus.next_shard_id TO 520000;
|
||||||
SET citus.coordinator_aggregation_strategy TO 'disabled';
|
SET citus.coordinator_aggregation_strategy TO 'disabled';
|
||||||
|
|
||||||
|
SELECT run_command_on_master_and_workers($r$
|
||||||
CREATE OR REPLACE FUNCTION count_keys (jsonb)
|
CREATE OR REPLACE FUNCTION count_keys (jsonb)
|
||||||
RETURNS bigint LANGUAGE SQL
|
RETURNS bigint LANGUAGE SQL
|
||||||
AS $$
|
AS $$
|
||||||
SELECT count(*) FROM (SELECT * FROM jsonb_object_keys($1)) t
|
SELECT count(*) FROM (SELECT * FROM jsonb_object_keys($1)) t
|
||||||
$$;
|
$$;
|
||||||
|
$r$);
|
||||||
|
|
||||||
|
SELECT run_command_on_master_and_workers($r$
|
||||||
|
CREATE OR REPLACE FUNCTION keys_sort (jsonb)
|
||||||
|
RETURNS jsonb LANGUAGE SQL
|
||||||
|
AS $$
|
||||||
|
SELECT jsonb_object_agg(key, value) FROM (
|
||||||
|
SELECT * FROM jsonb_each($1) ORDER BY key
|
||||||
|
) t
|
||||||
|
$$;
|
||||||
|
$r$);
|
||||||
|
|
||||||
-- Check multi_cat_agg() aggregate which is used to implement jsonb_object_agg()
|
-- Check multi_cat_agg() aggregate which is used to implement jsonb_object_agg()
|
||||||
|
|
||||||
|
@ -70,26 +82,26 @@ SELECT l_quantity, jsonb_object_agg(l_orderkey::text || l_linenumber::text, l_or
|
||||||
|
|
||||||
-- Check that we can execute jsonb_object_agg() with an expression containing NULL values
|
-- Check that we can execute jsonb_object_agg() with an expression containing NULL values
|
||||||
|
|
||||||
SELECT jsonb_object_agg(l_orderkey::text || l_linenumber::text,
|
SELECT keys_sort(jsonb_object_agg(l_orderkey::text || l_linenumber::text,
|
||||||
case when l_quantity > 20 then l_quantity else NULL end)
|
case when l_quantity > 20 then l_quantity else NULL end))
|
||||||
FROM lineitem WHERE l_orderkey < 5;
|
FROM lineitem WHERE l_orderkey < 5;
|
||||||
|
|
||||||
-- Check that we can execute jsonb_object_agg() with an expression containing different types
|
-- Check that we can execute jsonb_object_agg() with an expression containing different types
|
||||||
|
|
||||||
SELECT jsonb_object_agg(l_orderkey::text || l_linenumber::text,
|
SELECT keys_sort(jsonb_object_agg(l_orderkey::text || l_linenumber::text,
|
||||||
case when l_quantity > 20 then to_jsonb(l_quantity) else '"f"'::jsonb end)
|
case when l_quantity > 20 then to_jsonb(l_quantity) else '"f"'::jsonb end))
|
||||||
FROM lineitem WHERE l_orderkey < 5;
|
FROM lineitem WHERE l_orderkey < 5;
|
||||||
|
|
||||||
-- Check that we can execute jsonb_object_agg() with an expression containing jsonb arrays
|
-- Check that we can execute jsonb_object_agg() with an expression containing jsonb arrays
|
||||||
|
|
||||||
SELECT jsonb_object_agg(l_orderkey::text || l_linenumber::text, jsonb_build_array(l_quantity, l_shipdate))
|
SELECT keys_sort(jsonb_object_agg(l_orderkey::text || l_linenumber::text, jsonb_build_array(l_quantity, l_shipdate)))
|
||||||
FROM lineitem WHERE l_orderkey < 3;
|
FROM lineitem WHERE l_orderkey < 3;
|
||||||
|
|
||||||
-- Check that we can execute jsonb_object_agg() with an expression containing arrays
|
-- Check that we can execute jsonb_object_agg() with an expression containing arrays
|
||||||
|
|
||||||
SELECT jsonb_object_agg(l_orderkey::text || l_linenumber::text, ARRAY[l_quantity, l_orderkey])
|
SELECT keys_sort(jsonb_object_agg(l_orderkey::text || l_linenumber::text, ARRAY[l_quantity, l_orderkey]))
|
||||||
FROM lineitem WHERE l_orderkey < 3;
|
FROM lineitem WHERE l_orderkey < 3;
|
||||||
|
|
||||||
-- Check that we return NULL in case there are no input rows to jsonb_object_agg()
|
-- Check that we return NULL in case there are no input rows to jsonb_object_agg()
|
||||||
|
|
||||||
SELECT jsonb_object_agg(l_shipdate, l_orderkey) FROM lineitem WHERE l_quantity < 0;
|
SELECT keys_sort(jsonb_object_agg(l_shipdate, l_orderkey)) FROM lineitem WHERE l_quantity < 0;
|
||||||
|
|
|
@ -9,11 +9,8 @@
|
||||||
|
|
||||||
ALTER SEQUENCE pg_catalog.pg_dist_shardid_seq RESTART 100200300400500;
|
ALTER SEQUENCE pg_catalog.pg_dist_shardid_seq RESTART 100200300400500;
|
||||||
|
|
||||||
|
CREATE TABLE lineitem_large_shard_id AS SELECT * FROM lineitem;
|
||||||
-- Load additional data to start using large shard identifiers.
|
SELECT create_distributed_table('lineitem_large_shard_id', 'l_orderkey');
|
||||||
|
|
||||||
\copy lineitem FROM '@abs_srcdir@/data/lineitem.1.data' with delimiter '|'
|
|
||||||
\copy lineitem FROM '@abs_srcdir@/data/lineitem.2.data' with delimiter '|'
|
|
||||||
|
|
||||||
-- Query #1 from the TPC-H decision support benchmark.
|
-- Query #1 from the TPC-H decision support benchmark.
|
||||||
|
|
||||||
|
@ -29,7 +26,7 @@ SELECT
|
||||||
avg(l_discount) as avg_disc,
|
avg(l_discount) as avg_disc,
|
||||||
count(*) as count_order
|
count(*) as count_order
|
||||||
FROM
|
FROM
|
||||||
lineitem
|
lineitem_large_shard_id
|
||||||
WHERE
|
WHERE
|
||||||
l_shipdate <= date '1998-12-01' - interval '90 days'
|
l_shipdate <= date '1998-12-01' - interval '90 days'
|
||||||
GROUP BY
|
GROUP BY
|
||||||
|
@ -44,7 +41,7 @@ ORDER BY
|
||||||
SELECT
|
SELECT
|
||||||
sum(l_extendedprice * l_discount) as revenue
|
sum(l_extendedprice * l_discount) as revenue
|
||||||
FROM
|
FROM
|
||||||
lineitem
|
lineitem_large_shard_id
|
||||||
WHERE
|
WHERE
|
||||||
l_shipdate >= date '1994-01-01'
|
l_shipdate >= date '1994-01-01'
|
||||||
and l_shipdate < date '1994-01-01' + interval '1 year'
|
and l_shipdate < date '1994-01-01' + interval '1 year'
|
|
@ -41,7 +41,7 @@ FROM
|
||||||
orders, customer_append
|
orders, customer_append
|
||||||
WHERE
|
WHERE
|
||||||
o_custkey = c_custkey AND
|
o_custkey = c_custkey AND
|
||||||
o_orderkey < 0;
|
o_orderkey < 0 AND o_orderkey > 0;
|
||||||
|
|
||||||
-- Single range-repartition join with a selection clause on the base table to
|
-- Single range-repartition join with a selection clause on the base table to
|
||||||
-- test the case when all sql tasks are pruned away.
|
-- test the case when all sql tasks are pruned away.
|
||||||
|
@ -87,14 +87,14 @@ FROM
|
||||||
lineitem, customer_append
|
lineitem, customer_append
|
||||||
WHERE
|
WHERE
|
||||||
l_partkey = c_nationkey AND
|
l_partkey = c_nationkey AND
|
||||||
l_orderkey < 0;
|
l_orderkey < 0 AND l_orderkey > 0;
|
||||||
SELECT
|
SELECT
|
||||||
count(*)
|
count(*)
|
||||||
FROM
|
FROM
|
||||||
lineitem, customer_append
|
lineitem, customer_append
|
||||||
WHERE
|
WHERE
|
||||||
l_partkey = c_nationkey AND
|
l_partkey = c_nationkey AND
|
||||||
l_orderkey < 0;
|
l_orderkey < 0 AND l_orderkey > 0;
|
||||||
|
|
||||||
-- Test cases with false in the WHERE clause
|
-- Test cases with false in the WHERE clause
|
||||||
EXPLAIN (COSTS OFF)
|
EXPLAIN (COSTS OFF)
|
||||||
|
|
Loading…
Reference in New Issue