range分区表、list分区表
只实践了range分区,list分区就不写了
1 创建表
CREATE TABLE test_partition_range (
"mount" float8,
"endtime" float8,
"starttime" float8
)
WITH (appendonly=true, compresslevel=5) DISTRIBUTED BY (endtime) PARTITION BY RANGE(mount)
(
PARTITION p20180301 START (1) END (500) WITH (tablename='test_partition_range_20180301', orientation=row , appendonly=true, compresslevel=5 ),
PARTITION p20180302 START (500) END (2000) WITH (tablename='test_partition_range_20180302', orientation=row , appendonly=true, compresslevel=5 ),
-- DEFAULT PARTITION other
);
2 插入数据
insert into test_partition_range VALUES (1,2,3);
insert into test_partition_range VALUES (500,2,3);
insert into test_partition_range VALUES (499,2,3);
insert into test_partition_range VALUES (501,2,3);
insert into test_partition_range VALUES (199,2,3);
insert into test_partition_range VALUES (2000,2,3);
如果不添加默认分区则无法插入数据2000
test_partition_range_20180301 范围为1<=amount<500
test_partition_range_20180302 范围为500<=amount<2000
2000进入默认表
3 手动添加分区
alter table test_partition_range add partition p20180303 start (2000) end (2000000) WITH (tablename='test_partition_range_20180303', orientation=row , appendonly=true, compresslevel=5 );
注意事项
参考:Greenplum4.2.2管理员指南
选择表的存储模式
GPDB提供几种灵活的存储处理模式(或者混合模式)。在创建一张新的TABLE时,有几个选项来决定数据如何储存在磁盘上。本节介绍这几种选项,以及出于工作负载的考虑如何实现最佳的储存模式。
选择堆存储(Heap)或只追加(Append-Only/AO)存储
选择行存储(Row-Orientation)或列存储(Column-Orientation)
使用压缩(只可以是AO表)
检查只追加(AO)表的压缩和分布情况
选择堆存储或者只追加存储
缺省情况下GPDB使用与PostgreSQL相同的存储模式-- 堆存储。堆存储模式在OLTP类型工作负载的DB中很常用-- 数据在初始装载后经常变化。UPDATE和DELETE操作需要对ROW级别做版本控制从而确保DB事务处理的可靠性。堆表更适合一些小表,比如维表,这种表可能会在初始化装载后经常更新数据。
GPDB还提供了一种称之为只追加存储模式的TABLE。AO表更适合数据仓库中非规范化事实表,这些表通常都是系统中最大的表。事实表通常是批量装载数据且只进行只读式查询操作。AO表在数据装载后是不支持更新的。将事实表数据存入AO表时不会保留更新相关ROW级别的信息(大约每ROW需要20字节)。AO表达到了更精简和优化的页面存储结构。AO表不允许执行DELETE和UPDATE操作。该存储模式强化了批量数据装载的性能。不推荐一行一行的使用INSERT语句来装载数据。
创建堆表
行存堆表是缺省的存储模式,创建堆表时不需要额外的CREATE TABLE语法。例如:
=> CREATE TABLE foo (a int, b text) DISTRIBUTED BY (a);
创建只追加表
在CREATE TABLE时使用WITH子句来指明TABLE的存储模式。如果没有指明,该表将会是缺省的行存堆表。例如,要创建一张没有压缩的AO表:
=> CREATE TABLE bar (a int, b text) WITH (appendonly=true)
选择行存或列存
GPDB提供存储导向的选择:行存或列存(或者混合)。本节提供一些关于正确选择行存或列存的常规指导。不过具体还需根据查询工作负载来确切评估。
只实践了range分区,list分区就不写了
1 创建表
CREATE TABLE test_partition_range (
"mount" float8,
"endtime" float8,
"starttime" float8
)
WITH (appendonly=true, compresslevel=5) DISTRIBUTED BY (endtime) PARTITION BY RANGE(mount)
(
PARTITION p20180301 START (1) END (500) WITH (tablename='test_partition_range_20180301', orientation=row , appendonly=true, compresslevel=5 ),
PARTITION p20180302 START (500) END (2000) WITH (tablename='test_partition_range_20180302', orientation=row , appendonly=true, compresslevel=5 ),
-- DEFAULT PARTITION other
);
2 插入数据
insert into test_partition_range VALUES (1,2,3);
insert into test_partition_range VALUES (500,2,3);
insert into test_partition_range VALUES (499,2,3);
insert into test_partition_range VALUES (501,2,3);
insert into test_partition_range VALUES (199,2,3);
insert into test_partition_range VALUES (2000,2,3);
如果不添加默认分区则无法插入数据2000
test_partition_range_20180301 范围为1<=amount<500
test_partition_range_20180302 范围为500<=amount<2000
2000进入默认表
3 手动添加分区
alter table test_partition_range add partition p20180303 start (2000) end (2000000) WITH (tablename='test_partition_range_20180303', orientation=row , appendonly=true, compresslevel=5 );
注意事项
参考:Greenplum4.2.2管理员指南
选择表的存储模式
GPDB提供几种灵活的存储处理模式(或者混合模式)。在创建一张新的TABLE时,有几个选项来决定数据如何储存在磁盘上。本节介绍这几种选项,以及出于工作负载的考虑如何实现最佳的储存模式。
选择堆存储(Heap)或只追加(Append-Only/AO)存储
选择行存储(Row-Orientation)或列存储(Column-Orientation)
使用压缩(只可以是AO表)
检查只追加(AO)表的压缩和分布情况
选择堆存储或者只追加存储
缺省情况下GPDB使用与PostgreSQL相同的存储模式-- 堆存储。堆存储模式在OLTP类型工作负载的DB中很常用-- 数据在初始装载后经常变化。UPDATE和DELETE操作需要对ROW级别做版本控制从而确保DB事务处理的可靠性。堆表更适合一些小表,比如维表,这种表可能会在初始化装载后经常更新数据。
GPDB还提供了一种称之为只追加存储模式的TABLE。AO表更适合数据仓库中非规范化事实表,这些表通常都是系统中最大的表。事实表通常是批量装载数据且只进行只读式查询操作。AO表在数据装载后是不支持更新的。将事实表数据存入AO表时不会保留更新相关ROW级别的信息(大约每ROW需要20字节)。AO表达到了更精简和优化的页面存储结构。AO表不允许执行DELETE和UPDATE操作。该存储模式强化了批量数据装载的性能。不推荐一行一行的使用INSERT语句来装载数据。
创建堆表
行存堆表是缺省的存储模式,创建堆表时不需要额外的CREATE TABLE语法。例如:
=> CREATE TABLE foo (a int, b text) DISTRIBUTED BY (a);
创建只追加表
在CREATE TABLE时使用WITH子句来指明TABLE的存储模式。如果没有指明,该表将会是缺省的行存堆表。例如,要创建一张没有压缩的AO表:
=> CREATE TABLE bar (a int, b text) WITH (appendonly=true)
选择行存或列存
GPDB提供存储导向的选择:行存或列存(或者混合)。本节提供一些关于正确选择行存或列存的常规指导。不过具体还需根据查询工作负载来确切评估。
从最通用的目的和混合工作负载来考虑,行存可以提供灵活与性能的最佳结合。不过在一些特定的情况下,列存可以提供更好的I/O和存储性能
如何消除表膨胀,参考
https://gp-docs-cn.github.io/docs/best_practices/bloat.html