DB2可以对一张建立两个分区字段吗?

杰小 2011-02-22 11:41:49
建立一张表,包含编号、名称和日期3个字段

想先按编号分区,比如1-10一个区,11-20一个区
在按日期分区,比如1月1号到3月31号一个区,4月1号到6月31号一个区

然后删数据的时候是否可以删除日期的最小分区(1月1号到3月31号那个区),然后再添加7月1号到9月30号的分区?

这方面不懂,希望可以得到高手指点,希望可以给出具体的建表语句,谢谢!
...全文
333 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhaojianmi1 2011-02-22
  • 打赏
  • 举报
回复
做法是,按照编号和日期两个组合分区键进行范围分区,例子
CREATE TABLE FACT_IO_BK_AREA 
(
DATE_ID char(6) NOT NULL,
IO_TYPE char(1) NOT NULL,
AP_SAFE_ID char(6) NOT NULL,
IS_SPEC char(2) NOT NULL,
IS_UNIT char(1) NOT NULL,
IS_RESIDENT char(1) NOT NULL,
BALANCE_ID char(6) NOT NULL,
PAYTYPE_ID char(1) NOT NULL,
AP_BANK_ID char(4) NOT NULL,
IO_OTHER_AMT decimal(24,2) ,
IO_BUYSALE_AMT decimal(24,2) ,
IO_READY_AMT decimal(24,2) ,
IO_AMT decimal(24,2) ,
IO_NUM decimal(24,1) ,
IO_AMT_Y decimal(24,2) ,
IO_AMT_M decimal(24,2) ,
IO_AMT_A decimal(24,2) ,
IO_NUM_Y decimal(24,1) ,
IO_NUM_M decimal(24,1) ,
IO_NUM_A decimal(24,1) ,
IO_AMT_AY decimal(24,2)
)INDEX IN TBS_GATHERIDX PARTITION BY RANGE(DATE_ID)
(PART OTHERS1 STARTING(MINVALUE) EXCLUSIVE ENDING('200701') EXCLUSIVE IN TBS_GATHER,
PART DATAPATITION200701 STARTING('200701') ENDING('200702') EXCLUSIVE IN TBS_GATHER,
PART DATAPATITION200702 STARTING('200702') ENDING('200703') EXCLUSIVE IN TBS_GATHER,
PART DATAPATITION200703 STARTING('200703') ENDING('200704') EXCLUSIVE IN TBS_GATHER,
PART DATAPATITION200704 STARTING('200704') ENDING('200705') EXCLUSIVE IN TBS_GATHER,
PART DATAPATITION200705 STARTING('200705') ENDING('200706') EXCLUSIVE IN TBS_GATHER,
PART DATAPATITION200706 STARTING('200706') ENDING('200707') EXCLUSIVE IN TBS_GATHER,
......
PART DATAPATITION200904 STARTING('200904') ENDING('200905') EXCLUSIVE IN TBS_GATHER,
PART DATAPATITION200905 STARTING('200905') ENDING('200906') EXCLUSIVE IN TBS_GATHER,
PART DATAPATITION200906 STARTING('200906') ENDING('200907') EXCLUSIVE IN TBS_GATHER,
PART DATAPATITION200907 STARTING('200907') ENDING('200908') EXCLUSIVE IN TBS_GATHER,
PART DATAPATITION200908 STARTING('200908') ENDING('200909') EXCLUSIVE IN TBS_GATHER,
PART DATAPATITION200909 STARTING('200909') ENDING('200910') EXCLUSIVE IN TBS_GATHER,
PART DATAPATITION200910 STARTING('200910') ENDING('200911') EXCLUSIVE IN TBS_GATHER,
PART DATAPATITION200911 STARTING('200911') ENDING('200912') EXCLUSIVE IN TBS_GATHER,
PART DATAPATITION200912 STARTING('200912') ENDING('201001') EXCLUSIVE IN TBS_GATHER,
PART OTHERS2 STARTING('201001') ENDING(MAXVALUE) EXCLUSIVE IN TBS_GATHER);


修改表分区的例子
ALTER TABLE DB2INST1.FACT_IO_RL_AREA DETACH PARTITION OTHERS2 INTO TABLE DB2INST1.FACT_IO_RL_AREA_OTHERS2;


