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;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM