15670430创建于 2020年12月28日历史提交
set enable_vector_engine=on;
-- Problem:
-- compress string directly using lz4/zlib, including varchar and numeric
CREATE TABLE colcmpr_str_00
(
	distKey int,
	L_QUANTITY    DECIMAL(15,2) NOT NULL,
	L_EXTENDEDPRICE  DECIMAL(15,2) NOT NULL,
	L_DISCOUNT    DECIMAL(15,2) NOT NULL,
	L_TAX         DECIMAL(15,2) NOT NULL,
	L_SHIPINSTRUCT CHAR(25) NOT NULL,
	L_SHIPMODE     CHAR(10) NOT NULL,
	L_COMMENT      VARCHAR(44) NOT NULL
) with (orientation = column)  ;
COPY colcmpr_str_00 FROM '@abs_srcdir@/data/colcmpr_str_00.data' delimiter '|';
SELECT * FROM colcmpr_str_00 ORDER BY 1, 2, 3, 4, 5, 6, 7, 8;
DROP TABLE colcmpr_str_00;
-- Problem:
-- compress string directly using lz4/zlib, including varchar and numeric
CREATE TABLE colcmpr_str_01
(
	distKey int,
	L_QUANTITY    DECIMAL(15,2) NOT NULL,
	L_EXTENDEDPRICE  DECIMAL(15,2) NOT NULL,
	L_DISCOUNT    DECIMAL(15,2) NOT NULL,
	L_TAX         DECIMAL(15,2) NOT NULL,
	L_SHIPINSTRUCT CHAR(25) NOT NULL,
	L_SHIPMODE     CHAR(10) NOT NULL,
	L_COMMENT      VARCHAR(44) NOT NULL
) with (orientation = column, compression=high)  ;
COPY colcmpr_str_01 FROM '@abs_srcdir@/data/colcmpr_str_00.data' delimiter '|';
SELECT L_DISCOUNT, L_SHIPMODE, L_COMMENT FROM colcmpr_str_01 ORDER BY 1, 2, 3;
DROP TABLE colcmpr_str_01;
-- Problem:<Encode Numeric>
-- for both compression level LOW and NO, they have the same CU size.
CREATE TABLE colcmpr_numeric_00 ( id int, a numeric(20,3) ) with (orientation=column, compression=no);
CREATE TABLE colcmpr_numeric_01 ( id int, a numeric(20,3) ) with (orientation=column, compression=low);
CREATE TABLE colcmpr_numeric_lineitem
(
    L_ORDERKEY    BIGINT NOT NULL
  , L_PARTKEY     BIGINT NOT NULL
  , L_SUPPKEY     BIGINT NOT NULL
  , L_LINENUMBER  BIGINT NOT NULL
  , L_QUANTITY    DECIMAL(15,2) NOT NULL
  , L_EXTENDEDPRICE  DECIMAL(15,2) NOT NULL                                                                                                                                            
  , L_DISCOUNT    DECIMAL(15,2) NOT NULL
  , L_TAX         DECIMAL(15,2) NOT NULL
  , L_RETURNFLAG  CHAR(1) NOT NULL
  , L_LINESTATUS  CHAR(1) NOT NULL
  , L_SHIPDATE    DATE NOT NULL
  , L_COMMITDATE  DATE NOT NULL
  , L_RECEIPTDATE DATE NOT NULL
  , L_SHIPINSTRUCT CHAR(25) NOT NULL
  , L_SHIPMODE     CHAR(10) NOT NULL
  , L_COMMENT      VARCHAR(44) NOT NULL
  --, primary key (L_ORDERKEY, L_LINENUMBER)
)
with (orientation = column)
 
;
COPY colcmpr_numeric_lineitem FROM '@abs_srcdir@/data/lineitem.data' delimiter '|';
INSERT INTO colcmpr_numeric_00 SELECT 1, L_EXTENDEDPRICE FROM colcmpr_numeric_lineitem;
INSERT INTO colcmpr_numeric_00 SELECT 1, L_QUANTITY FROM colcmpr_numeric_lineitem;
INSERT INTO colcmpr_numeric_00 SELECT 1, L_DISCOUNT FROM colcmpr_numeric_lineitem;
INSERT INTO colcmpr_numeric_00 SELECT 1, L_TAX FROM colcmpr_numeric_lineitem;
VACUUM FULL colcmpr_numeric_00;
INSERT INTO colcmpr_numeric_01 SELECT * FROM colcmpr_numeric_00;
-- check the table size
SELECT (SELECT pg_table_size('colcmpr_numeric_00')) > (SELECT pg_table_size('colcmpr_numeric_01'));
DROP TABLE colcmpr_numeric_00;
DROP TABLE colcmpr_numeric_01;
DROP TABLE colcmpr_numeric_lineitem;
-- problem: numeric don't display its real scale after columar compression 
CREATE TABLE colcmpr_numeric_02 ( id int, a numeric ) with (orientation=column);
COPY colcmpr_numeric_02 FROM STDIN;
1	1000
1	1001.20
1	1002.00
1	1003.100
1	1004.00
1	1005.00
1	1006.00
1	1007.00
1	1008.00
1	1009.00
1	1010.00
1	1011.00
1	1012.00
1	1013.00
1	1014.00
\.
SELECT * FROM colcmpr_numeric_02 ORDER BY 2;
DROP TABLE colcmpr_numeric_02;