背景:
某运营商经分分析系统 底层数据仓库; 离线分析系统 物理模型表 表多批量操作 批量插入、更新 ,truncate操作,全表分组分析等。
--drop table dwctr.tc_term_xxx;
create table dwctr.tc_term_xxx(
acyc_id integer not null
,bcyc_id varchar(6) not null
,user_id varchar(14)
,open_date date
,update_time timestamp
,total_cost decimal(10,2)
)
distributed by (user_id)
with (appendonly=true --①仅追加
,orientation=column --②列存储
,compresstype=zlib --③压缩算法
,compresslevel=5 --④压缩级别
,oids=false) --⑤对象标识符
comment on table dwctr.tc_term_xxx is '';
comment on column dwctr.tc_term_xxx.acyc_id is '统计账期';
comment on column dwctr.tc_term_xxx.bcyc_id is '统计月份';
comment on column dwctr.tc_term_xxx.user_id is '用户标识';
comment on column dwctr.tc_term_xxx.open_date is '入网日期';
comment on column dwctr.tc_term_xxx.update_time is '更新时间';
comment on column dwctr.tc_term_xxx.total_cost is '成本';
--(2)将历史表存储周期Insert语句也放在相应目标表的历史表建表语句下
总结 适合单表数据量亿级一下 批量操作以及对部分列聚合操作很多的 业务场景
--drop table dwctr.tch_term_xxx;
create table dwctr.tch_term_xxx(
acyc_id integer not null
,bcyc_id varchar(6) not null
,user_id varchar(14)
,open_date date
,update_time timestamp
,total_cost decimal(10,2)
)
distributed by (user_id)
with (appendonly=true --①仅追加
,orientation=column --②列存储
,compresstype=zlib --③压缩算法
,compresslevel=5 --④压缩级别
,oids=false) --⑤对象标识符
PARTITION BY LIST(bcyc_id)
(
PARTITION p190001 VALUES('190001') WITH (appendonly=true, orientation=column, compresstype= zlib, compresslevel=5), --⑥默认分区
PARTITION p201303 VALUES('201303') WITH (appendonly=true, orientation=column, compresstype= zlib, compresslevel=5) --⑦数据分区
);
comment on table dwctr.tch_term_xxx is 'XXXXXXXXX';
comment on column dwctr.tch_term_xxx.acyc_id is '统计账期';
comment on column dwctr.tch_term_xxx.bcyc_id is '统计月份';
comment on column dwctr.tch_term_xxx.user_id is '用户标识';
comment on column dwctr.tch_term_xxx.open_date is '入网日期';
comment on column dwctr.tch_term_xxx.update_time is '更新时间';
comment on column dwctr.tch_term_xxx.total_cost is '总成本';
/**
其他参数如上
⑥默认分区:建任何分区表时均应给一条初始化的分区,减少添加不到任何一个分区时出错。
⑦数据分区:分区的values必须是与分区表分区键类型对应的值,如无对应分区,数据插入时会出错。且不需要一次性将所有分区写入,有分区表存储过程可自动增加相应分区(详见分区表存储过程)。
**/
--数据表使用列存储AO表,使用zlib算法5级压缩
--WITH (APPENDONLY=true, ORIENTATION=column, COMPRESSTYPE=zlib, COMPRESSLEVEL=5)
--参数表、维表使用行存储非AO表,非压缩
--WITH (APPENDONLY=false)
--建议
--(1)将临时表建表语句放在目标表建表语句下
--(2)将历史表存储周期Insert语句也放在相应目标表的历史表建表语句下