db2 分区表命令和总结


1. 分区表相关的系统对象视图
syscat.tables -- 表信息
sysibm.systables ---表信息
syscat.datapartitions --分区表信息
syscat.datapartitionexpression --分区表分区字段字段信息


2.分区表特性

支持MINVALUE、MAXVALUE;

支持值的上下边界限制,INCLUSIVE、EXCLUSIVE;

仅支持range 的一级分区(目前);

支持多字段的分区键;

 注:db2 using hashing 为distrubute by hash()分布表的意思,与分区表概念不同。


--新建分区表
create table test_part (c1 int not null , c2 varchar(20), c3 varchar(8) not null) partition by range(c3)
(starting '20210101',
statring '20210401' ending '20210630',
statring '20210701' ending '20210930',
statring '20211001' ending '20211231'
) data capture changes

--查看表分区
方式一:
SELECT * FROM SYSCAT.datapartitions WHERE TABNAME='TEST_PART'
方式二:
db2 describe data partitions for table TEST_PART


--添加表分区
alter table table_name add partition statis_month STARTINT'201301' INCLUSIVE ENDING '20090102' INCLUSIVE

--收集信息
db2 runstats on table schema.table_name
--使用的页
select tabname, npages from syscat.tables where tabname = 'table_name'
--数据占用空间
select tabname, npages*16384/(1024*1024) from syscat.tables where tabname = 'XXXXXX'


3. 分区数据删除

db2 "create table t1 (id int, age int) partition by range(age)(partition part1 starting 1 ending 18, partition part2 starting 19 ending 60, partition part3 starting 61 ending 80)"

db2 "alter table t1 ACTIVATE COLUMN ACCESS CONTROL" --开启列访问控制

db2 "insert into t1 values (1,2),(2,8),(3,10),(4,20),(5,22),(6,61)" --开启列访问控制

db2 "alter table t1 detach partition part1 into t1_part1" --删除分区数据,移动到新表

db2look -d tstdb -a -e -t t1_part1 --查看ddl

db2 "alter table DB2TST.T1_PART1 DEACTIVATE ROW ACCESS CONTROL" --新表的去除行访问限制

 

4.分区数据查看

--select * from tet parttion(p1); --db2不支持

用以下方式:

select * from TEST_PART2 where (c1,c3) between (10,'20210201') and (12, '20210228') and (c1,c3) != (12, '20210228');

 

posted @ 2021-08-26 10:38  疾风泣影  阅读(3170)  评论(0编辑  收藏  举报