Vertica 分区表设计

Vertica数据库中的表只是一个逻辑概念。

实际存储在磁盘上的是projection。 当创建一张表,没有创建projection时,那么插入数据的时候会自动创建一个默认的projection。如果运行中发现projection不合适,可以运行dbd进行优化,得出一些建议,参考来重建projection。

如果清楚projection如何建立最优,那么建表的时候就可以在插入数据之前直接手动建立对应的projection。

Projection

Optimized collections of table columns that provide physical storage for data. A projection can contain some or all of the columns of one or more tables. A projection that contains all of the columns of a table is called a super-projection. A projection that joins one or more tables is called a pre-join projection.

导出Vertica库中原有的建表语句:

例如导出test用户下的t_jingyu表的建表语句到/tmp/t_jingyu.sql文件(需要dbadmin用户登录vsql操作):
select export_objects('/tmp/t_jingyu.sql','test.t_jingyu');

vertica建分区表:

按doy分区:

create table t_jingyu(
col1 int, 
col2 varchar, 
col3 timestamp not null)
PARTITION BY (date_part('doy', t_jingyu.col3));

这样的分区表卸载时:

SELECT DROP_PARTITION('test.t_jingyu', EXTRACT('doy' FROM '2015-04-01'::date)); 

按月分区:

create table t_jingyu(
col1 int, 
col2 varchar, 
col3 timestamp not null)
partition by EXTRACT(year FROM col3)*100 + EXTRACT(month FROM col3);

插入测试数据:

insert into t_jingyu values(1,11,sysdate-1);
insert into t_jingyu values(1,11,sysdate);
insert into t_jingyu values(2,11,sysdate-33);
commit;

这样的分区表卸载时:

SELECT DROP_PARTITION('test.t_jingyu', EXTRACT('year' FROM '20150401'::date)*100 +  EXTRACT('month' FROM '20150401'::date)); 

上面就是删除201504的分区。

创建Projection:

CREATE PROJECTION t_jingyu
(
col1, 
col2, 
col3
)
AS
SELECT * FROM t_jingyu
ORDER BY col3, col1
SEGMENTED BY hash(col3) ALL NODES KSAFE 1;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值