ALTER TABLE DB2INST1.FACT_IO_RL_AREA ADD PARTITION DATAPATION201001 STARTING FROM ('201001') INCLUSIVE ENDING AT ('201002') EXCLUSIVE IN TBS_GATHER ;
ALTER TABLE DB2INST1.FACT_IO_RL_AREA ADD PARTITION DATAPATION201002 STARTING FROM ('201002') INCLUSIVE ENDING AT ('201003') EXCLUSIVE IN TBS_GATHER ;
ALTER TABLE DB2INST1.FACT_IO_RL_AREA ADD PARTITION DATAPATION201003 STARTING FROM ('201003') INCLUSIVE ENDING AT ('201004') EXCLUSIVE IN TBS_GATHER ;
ALTER TABLE DB2INST1.FACT_IO_RL_AREA ADD PARTITION DATAPATION201004 STARTING FROM ('201004') INCLUSIVE ENDING AT ('201005') EXCLUSIVE IN TBS_GATHER ;
ALTER TABLE DB2INST1.FACT_IO_RL_AREA ADD PARTITION DATAPATION201005 STARTING FROM ('201005') INCLUSIVE ENDING AT ('201006') EXCLUSIVE IN TBS_GATHER ;
ALTER TABLE DB2INST1.FACT_IO_RL_AREA ADD PARTITION DATAPATION201006 STARTING FROM ('201006') INCLUSIVE ENDING AT ('201007') EXCLUSIVE IN TBS_GATHER ;
ALTER TABLE DB2INST1.FACT_IO_RL_AREA ADD PARTITION DATAPATION201007 STARTING FROM ('201007') INCLUSIVE ENDING AT ('201008') EXCLUSIVE IN TBS_GATHER ;
ALTER TABLE DB2INST1.FACT_IO_RL_AREA ADD PARTITION DATAPATION201008 STARTING FROM ('201008') INCLUSIVE ENDING AT ('201009') EXCLUSIVE IN TBS_GATHER ;
ALTER TABLE DB2INST1.FACT_IO_RL_AREA ADD PARTITION DATAPATION201009 STARTING FROM ('201009') INCLUSIVE ENDING AT ('201010') EXCLUSIVE IN TBS_GATHER ;
ALTER TABLE DB2INST1.FACT_IO_RL_AREA ADD PARTITION DATAPATION201010 STARTING FROM ('201010') INCLUSIVE ENDING AT ('201011') EXCLUSIVE IN TBS_GATHER ;
ALTER TABLE DB2INST1.FACT_IO_RL_AREA ADD PARTITION DATAPATION201011 STARTING FROM ('201011') INCLUSIVE ENDING AT ('201012') EXCLUSIVE IN TBS_GATHER ;
ALTER TABLE DB2INST1.FACT_IO_RL_AREA ADD PARTITION DATAPATION201012 STARTING FROM ('201012') INCLUSIVE ENDING AT ('201101') EXCLUSIVE IN TBS_GATHER ;

ALTER TABLE DB2INST1.FACT_IO_RL_AREA ADD PARTITION DATAPATION201101 STARTING FROM ('201101') INCLUSIVE ENDING AT ('201102') EXCLUSIVE IN TBS_GATHER ;
ALTER TABLE DB2INST1.FACT_IO_RL_AREA ADD PARTITION DATAPATION201102 STARTING FROM ('201102') INCLUSIVE ENDING AT ('201103') EXCLUSIVE IN TBS_GATHER ;
ALTER TABLE DB2INST1.FACT_IO_RL_AREA ADD PARTITION DATAPATION201103 STARTING FROM ('201103') INCLUSIVE ENDING AT ('201104') EXCLUSIVE IN TBS_GATHER ;
ALTER TABLE DB2INST1.FACT_IO_RL_AREA ADD PARTITION DATAPATION201104 STARTING FROM ('201104') INCLUSIVE ENDING AT ('201105') EXCLUSIVE IN TBS_GATHER ;
ALTER TABLE DB2INST1.FACT_IO_RL_AREA ADD PARTITION DATAPATION201105 STARTING FROM ('201105') INCLUSIVE ENDING AT ('201106') EXCLUSIVE IN TBS_GATHER ;
ALTER TABLE DB2INST1.FACT_IO_RL_AREA ADD PARTITION DATAPATION201106 STARTING FROM ('201106') INCLUSIVE ENDING AT ('201107') EXCLUSIVE IN TBS_GATHER ;
ALTER TABLE DB2INST1.FACT_IO_RL_AREA ADD PARTITION DATAPATION201107 STARTING FROM ('201107') INCLUSIVE ENDING AT ('201108') EXCLUSIVE IN TBS_GATHER ;
ALTER TABLE DB2INST1.FACT_IO_RL_AREA ADD PARTITION DATAPATION201108 STARTING FROM ('201108') INCLUSIVE ENDING AT ('201109') EXCLUSIVE IN TBS_GATHER ;
ALTER TABLE DB2INST1.FACT_IO_RL_AREA ADD PARTITION DATAPATION201109 STARTING FROM ('201109') INCLUSIVE ENDING AT ('201110') EXCLUSIVE IN TBS_GATHER ;
ALTER TABLE DB2INST1.FACT_IO_RL_AREA ADD PARTITION DATAPATION201110 STARTING FROM ('201110') INCLUSIVE ENDING AT ('201111') EXCLUSIVE IN TBS_GATHER ;
ALTER TABLE DB2INST1.FACT_IO_RL_AREA ADD PARTITION DATAPATION201111 STARTING FROM ('201111') INCLUSIVE ENDING AT ('201112') EXCLUSIVE IN TBS_GATHER ;
ALTER TABLE DB2INST1.FACT_IO_RL_AREA ADD PARTITION DATAPATION201112 STARTING FROM ('201112') INCLUSIVE ENDING AT ('201201') EXCLUSIVE IN TBS_GATHER ;

