append_only表相关

 greenplum里面有一种appendonly表,只能insert,不能updatedelete的一种表压缩表列存储,必须是appendonly的表。下面介绍appendonly表的一些特性。

1.首先建一张appendonly的表:

[sql] view plaincopy

1. aligputf8=# create table cxf_test1 with(appendonly=true,compresslevel=5) as select generate_series(0,1000) a,’helloworld’::varchar(50) b distributed by (a);  

2. SELECT 1001  

2.查一下表的oid

oid: 行的对象标识符(对象 ID)。这个字段只有在创建表的时候使用了 WITH OIDS ,或者是设置了default_with_oids 配置参数时出现。 这个字段的类型是 oid (和字段同名)。 

[sql] view plaincopy

1. aligputf8=# select oid from pg_class where relname=’cxf_test1′;  

2.   oid    

3. ——–  

4.  383660  

5. (1 row)  

6.    

7. aligputf8=# select oid,oid::regclass from pg_class where relname=’cxf_test1′ or relname like ‘%383660%’;  

8.   oid   |              oid                

9. ——–+——————————–  

10.  383665 | pg_aoseg.pg_aoseg_383660  

11.  383666 | pg_aoseg.pg_aoseg_383660_index  

12.  383660 | cxf_test1  

13. (3 rows)  

gp3.3.*的版本里面,aoseg表的信息是记录在pg_class中的relaosegrelid 字段,是以这个为准的

[sql] view plaincopy

1. aligputf8=# select relaosegrelid from pg_class where relname=’cxf_test1′;  

2.  relaosegrelid  

3. —————  

4.         383665  

5. (1 row)  

gp4.*的版本里面,pg_classrelaosegrelid 字段已经取消掉了,这个信息保留在了pg_appendonly表中的segrelid字段中了。

 

3.aoseg表的字段信息

[sql] view plaincopy

1. aligputf8=# \d pg_aoseg.pg_aoseg_383660  

2.     “pg_aoseg.pg_aoseg_383660″  

3.      Column      |       Type        

4. —————–+——————  

5.  segno           | integer  

6.  eof             | double precision  

7.  tupcount        | double precision  

8.  varblockcount   | double precision  

9.  eofuncompressed | double precision  

这个表每个字段的意思gp的文档里面没有,大概觉得每个字段信息应该是:

Segno: 这个字段还不是很清楚,第一次建表的时候是0truncate之后就变成1了,再truncate还是1

eof     :压缩后文件大小

tupcount:表的函数

varblockcount:表占用的块数量

eofuncompressed:未压缩表的大小

 

[sql] view plaincopy

1. aligputf8=# select * from gp_dist_random(’pg_aoseg.pg_aoseg_383660′);  

2.  segno | eof | tupcount | varblockcount | eofuncompressed  

3. ——-+—–+———-+—————+—————–  

4.      0 | 732 |      161 |             1 |            4204  

5.      0 | 728 |      161 |             1 |            4204  

6.      0 | 720 |      159 |             1 |            4152  

7.      0 | 808 |      181 |             1 |            4724  

8.      0 | 796 |      178 |             1 |            4644  

9.      0 | 728 |      161 |             1 |            4204  

10. (6 rows)  

通过gp_dist_random这个函数,我们可以知道gp底层每个数据节点数据量,数据文件大小的情况,这样子我们就能够分析表的数据分布情况,算出倾斜率等。

基于appendonly表,我开发了两个gp的函数:

get_table_count是获取append only表的行数的,appendonly表有一个字段是保存这些信息的。这个函数获取表的函数很快,支持分区表

[sql] view plaincopy

1. aligputf8=# select * from get_table_count(’rtdc.cxf_test1′);  

2.  get_table_count  

3. —————–  

4.   1001  

5. (1 row)  

 

你可能感兴趣的:(GP开发基础)