原文連接git
這兩個數據類型須要在數據庫初始化之後,經過命令加載到須要的數據庫中: dgadmin@flash:~$ source deepgreendb/greenplum_path.sh dgadmin@flash:~$ cd $GPHOME/share/postgresql/contrib/ dgadmin@flash:~/deepgreendb/share/postgresql/contrib$ psql postgres -f pg_decimal.sql測試一把:
使用語句:select avg(x), sum(2*x) from table 數據量:100萬 dgadmin@flash:~$ psql -d postgres psql (8.2.15) Type "help" for help. postgres=# drop table if exists tt; NOTICE: table "tt" does not exist, skipping DROP TABLE postgres=# create table tt( postgres(# ii bigint, postgres(# f64 double precision, postgres(# d64 decimal64, postgres(# d128 decimal128, postgres(# n numeric(15, 3)) postgres-# distributed randomly; CREATE TABLE postgres=# insert into tt postgres-# select i, postgres-# i + 0.123, postgres-# (i + 0.123)::decimal64, postgres-# (i + 0.123)::decimal128, postgres-# i + 0.123 postgres-# from generate_series(1, 1000000) i; INSERT 0 1000000 postgres=# \timing on Timing is on. postgres=# select count(*) from tt; count --------- 1000000 (1 row) Time: 161.500 ms postgres=# set vitesse.enable=1; SET Time: 1.695 ms postgres=# select avg(f64),sum(2*f64) from tt; avg | sum ------------------+------------------ 500000.622996815 | 1000001245993.63 (1 row) Time: 45.368 ms postgres=# select avg(d64),sum(2*d64) from tt; avg | sum ------------+------------------- 500000.623 | 1000001246000.000 (1 row) Time: 135.693 ms postgres=# select avg(d128),sum(2*d128) from tt; avg | sum ------------+------------------- 500000.623 | 1000001246000.000 (1 row) Time: 148.286 ms postgres=# set vitesse.enable=1; SET Time: 11.691 ms postgres=# select avg(n),sum(2*n) from tt; avg | sum ---------------------+------------------- 500000.623000000000 | 1000001246000.000 (1 row) Time: 154.189 ms postgres=# set vitesse.enable=0; SET Time: 1.426 ms postgres=# select avg(n),sum(2*n) from tt; avg | sum ---------------------+------------------- 500000.623000000000 | 1000001246000.000 (1 row) Time: 296.291 ms
45ms - 64位float 136ms - decimal64 148ms - decimal128 154ms - deepgreen numeric 296ms - greenplum numeric
dgadmin@flash:~$ psql postgres -f $GPHOME/share/postgresql/contrib/json.sql測試一把:
dgadmin@flash:~$ psql postgres psql (8.2.15) Type "help" for help. postgres=# select '[1,2,3]'::json->2; ?column? ---------- 3 (1 row) postgres=# create temp table mytab(i int, j json) distributed by (i); CREATE TABLE postgres=# insert into mytab values (1, null), (2, '[2,3,4]'), (3, '[3000,4000,5000]'); INSERT 0 3 postgres=# postgres=# insert into mytab values (1, null), (2, '[2,3,4]'), (3, '[3000,4000,5000]'); INSERT 0 3 postgres=# select i, j->2 from mytab; i | ?column? ---+---------- 2 | 4 2 | 4 1 | 3 | 5000 1 | 3 | 5000 (6 rows)
postgres=# create temp table ttnone ( postgres(# i int, postgres(# t text, postgres(# default column encoding (compresstype=none)) postgres-# with (appendonly=true, orientation=column) postgres-# distributed by (i); CREATE TABLE postgres=# \timing on Timing is on. postgres=# create temp table ttzlib( postgres(# i int, postgres(# t text, postgres(# default column encoding (compresstype=zlib, compresslevel=1)) postgres-# with (appendonly=true, orientation=column) postgres-# distributed by (i); CREATE TABLE Time: 762.596 ms postgres=# create temp table ttzstd ( postgres(# i int, postgres(# t text, postgres(# default column encoding (compresstype=zstd, compresslevel=1)) postgres-# with (appendonly=true, orientation=column) postgres-# distributed by (i); CREATE TABLE Time: 827.033 ms postgres=# create temp table ttlz4 ( postgres(# i int, postgres(# t text, postgres(# default column encoding (compresstype=lz4)) postgres-# with (appendonly=true, orientation=column) postgres-# distributed by (i); CREATE TABLE Time: 845.728 ms postgres=# insert into ttnone select i, 'user '||i from generate_series(1, 100000000) i; INSERT 0 100000000 Time: 104641.369 ms postgres=# insert into ttzlib select i, 'user '||i from generate_series(1, 100000000) i; INSERT 0 100000000 Time: 99557.505 ms postgres=# insert into ttzstd select i, 'user '||i from generate_series(1, 100000000) i; INSERT 0 100000000 Time: 98800.567 ms postgres=# insert into ttlz4 select i, 'user '||i from generate_series(1, 100000000) i; INSERT 0 100000000 Time: 96886.107 ms postgres=# select pg_size_pretty(pg_relation_size('ttnone')); pg_size_pretty ---------------- 1708 MB (1 row) Time: 83.411 ms postgres=# select pg_size_pretty(pg_relation_size('ttzlib')); pg_size_pretty ---------------- 374 MB (1 row) Time: 4.641 ms postgres=# select pg_size_pretty(pg_relation_size('ttzstd')); pg_size_pretty ---------------- 325 MB (1 row) Time: 5.015 ms postgres=# select pg_size_pretty(pg_relation_size('ttlz4')); pg_size_pretty ---------------- 785 MB (1 row) Time: 4.483 ms postgres=# select sum(length(t)) from ttnone; sum ------------ 1288888898 (1 row) Time: 4414.965 ms postgres=# select sum(length(t)) from ttzlib; sum ------------ 1288888898 (1 row) Time: 4500.671 ms postgres=# select sum(length(t)) from ttzstd; sum ------------ 1288888898 (1 row) Time: 3849.648 ms postgres=# select sum(length(t)) from ttlz4; sum ------------ 1288888898 (1 row) Time: 3160.477 ms
postgres=# select count(*) from ttlz4; count ----------- 100000000 (1 row) Time: 903.661 ms postgres=# select * from ttlz4 limit sample 0.00001 percent; i | t ----------+--------------- 3442917 | user 3442917 9182620 | user 9182620 9665879 | user 9665879 13791056 | user 13791056 15669131 | user 15669131 16234351 | user 16234351 19592531 | user 19592531 39097955 | user 39097955 48822058 | user 48822058 83021724 | user 83021724 1342299 | user 1342299 20309120 | user 20309120 34448511 | user 34448511 38060122 | user 38060122 69084858 | user 69084858 73307236 | user 73307236 95421406 | user 95421406 (17 rows) Time: 4208.847 ms postgres=# select * from ttlz4 limit sample 10 rows; i | t ----------+--------------- 78259144 | user 78259144 85551752 | user 85551752 90848887 | user 90848887 53923527 | user 53923527 46524603 | user 46524603 31635115 | user 31635115 19030885 | user 19030885 97877732 | user 97877732 33238448 | user 33238448 20916240 | user 20916240 (10 rows) Time: 3578.031 ms