ALTER TABLE DB2INST1.FACT_IO_RL_AREA ADD PARTITION DATAPATION201201 STARTING FROM ('201201') INCLUSIVE ENDING AT ('201202') EXCLUSIVE IN TBS_GATHER ;
ALTER TABLE DB2INST1.FACT_IO_RL_AREA ADD PARTITION DATAPATION201202 STARTING FROM ('201202') INCLUSIVE ENDING AT ('201203') EXCLUSIVE IN TBS_GATHER ;
ALTER TABLE DB2INST1.FACT_IO_RL_AREA ADD PARTITION DATAPATION201203 STARTING FROM ('201203') INCLUSIVE ENDING AT ('201204') EXCLUSIVE IN TBS_GATHER ;
ALTER TABLE DB2INST1.FACT_IO_RL_AREA ADD PARTITION DATAPATION201204 STARTING FROM ('201204') INCLUSIVE ENDING AT ('201205') EXCLUSIVE IN TBS_GATHER ;
ALTER TABLE DB2INST1.FACT_IO_RL_AREA ADD PARTITION DATAPATION201205 STARTING FROM ('201205') INCLUSIVE ENDING AT ('201206') EXCLUSIVE IN TBS_GATHER ;
ALTER TABLE DB2INST1.FACT_IO_RL_AREA ADD PARTITION DATAPATION201206 STARTING FROM ('201206') INCLUSIVE ENDING AT ('201207') EXCLUSIVE IN TBS_GATHER ;
ALTER TABLE DB2INST1.FACT_IO_RL_AREA ADD PARTITION DATAPATION201207 STARTING FROM ('201207') INCLUSIVE ENDING AT ('201208') EXCLUSIVE IN TBS_GATHER ;
ALTER TABLE DB2INST1.FACT_IO_RL_AREA ADD PARTITION DATAPATION201208 STARTING FROM ('201208') INCLUSIVE ENDING AT ('201209') EXCLUSIVE IN TBS_GATHER ;
ALTER TABLE DB2INST1.FACT_IO_RL_AREA ADD PARTITION DATAPATION201209 STARTING FROM ('201209') INCLUSIVE ENDING AT ('201210') EXCLUSIVE IN TBS_GATHER ;
ALTER TABLE DB2INST1.FACT_IO_RL_AREA ADD PARTITION DATAPATION201210 STARTING FROM ('201210') INCLUSIVE ENDING AT ('201211') EXCLUSIVE IN TBS_GATHER ;
ALTER TABLE DB2INST1.FACT_IO_RL_AREA ADD PARTITION DATAPATION201211 STARTING FROM ('201211') INCLUSIVE ENDING AT ('201212') EXCLUSIVE IN TBS_GATHER ;
ALTER TABLE DB2INST1.FACT_IO_RL_AREA ADD PARTITION DATAPATION201212 STARTING FROM ('201212') INCLUSIVE ENDING AT ('201301') EXCLUSIVE IN TBS_GATHER ;


