mirror of https://github.com/citusdata/citus.git
239 lines
8.8 KiB
Plaintext
239 lines
8.8 KiB
Plaintext
--
|
|
-- Test querying columnar tables.
|
|
--
|
|
CREATE SCHEMA columnar_join;
|
|
SET search_path to columnar_join, public;
|
|
-- Settings to make the result deterministic
|
|
SET datestyle = "ISO, YMD";
|
|
-- Query uncompressed data
|
|
SELECT count(*) FROM contestant;
|
|
count
|
|
---------------------------------------------------------------------
|
|
8
|
|
(1 row)
|
|
|
|
SELECT avg(rating), stddev_samp(rating) FROM contestant;
|
|
avg | stddev_samp
|
|
---------------------------------------------------------------------
|
|
2344.3750000000000000 | 433.746119785032
|
|
(1 row)
|
|
|
|
SELECT country, avg(rating) FROM contestant WHERE rating > 2200
|
|
GROUP BY country ORDER BY country;
|
|
country | avg
|
|
---------------------------------------------------------------------
|
|
XA | 2203.0000000000000000
|
|
XB | 2610.5000000000000000
|
|
XC | 2236.0000000000000000
|
|
XD | 3090.0000000000000000
|
|
(4 rows)
|
|
|
|
SELECT * FROM contestant ORDER BY handle;
|
|
handle | birthdate | rating | percentile | country | achievements
|
|
---------------------------------------------------------------------
|
|
a | 1990-01-10 | 2090 | 97.1 | XA | {a}
|
|
b | 1990-11-01 | 2203 | 98.1 | XA | {a,b}
|
|
c | 1988-11-01 | 2907 | 99.4 | XB | {w,y}
|
|
d | 1985-05-05 | 2314 | 98.3 | XB | {}
|
|
e | 1995-05-05 | 2236 | 98.2 | XC | {a}
|
|
f | 1983-04-02 | 3090 | 99.6 | XD | {a,b,c,y}
|
|
g | 1991-12-13 | 1803 | 85.1 | XD | {a,c}
|
|
h | 1987-10-26 | 2112 | 95.4 | XD | {w,a}
|
|
(8 rows)
|
|
|
|
-- all special column accesses should fail
|
|
SELECT ctid FROM contestant;
|
|
ERROR: UPDATE and CTID scans not supported for ColumnarScan
|
|
SELECT cmin FROM contestant;
|
|
ERROR: UPDATE and CTID scans not supported for ColumnarScan
|
|
SELECT cmax FROM contestant;
|
|
ERROR: UPDATE and CTID scans not supported for ColumnarScan
|
|
SELECT xmin FROM contestant;
|
|
ERROR: UPDATE and CTID scans not supported for ColumnarScan
|
|
SELECT xmax FROM contestant;
|
|
ERROR: UPDATE and CTID scans not supported for ColumnarScan
|
|
SELECT tableid FROM contestant;
|
|
ERROR: column "tableid" does not exist
|
|
-- sample scans should fail
|
|
SELECT * FROM contestant TABLESAMPLE SYSTEM(0.1);
|
|
ERROR: sample scans not supported on columnar tables
|
|
-- Query compressed data
|
|
SELECT count(*) FROM contestant_compressed;
|
|
count
|
|
---------------------------------------------------------------------
|
|
8
|
|
(1 row)
|
|
|
|
SELECT avg(rating), stddev_samp(rating) FROM contestant_compressed;
|
|
avg | stddev_samp
|
|
---------------------------------------------------------------------
|
|
2344.3750000000000000 | 433.746119785032
|
|
(1 row)
|
|
|
|
SELECT country, avg(rating) FROM contestant_compressed WHERE rating > 2200
|
|
GROUP BY country ORDER BY country;
|
|
country | avg
|
|
---------------------------------------------------------------------
|
|
XA | 2203.0000000000000000
|
|
XB | 2610.5000000000000000
|
|
XC | 2236.0000000000000000
|
|
XD | 3090.0000000000000000
|
|
(4 rows)
|
|
|
|
SELECT * FROM contestant_compressed ORDER BY handle;
|
|
handle | birthdate | rating | percentile | country | achievements
|
|
---------------------------------------------------------------------
|
|
a | 1990-01-10 | 2090 | 97.1 | XA | {a}
|
|
b | 1990-11-01 | 2203 | 98.1 | XA | {a,b}
|
|
c | 1988-11-01 | 2907 | 99.4 | XB | {w,y}
|
|
d | 1985-05-05 | 2314 | 98.3 | XB | {}
|
|
e | 1995-05-05 | 2236 | 98.2 | XC | {a}
|
|
f | 1983-04-02 | 3090 | 99.6 | XD | {a,b,c,y}
|
|
g | 1991-12-13 | 1803 | 85.1 | XD | {a,c}
|
|
h | 1987-10-26 | 2112 | 95.4 | XD | {w,a}
|
|
(8 rows)
|
|
|
|
-- Verify that we handle whole-row references correctly
|
|
SELECT to_json(v) FROM contestant v ORDER BY rating LIMIT 1;
|
|
to_json
|
|
---------------------------------------------------------------------
|
|
{"handle":"g","birthdate":"1991-12-13","rating":1803,"percentile":85.1,"country":"XD ","achievements":["a","c"]}
|
|
(1 row)
|
|
|
|
-- Test variables used in expressions
|
|
CREATE TABLE union_first (a int, b int) USING columnar;
|
|
CREATE TABLE union_second (a int, b int) USING columnar;
|
|
INSERT INTO union_first SELECT a, a FROM generate_series(1, 5) a;
|
|
INSERT INTO union_second SELECT a, a FROM generate_series(11, 15) a;
|
|
(SELECT a*1, b FROM union_first) union all (SELECT a*1, b FROM union_second);
|
|
?column? | b
|
|
---------------------------------------------------------------------
|
|
1 | 1
|
|
2 | 2
|
|
3 | 3
|
|
4 | 4
|
|
5 | 5
|
|
11 | 11
|
|
12 | 12
|
|
13 | 13
|
|
14 | 14
|
|
15 | 15
|
|
(10 rows)
|
|
|
|
DROP TABLE union_first, union_second;
|
|
-- https://github.com/citusdata/citus/issues/4600
|
|
CREATE TABLE INT8_TBL_columnar(q1 int8, q2 int8) using columnar;
|
|
INSERT INTO INT8_TBL_columnar VALUES(' 123 ',' 456');
|
|
INSERT INTO INT8_TBL_columnar VALUES('123 ','4567890123456789');
|
|
INSERT INTO INT8_TBL_columnar VALUES('4567890123456789','123');
|
|
INSERT INTO INT8_TBL_columnar VALUES(+4567890123456789,'4567890123456789');
|
|
INSERT INTO INT8_TBL_columnar VALUES('+4567890123456789','-4567890123456789');
|
|
explain (costs off, summary off) select * from
|
|
INT8_TBL_columnar a left join lateral
|
|
(select b.q1 as bq1, c.q1 as cq1, least(a.q1,b.q1,c.q1) from
|
|
INT8_TBL_columnar b cross join INT8_TBL_columnar c) ss
|
|
on a.q2 = ss.bq1;
|
|
QUERY PLAN
|
|
---------------------------------------------------------------------
|
|
Nested Loop Left Join
|
|
-> Custom Scan (ColumnarScan) on int8_tbl_columnar a
|
|
Columnar Projected Columns: q1, q2
|
|
-> Nested Loop
|
|
-> Custom Scan (ColumnarScan) on int8_tbl_columnar c
|
|
Columnar Projected Columns: q1
|
|
-> Custom Scan (ColumnarScan) on int8_tbl_columnar b
|
|
Filter: (a.q2 = q1)
|
|
Columnar Projected Columns: q1
|
|
Columnar Chunk Group Filters: (a.q2 = q1)
|
|
(10 rows)
|
|
|
|
explain (costs off, summary off)
|
|
SELECT COUNT(*) FROM INT8_TBL_columnar t1 JOIN
|
|
LATERAL (SELECT * FROM INT8_TBL_columnar t2 WHERE t1.q1 = t2.q1)
|
|
as foo ON (true);
|
|
QUERY PLAN
|
|
---------------------------------------------------------------------
|
|
Aggregate
|
|
-> Hash Join
|
|
Hash Cond: (t2.q1 = t1.q1)
|
|
-> Custom Scan (ColumnarScan) on int8_tbl_columnar t2
|
|
Columnar Projected Columns: q1
|
|
-> Hash
|
|
-> Custom Scan (ColumnarScan) on int8_tbl_columnar t1
|
|
Columnar Projected Columns: q1
|
|
(8 rows)
|
|
|
|
CREATE TABLE INT8_TBL_heap (LIKE INT8_TBL_columnar) USING heap;
|
|
INSERT INTO INT8_TBL_heap SELECT * FROM INT8_TBL_columnar;
|
|
CREATE TABLE result_columnar AS
|
|
select * from
|
|
INT8_TBL_columnar a left join lateral
|
|
(select b.q1 as bq1, c.q1 as cq1, least(a.q1,b.q1,c.q1) from
|
|
INT8_TBL_columnar b cross join INT8_TBL_columnar c) ss
|
|
on a.q2 = ss.bq1;
|
|
CREATE TABLE result_regular AS
|
|
select * from
|
|
INT8_TBL_heap a left join lateral
|
|
(select b.q1 as bq1, c.q1 as cq1, least(a.q1,b.q1,c.q1) from
|
|
INT8_TBL_heap b cross join INT8_TBL_heap c) ss
|
|
on a.q2 = ss.bq1;
|
|
-- 2 results should be identical, so the following should be empty
|
|
(table result_columnar EXCEPT table result_regular)
|
|
UNION
|
|
(table result_regular EXCEPT table result_columnar);
|
|
q1 | q2 | bq1 | cq1 | least
|
|
---------------------------------------------------------------------
|
|
(0 rows)
|
|
|
|
SET client_min_messages TO WARNING;
|
|
DROP SCHEMA columnar_join CASCADE;
|
|
--
|
|
-- https://github.com/citusdata/citus/issues/5258
|
|
--
|
|
set default_table_access_method to columnar;
|
|
CREATE TABLE atest1 ( a int, b text );
|
|
CREATE TABLE atest2 (col1 varchar(10), col2 boolean);
|
|
INSERT INTO atest1 VALUES (1, 'one');
|
|
SELECT * FROM atest1; -- ok
|
|
a | b
|
|
---------------------------------------------------------------------
|
|
1 | one
|
|
(1 row)
|
|
|
|
SELECT * FROM atest2; -- ok
|
|
col1 | col2
|
|
---------------------------------------------------------------------
|
|
(0 rows)
|
|
|
|
INSERT INTO atest1 VALUES (2, 'two'); -- ok
|
|
INSERT INTO atest1 SELECT 1, b FROM atest1; -- ok
|
|
SELECT * FROM atest2 WHERE ( col1 IN ( SELECT b FROM atest1 ) );
|
|
col1 | col2
|
|
---------------------------------------------------------------------
|
|
(0 rows)
|
|
|
|
DROP TABLE atest1;
|
|
DROP TABLE atest2;
|
|
set default_table_access_method to default;
|
|
create temp table t1 (f1 numeric(14,0), f2 varchar(30)) USING columnar;
|
|
select * from
|
|
(select distinct f1, f2, (select f2 from t1 x where x.f1 = up.f1) as fs
|
|
from t1 up) ss
|
|
group by f1,f2,fs;
|
|
f1 | f2 | fs
|
|
---------------------------------------------------------------------
|
|
(0 rows)
|
|
|
|
drop table t1;
|
|
CREATE TABLE tbl1(c0 int4range) USING COLUMNAR;
|
|
CREATE TABLE tbl2(c0 int4range);
|
|
INSERT INTO tbl1(c0) VALUES('[0,1]'::int4range);
|
|
INSERT INTO tbl1(c0) VALUES('[0,1]'::int4range);
|
|
SELECT tbl1.c0 FROM tbl1 JOIN tbl2 ON tbl1.c0=tbl2.c0 WHERE tbl2.c0<=tbl2.c0 ISNULL;
|
|
c0
|
|
---------------------------------------------------------------------
|
|
(0 rows)
|
|
|
|
DROP TABLE tbl1;
|
|
DROP TABLE tbl2;
|