citus/src/test/regress/sql/am_query.sql

94 lines
3.2 KiB
SQL

--
-- 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;
SELECT avg(rating), stddev_samp(rating) FROM contestant;
SELECT country, avg(rating) FROM contestant WHERE rating > 2200
GROUP BY country ORDER BY country;
SELECT * FROM contestant ORDER BY handle;
-- all special column accesses should fail
SELECT ctid FROM contestant;
SELECT cmin FROM contestant;
SELECT cmax FROM contestant;
SELECT xmin FROM contestant;
SELECT xmax FROM contestant;
SELECT tableid FROM contestant;
-- sample scans should fail
SELECT * FROM contestant TABLESAMPLE SYSTEM(0.1);
-- Query compressed data
SELECT count(*) FROM contestant_compressed;
SELECT avg(rating), stddev_samp(rating) FROM contestant_compressed;
SELECT country, avg(rating) FROM contestant_compressed WHERE rating > 2200
GROUP BY country ORDER BY country;
SELECT * FROM contestant_compressed ORDER BY handle;
-- Verify that we handle whole-row references correctly
SELECT to_json(v) FROM contestant v ORDER BY rating LIMIT 1;
-- 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);
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;
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);
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);
SET client_min_messages TO WARNING;
DROP SCHEMA columnar_join CASCADE;