ALTER TABLE DB2INST1.FACT_IO_RL_AREA ATTACH PARTITION OTHERS2 STARTING FROM ('201301') INCLUSIVE ENDING AT (MAXVALUE) EXCLUSIVE FROM TABLE DB2INST1.FACT_IO_RL_AREA_OTHERS2;
zhaojianmi1 2011-02-22
  • 打赏
  • 举报
回复
可以两个字段组合作为分区键,这样做完全可以
zhaojianmi1 2011-02-22
  • 打赏
  • 举报
回复
http://www.ibm.com/developerworks/cn/data/dmmag/dbt15n3/DistributedDBA/index.html

PARTITION BY <RANGE>  
([ColumnName] <NULLS LAST | NULLS FIRST> ,...)
(
<PARTITION [PartitionName]>
STARTING <FROM> [Start | MINVALUE | MAXVALUE] |
STARTING <FROM> ([Start | MINVALUE | MAXVALUE] ,...)
<INCLUSIVE | EXCLUSIVE>
ENDING <AT> [End | MINVALUE | MAXVALUE] |
ENDING <AT> ([End | MINVALUE | MAXVALUE] ,...)
<INCLUSIVE | EXCLUSIVE>
<IN [TSName]>
<INDEX IN [IndexTSName]>
<LONG IN [LongTSName]>

•ColumnName:用名称指定一个或多个列(最多 16 列),这些列的值用来决定数据行应该存储在哪个数据分区中。(指定的列组成表的分区键 — 参见边栏 “选择表分区键”。)数据类型为 LONG VARCHAR、LONG VARGRAPHIC、BLOB、CLOB、DBCLOB、XML、基于这些数据类型的 distinct 类型和结构化数据类型的列都不能作为数据分区键的组成部分。
•PartitionName:指定分配给要创建的数据分区的惟一名称。
•Start:指定每个数据分区的范围下限。
•End:指定每个数据分区的范围上限。
•Constant:在使用语法的自动生成形式时,指定每个数据分区范围的宽度。从 STARTING FROM 值开始创建数据分区,数据分区的范围内包含指定数量的值。支持这种语法的条件是分区键由单一列组成,这一列的数据类型是数字、日期、时间或时间戳。
•DurationLabel:如果分区键列的数据类型是日期、时间或时间戳,这个参数指定与 Constant 值相关的时间单位。这个参数的有效值是:YEAR、YEARS、MONTH、MONTHS、DAY、DAYS、HOUR、HOURS、MINUTE、MINUTES、SECOND、SECONDS、MICROSECOND 和 MICROSECONDS。
•TSName:指定存储每个数据分区的表空间。
•IndexTSName:指定存储每个数据分区的分区索引的表空间。
•LongTSName:指定存储长列的值的表空间。
杰小 2011-02-22
  • 打赏
  • 举报
回复
你这个依旧是单个字段的分区呀?两个字段分区如何去写?假如IO_TYPE也要建立分区,这样写?
CREATE TABLE FACT_IO_BK_AREA
(
DATE_ID char(6) NOT NULL,
IO_TYPE char(1) NOT NULL,
IO_OTHER_AMT decimal(24,2) ,
IO_AMT_AY decimal(24,2)
)INDEX IN TBS_GATHERIDX PARTITION BY RANGE(DATE_ID)
(PART OTHERS1 STARTING(MINVALUE) EXCLUSIVE ENDING('200701') EXCLUSIVE IN TBS_GATHER,
......
PART OTHERS2 STARTING('201001') ENDING(MAXVALUE) EXCLUSIVE IN TBS_GATHER)

PARTITION BY RANGE(IO_TYPE)
(PART OTHERS1 STARTING(MINVALUE) EXCLUSIVE ENDING('200701') EXCLUSIVE IN TBS_GATHER,
......
PART OTHERS2 STARTING('201001') ENDING(MAXVALUE) EXCLUSIVE IN TBS_GATHER);


这样执行不了额,麻烦可以给出两个字段分区的实例吗?

5,889

社区成员

发帖
与我相关
我的任务
社区描述
IBM DB2 是美国IBM公司开发的一套关系型数据库管理系统,它主要的运行环境为UNIX(包括IBM自家的AIX)、Linux、IBM i(旧称OS/400)、z/OS,以及Windows服务器版本
社区管理员
  • DB2
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